commit 86d0aa1b75dd49e646d084039e3455bff1a9de0f Author: fengachen <373943794@qq.com> Date: Mon Aug 23 10:04:51 2021 +0800 Initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d479839e --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +*.js linguist-language=Java +*.css linguist-language=Java +*.html linguist-language=Java +*.vue linguist-language=Java diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2d937e7f --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +/target/ +/.idea/ +jeecg-boot-module-demo +rebel.xml + +#java +*.class + +#package file +*.war +*.ear +*.zip +*.tar.gz +*.rar +#maven ignore +target/ +build/ + +#eclipse ignore +.settings/ +.project +.classpatch + +#Intellij idea +.idea/ +/idea/ +out/ +logs/ +*.ipr +*.iml +*.iws + +# temp file +*.log +*.cache +*.diff +*.patch +*.tmp \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..774af2dc --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 jero-boot + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 00000000..9494c114 --- /dev/null +++ b/README.md @@ -0,0 +1,247 @@ +# jero-boot 低代码开发平台(青春版) + +=============== + +当前最新版本: 2.4.2(发布日期:20210126) +青春版修改内容请看第五点和第六点 + +## 后端技术架构 + +- 基础框架:Spring Boot 2.3.5.RELEASE + +- 持久层框架:Mybatis-plus 3.4.1 + +- 安全框架:Apache Shiro 1.7.0,Jwt 3.11.0 + +- 数据库连接池:阿里巴巴Druid 1.1.22 + +- 缓存框架:redis + +- 日志打印:logback + +- 其他:fastjson,poi,Swagger-ui,quartz, lombok(简化代码)等。 + +## 开发环境 + +- 语言:Java 8 + +- IDE(JAVA): Eclipse安装lombok插件 或者 IDEA + +- 依赖管理:Maven + +- 数据库:MySQL5.7+ & Oracle 11g + +- 缓存:Redis + +## 技术文档 + +- 在线文档: [http://doc.xxx.com](http://doc.xxx.com) + +- 常见问题: [http://xxx.com/doc/qa](http://xxx.com/doc/qa) + +## 专项文档 + +### 初始管理员账户密码 + +账户: admin +密码: 123456 + +### 一、查询过滤器用法 + +```text +QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(?, req.getParameterMap()); +``` + +代码示例: + +```text + + @GetMapping(value = "/list") + public Result> list(JeroDemo jeroDemo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + + //调用QueryGenerator的initQueryWrapper + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(jeroDemo, req.getParameterMap()); + + Page page = new Page(pageNo, pageSize); + IPage pageList = JeroDemoService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + +``` + +- 查询规则 (本规则不适用于高级查询,高级查询有自己对应的查询类型可以选择 ) + +| 查询模式 | 用法 | 说明 | +|---------- |-------------------------------------------------------|------------------| +| 模糊查询 | 支持左右模糊和全模糊 需要在查询输入框内前或后带\*或是前后全部带\* | | +| 取非查询 | 在查询输入框前面输入! 则查询该字段不等于输入值的数据(数值类型不支持此种查询,可以将数值字段定义为字符串类型的) | | +| \> \>= < <= | 同取非查询 在输入框前面输入对应特殊字符即表示走对应规则查询 | | +| in查询 | 若传入的数据带,(逗号) 则表示该查询为in查询 | | +| 多选字段模糊查询 | 上述4 有一个特例,若某一查询字段前后都带逗号 则会将其视为走这种查询方式 ,该查询方式是将查询条件以逗号分割再遍历数组 将每个元素作like查询 用or拼接,例如 现在name传入值 ,a,b,c, 那么结果sql就是 name like '%a%' or name like '%b%' or name like '%c%' | | + +### 三、代码生成器 + +> 功能说明: 一键生成的代码(包括:controller、service、dao、mapper、entity、vue) + +- 模板位置: src/main/resources/jero/code-template +- 技术文档: + +### 四、编码排重使用示例 + +重复校验效果: +![输入图片说明](https://static.oschina.net/uploads/img/201904/19191836_eGkQ.png "在这里输入图片标题") + +1.引入排重接口,代码如下: + +```js +import { duplicateCheck } from '@/api/api' + ``` + +2.找到编码必填校验规则的前端代码,代码如下: + +```js + + +code: { + rules: [ + { required: true, message: '请输入编码!' }, + {validator: this.validateCode} + ] + } + ``` + +3.找到rules里validator对应的方法在哪里,然后使用第一步中引入的排重校验接口. + 以用户online表单编码为示例,其中四个必传的参数有: + +```text + {tableName:表名,fieldName:字段名,fieldVal:字段值,dataId:表的主键}, + ``` + + 具体使用代码如下: + +```text + validateCode(rule, value, callback){ + let pattern = /^[a-z|A-Z][a-z|A-Z|\d|_|-]{0,}$/; + if(!pattern.test(value)){ + callback('编码必须以字母开头,可包含数字、下划线、横杠'); + } else { + var params = { + tableName: "onl_cgreport_head", + fieldName: "code", + fieldVal: value, + dataId: this.model.id + }; + duplicateCheck(params).then((res)=>{ + if(res.success){ + callback(); + }else{ + callback(res.message); + } + }) + } + } +``` + +6.访问后台项目(注意要开启swagger) + +```text + http://localhost:8080/jero-boot/doc.html +``` + +### 五 精简功能 + +1. 去除了Online代码生成功能的sql,代码,配置文件 + jero-boot-base-generater模块 和 jero-boot-base-generater-core模块 +2. 去除了spring cloud相关的代码和依赖 +3. 去除了demo模块的内容 +4. 去除了多租户模块功能 +5. 把jero-system-local-api模块改为jero-boot-base-api模块 + 删除jero-system-cloud-api模块 + +### 六 新增功能 + +1. 集成p6spy sql打印依赖 + - 数据库url和驱动改为p6spy + - 注释了yml文件里mybatis-plus的sql打印 + - 增加了[spy.properties](/jero-boot-single-startup/src/main/resources/spy.properties)配置文件 + +2. 增加[@DictPoint](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java)注解(会查找返回值中的@Dict返回字典数据) +使用方法如下: + + ```text + @DictPoint + @GetMapping(value = "/a") + public Result a() { + + } + ``` + +3. 账号和密码提示信息改为"登录失败,用户名或密码错误!" +4. 验证码过期时间改为5分钟 +5. 指定生成的jar包名 + [pom.xml](./pom.xml) + + ```xml + + jero-boot + + ``` + +6. 增加xss过滤,cors过滤,html过滤,sql过滤 + [webConfig](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebConfig.java) + [xss过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssFilter.java) + [cors过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/cors/CorsFilter.java) + [html过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/HTMLFilter.java) + [sql过滤](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/SqlFilter.java) + 在jero-boot-base-core模块com.jero.config.filter路径下 +7. @Valid相关 + - 增加全局处理@Valid验证异常 + 在jero-boot-base-core模块com.jero.common.exception路径下 + [JeroBootExceptionHandler](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java) + + ````text + /** + * get方法使用BindException接收 + */ + @ExceptionHandler(BindException.class) + @ResponseBody + public Result handleBindException(BindException e) { + log.error(e.getMessage(), e.getBindingResult().getFieldError().getDefaultMessage()); + return Result.error(e.getBindingResult().getFieldError().getDefaultMessage()); + } + + /** + * post方法使用MethodArgumentNotValidException接收 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseBody + public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error(e.getMessage(),e.getBindingResult().getFieldError().getDefaultMessage()); + return Result.error(e.getBindingResult().getFieldError().getDefaultMessage()); + } + ```` + + - 增加手动校验方法 + [ValidUtil.validate()](/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ValidUtil.java) + 使用情景,当想要校验一个对象的参数是否符合规则时,随时随地都可以调用: + + ````text + public Result add(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String selectedRoles = jsonObject.getString("selectedroles"); + String selectedDeparts = jsonObject.getString("selecteddeparts"); + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + ValidUtil.validate(user); + ```` + +8. 修改重复校验工具的校验规则[DuplicateCheckController](/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java) + - 增加了一个混淆表sys_confusion 参数有 + - |表明|字段名|混淆码| + |----|----|----| + |table_name|field_name|confusion_code| + - 根据传入的混淆码获取表名和字段名,然后重复校验 diff --git a/db/Dockerfile b/db/Dockerfile new file mode 100644 index 00000000..2b8f3076 --- /dev/null +++ b/db/Dockerfile @@ -0,0 +1,13 @@ +FROM mysql:8.0.19 + +MAINTAINER jeecgos@163.com + +ENV TZ=Asia/Shanghai + +RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +COPY ./tables_nacos.sql /docker-entrypoint-initdb.d + +COPY jeroboot-mysql-5.7.sql /docker-entrypoint-initdb.d + +COPY ./tables_xxl_job.sql /docker-entrypoint-initdb.d \ No newline at end of file diff --git a/db/jeroboot-mysql-5.7.sql b/db/jeroboot-mysql-5.7.sql new file mode 100644 index 00000000..70d2ac7e --- /dev/null +++ b/db/jeroboot-mysql-5.7.sql @@ -0,0 +1,1387 @@ +/* + Navicat Premium Data Transfer + + Source Server : local_mysql + Source Server Type : MySQL + Source Server Version : 50721 + Source Host : localhost:3306 + Source Schema : jero-boot2 + + Target Server Type : MySQL + Target Server Version : 50721 + File Encoding : 65001 + + Date: 23/04/2021 13:04:27 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for oss_file +-- ---------------------------- +DROP TABLE IF EXISTS `oss_file`; +CREATE TABLE `oss_file` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `file_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件名称', + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '文件地址', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'Oss File 文件上传表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_blob_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_blob_triggers`; +CREATE TABLE `qrtz_blob_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `BLOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz以Blob 类型存储的触发器' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_calendars +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_calendars`; +CREATE TABLE `qrtz_calendars` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `CALENDAR_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `CALENDAR` blob NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `CALENDAR_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存放日历信息, quartz可配置一个日历来指定一个时间范围。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_cron_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_cron_triggers`; +CREATE TABLE `qrtz_cron_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `CRON_EXPRESSION` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TIME_ZONE_ID` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存放cron类型的触发器。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of qrtz_cron_triggers +-- ---------------------------- +INSERT INTO `qrtz_cron_triggers` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); +INSERT INTO `qrtz_cron_triggers` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); + +-- ---------------------------- +-- Table structure for qrtz_fired_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_fired_triggers`; +CREATE TABLE `qrtz_fired_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ENTRY_ID` varchar(95) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `INSTANCE_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `FIRED_TIME` bigint(13) NOT NULL, + `SCHED_TIME` bigint(13) NOT NULL, + `PRIORITY` int(11) NOT NULL, + `STATE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `ENTRY_ID`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存放已触发的触发器。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_job_details +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_job_details`; +CREATE TABLE `qrtz_job_details` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `JOB_CLASS_NAME` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `IS_DURABLE` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `IS_NONCONCURRENT` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `IS_UPDATE_DATA` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `REQUESTS_RECOVERY` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存放一个jobDetail信息。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of qrtz_job_details +-- ---------------------------- +INSERT INTO `qrtz_job_details` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', NULL, 'com.jero.modules.quartz.job.SampleJob', '0', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800); +INSERT INTO `qrtz_job_details` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', NULL, 'com.jero.modules.quartz.job.SampleParamJob', '0', '0', '0', '0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D6574657274000573636F74747800); + +-- ---------------------------- +-- Table structure for qrtz_locks +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_locks`; +CREATE TABLE `qrtz_locks` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `LOCK_NAME` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `LOCK_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存储程序的悲观锁的信息(假如使用了悲观锁)。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of qrtz_locks +-- ---------------------------- +INSERT INTO `qrtz_locks` VALUES ('MyScheduler', 'STATE_ACCESS'); +INSERT INTO `qrtz_locks` VALUES ('MyScheduler', 'TRIGGER_ACCESS'); +INSERT INTO `qrtz_locks` VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); + +-- ---------------------------- +-- Table structure for qrtz_paused_trigger_grps +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`; +CREATE TABLE `qrtz_paused_trigger_grps` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_GROUP`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存放暂停掉的触发器。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_scheduler_state +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_scheduler_state`; +CREATE TABLE `qrtz_scheduler_state` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `INSTANCE_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `LAST_CHECKIN_TIME` bigint(13) NOT NULL, + `CHECKIN_INTERVAL` bigint(13) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `INSTANCE_NAME`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz调度器状态。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of qrtz_scheduler_state +-- ---------------------------- +INSERT INTO `qrtz_scheduler_state` VALUES ('MyScheduler', 'MMMMMM1619153807188', 1619154265676, 10000); + +-- ---------------------------- +-- Table structure for qrtz_simple_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simple_triggers`; +CREATE TABLE `qrtz_simple_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `REPEAT_COUNT` bigint(7) NOT NULL, + `REPEAT_INTERVAL` bigint(12) NOT NULL, + `TIMES_TRIGGERED` bigint(10) NOT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz简单触发器的信息。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_simprop_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_simprop_triggers`; +CREATE TABLE `qrtz_simprop_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `STR_PROP_1` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `STR_PROP_2` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `STR_PROP_3` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `INT_PROP_1` int(11) NULL DEFAULT NULL, + `INT_PROP_2` int(11) NULL DEFAULT NULL, + `LONG_PROP_1` bigint(20) NULL DEFAULT NULL, + `LONG_PROP_2` bigint(20) NULL DEFAULT NULL, + `DEC_PROP_1` decimal(13, 4) NULL DEFAULT NULL, + `DEC_PROP_2` decimal(13, 4) NULL DEFAULT NULL, + `BOOL_PROP_1` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `BOOL_PROP_2` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`sched_name`, `trigger_name`, `trigger_group`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz存储CalendarIntervalTrigger和DailyTimeIntervalTrigger两种类型的触发器' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for qrtz_triggers +-- ---------------------------- +DROP TABLE IF EXISTS `qrtz_triggers`; +CREATE TABLE `qrtz_triggers` ( + `SCHED_NAME` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `JOB_GROUP` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `DESCRIPTION` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `NEXT_FIRE_TIME` bigint(13) NULL DEFAULT NULL, + `PREV_FIRE_TIME` bigint(13) NULL DEFAULT NULL, + `PRIORITY` int(11) NULL DEFAULT NULL, + `TRIGGER_STATE` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `TRIGGER_TYPE` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `START_TIME` bigint(13) NOT NULL, + `END_TIME` bigint(13) NULL DEFAULT NULL, + `CALENDAR_NAME` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `MISFIRE_INSTR` smallint(2) NULL DEFAULT NULL, + `JOB_DATA` blob NULL, + PRIMARY KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) USING BTREE, + INDEX `SCHED_NAME`(`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) USING BTREE, + CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) ON DELETE RESTRICT ON UPDATE RESTRICT +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'quartz触发器的基本信息。' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of qrtz_triggers +-- ---------------------------- +INSERT INTO `qrtz_triggers` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', NULL, 1588405730000, 1588405729000, 5, 'PAUSED', 'CRON', 1588405237000, 0, NULL, 0, ''); +INSERT INTO `qrtz_triggers` VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', NULL, 1588405236000, 1588405235000, 5, 'PAUSED', 'CRON', 1588405221000, 0, NULL, 0, ''); + +-- ---------------------------- +-- Table structure for sys_announcement +-- ---------------------------- +DROP TABLE IF EXISTS `sys_announcement`; +CREATE TABLE `sys_announcement` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `titile` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '标题', + `msg_content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '内容', + `start_time` datetime(0) NULL DEFAULT NULL COMMENT '开始时间', + `end_time` datetime(0) NULL DEFAULT NULL COMMENT '结束时间', + `sender` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发布人', + `priority` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '优先级(L低,M中,H高)', + `msg_category` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '2' COMMENT '消息类型1:通知公告2:系统消息', + `msg_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '通告对象类型(USER:指定用户,ALL:全体用户)', + `send_status` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发布状态(0未发布,1已发布,2已撤销)', + `send_time` datetime(0) NULL DEFAULT NULL COMMENT '发布时间', + `cancel_time` datetime(0) NULL DEFAULT NULL COMMENT '撤销时间', + `del_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除状态(0,正常,1已删除)', + `bus_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '业务类型(email:邮件 bpm:流程)', + `bus_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '业务id', + `open_type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '打开方式(组件:component 路由:url)', + `open_page` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件/路由 地址', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `user_ids` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '指定用户', + `msg_abstract` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '摘要', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统通告表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_announcement_send +-- ---------------------------- +DROP TABLE IF EXISTS `sys_announcement_send`; +CREATE TABLE `sys_announcement_send` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `annt_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '通告ID', + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户id', + `read_flag` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '阅读状态(0未读,1已读)', + `read_time` datetime(0) NULL DEFAULT NULL COMMENT '阅读时间', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间' +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户通告阅读标记表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_category +-- ---------------------------- +DROP TABLE IF EXISTS `sys_category`; +CREATE TABLE `sys_category` ( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `pid` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父级节点', + `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型名称', + `code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型编码', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `sys_org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门', + `has_child` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否有子节点', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `index_code`(`code`) USING BTREE, + INDEX `idx_sc_code`(`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '分类字典' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_check_rule +-- ---------------------------- +DROP TABLE IF EXISTS `sys_check_rule`; +CREATE TABLE `sys_check_rule` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `rule_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则名称', + `rule_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则Code', + `rule_json` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则JSON', + `rule_description` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则描述', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uni_sys_check_rule_code`(`rule_code`) USING BTREE, + UNIQUE INDEX `uk_scr_rule_code`(`rule_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '编码校验规则表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_check_rule +-- ---------------------------- +INSERT INTO `sys_check_rule` VALUES ('1224980593992388610', '通用编码规则-Demo', 'common', '[{\"digits\":\"1\",\"pattern\":\"^[a-z|A-Z]$\",\"message\":\"第一位只能是字母\"},{\"digits\":\"*\",\"pattern\":\"^[0-9|a-z|A-Z|_]{0,}$\",\"message\":\"只能填写数字、大小写字母、下划线\"},{\"digits\":\"*\",\"pattern\":\"^.{3,}$\",\"message\":\"最少输入3位数\"},{\"digits\":\"*\",\"pattern\":\"^.{3,12}$\",\"message\":\"最多输入12位数\"}]', '规则:1、首位只能是字母;2、只能填写数字、大小写字母、下划线;3、最少3位数,最多12位数。', 'admin', '2021-03-16 16:34:09', 'admin', '2020-02-05 16:58:27'); + +-- ---------------------------- +-- Table structure for sys_data_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_data_log`; +CREATE TABLE `sys_data_log` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `data_table` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '表名', + `data_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据ID', + `data_content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '数据内容', + `data_version` int(11) NULL DEFAULT NULL COMMENT '版本号', + PRIMARY KEY (`id`) USING BTREE, + INDEX `sindex`(`data_table`, `data_id`) USING BTREE, + INDEX `idx_sdl_data_table_id`(`data_table`, `data_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数据日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_data_log +-- ---------------------------- +INSERT INTO `sys_data_log` VALUES ('402880f05ab0d198015ab12274bf0006', 'admin', '2017-03-09 11:35:09', NULL, NULL, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{\"mobilePhone\":\"\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Jun 23, 2016 12:00:00 PM\",\"sex\":\"1\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"9001\",\"status\":\"1\",\"content\":\"111\",\"id\":\"4028ef81550c1a7901550c1cd6e70001\"}', 3); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab700bead0009', 'admin', '2017-03-10 14:56:03', NULL, NULL, 'jero_demo', '402880f05ab6d12b015ab700be8d0008', '{\"mobilePhone\":\"\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Mar 10, 2017 2:56:03 PM\",\"sex\":\"0\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"111\",\"status\":\"0\",\"id\":\"402880f05ab6d12b015ab700be8d0008\"}', 1); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab705a23f000d', 'admin', '2017-03-10 15:01:24', NULL, NULL, 'jero_demo', '402880f05ab6d12b015ab705a233000c', '{\"mobilePhone\":\"\",\"officePhone\":\"11\",\"email\":\"\",\"createDate\":\"Mar 10, 2017 3:01:24 PM\",\"sex\":\"0\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"11\",\"status\":\"0\",\"id\":\"402880f05ab6d12b015ab705a233000c\"}', 1); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab712a6420013', 'admin', '2017-03-10 15:15:37', NULL, NULL, 'jero_demo', '402880f05ab6d12b015ab712a6360012', '{\"mobilePhone\":\"\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Mar 10, 2017 3:15:37 PM\",\"sex\":\"0\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"小王\",\"status\":\"0\",\"id\":\"402880f05ab6d12b015ab712a6360012\"}', 1); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab712d0510015', 'admin', '2017-03-10 15:15:47', NULL, NULL, 'jero_demo', '402880f05ab6d12b015ab712a6360012', '{\"mobilePhone\":\"18611788525\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Mar 10, 2017 3:15:37 AM\",\"sex\":\"0\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"小王\",\"status\":\"0\",\"id\":\"402880f05ab6d12b015ab712a6360012\"}', 2); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab71308240018', 'admin', '2017-03-10 15:16:02', NULL, NULL, 'jero_demo', '8a8ab0b246dc81120146dc81860f016f', '{\"mobilePhone\":\"13111111111\",\"officePhone\":\"66666666\",\"email\":\"demo@jero.com\",\"age\":12,\"salary\":10.00,\"birthday\":\"Feb 14, 2014 12:00:00 AM\",\"sex\":\"1\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"小明\",\"status\":\"\",\"content\":\"\",\"id\":\"8a8ab0b246dc81120146dc81860f016f\"}', 1); +INSERT INTO `sys_data_log` VALUES ('402880f05ab6d12b015ab72806c3001b', 'admin', '2017-03-10 15:38:58', NULL, NULL, 'jero_demo', '8a8ab0b246dc81120146dc81860f016f', '{\"mobilePhone\":\"18611788888\",\"officePhone\":\"66666666\",\"email\":\"demo@jero.com\",\"age\":12,\"salary\":10.00,\"birthday\":\"Feb 14, 2014 12:00:00 AM\",\"sex\":\"1\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"小明\",\"status\":\"\",\"content\":\"\",\"id\":\"8a8ab0b246dc81120146dc81860f016f\"}', 2); +INSERT INTO `sys_data_log` VALUES ('4028ef815318148a0153181567690001', 'admin', '2016-02-25 18:59:29', NULL, NULL, 'jero_demo', '4028ef815318148a0153181566270000', '{\"mobilePhone\":\"13423423423\",\"officePhone\":\"1\",\"email\":\"\",\"age\":1,\"salary\":1,\"birthday\":\"Feb 25, 2016 12:00:00 AM\",\"createDate\":\"Feb 25, 2016 6:59:24 PM\",\"depId\":\"402880e447e9a9570147e9b6a3be0005\",\"userName\":\"1\",\"status\":\"0\",\"id\":\"4028ef815318148a0153181566270000\"}', 1); +INSERT INTO `sys_data_log` VALUES ('4028ef815318148a01531815ec5c0003', 'admin', '2016-02-25 19:00:03', NULL, NULL, 'jero_demo', '4028ef815318148a0153181566270000', '{\"mobilePhone\":\"13426498659\",\"officePhone\":\"1\",\"email\":\"\",\"age\":1,\"salary\":1.00,\"birthday\":\"Feb 25, 2016 12:00:00 AM\",\"createDate\":\"Feb 25, 2016 6:59:24 AM\",\"depId\":\"402880e447e9a9570147e9b6a3be0005\",\"userName\":\"1\",\"status\":\"0\",\"id\":\"4028ef815318148a0153181566270000\"}', 2); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c0502e6b0003', 'admin', '2016-03-29 10:59:53', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{\"mobilePhone\":\"18455477548\",\"officePhone\":\"123\",\"email\":\"\",\"createDate\":\"Mar 29, 2016 10:59:53 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"123\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0502d420002\"}', 1); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c0509aa40006', 'admin', '2016-03-29 11:00:21', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{\"mobilePhone\":\"13565486458\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Mar 29, 2016 11:00:21 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"22\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0509a3e0005\"}', 1); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c051c4a70008', 'admin', '2016-03-29 11:01:37', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{\"mobilePhone\":\"13565486458\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Mar 29, 2016 11:00:21 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"22\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0509a3e0005\"}', 2); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c051d4b5000a', 'admin', '2016-03-29 11:01:41', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{\"mobilePhone\":\"13565486458\",\"officePhone\":\"123\",\"email\":\"\",\"createDate\":\"Mar 29, 2016 10:59:53 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"123\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0502d420002\"}', 2); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c07033d8000d', 'admin', '2016-03-29 11:34:52', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{\"mobilePhone\":\"13565486458\",\"officePhone\":\"123\",\"email\":\"\",\"age\":23,\"createDate\":\"Mar 29, 2016 10:59:53 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"123\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0502d420002\"}', 3); +INSERT INTO `sys_data_log` VALUES ('4028ef8153c028db0153c070492e000f', 'admin', '2016-03-29 11:34:57', NULL, NULL, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{\"mobilePhone\":\"13565486458\",\"officePhone\":\"\",\"email\":\"\",\"age\":22,\"createDate\":\"Mar 29, 2016 11:00:21 AM\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"22\",\"status\":\"0\",\"id\":\"4028ef8153c028db0153c0509a3e0005\"}', 3); +INSERT INTO `sys_data_log` VALUES ('4028ef81550c1a7901550c1cd7850002', 'admin', '2016-06-01 21:17:44', NULL, NULL, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{\"mobilePhone\":\"\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Jun 1, 2016 9:17:44 PM\",\"sex\":\"1\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"121221\",\"status\":\"0\",\"id\":\"4028ef81550c1a7901550c1cd6e70001\"}', 1); +INSERT INTO `sys_data_log` VALUES ('4028ef81568c31ec01568c3307080004', 'admin', '2016-08-15 11:16:09', NULL, NULL, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{\"mobilePhone\":\"\",\"officePhone\":\"\",\"email\":\"\",\"createDate\":\"Jun 23, 2016 12:00:00 PM\",\"sex\":\"1\",\"depId\":\"402880e447e99cf10147e9a03b320003\",\"userName\":\"9001\",\"status\":\"1\",\"content\":\"111\",\"id\":\"4028ef81550c1a7901550c1cd6e70001\"}', 2); + +-- ---------------------------- +-- Table structure for sys_data_source +-- ---------------------------- +DROP TABLE IF EXISTS `sys_data_source`; +CREATE TABLE `sys_data_source` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据源编码', + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据源名称', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `db_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据库类型', + `db_driver` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '驱动类', + `db_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据源地址', + `db_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据库名称', + `db_username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', + `db_password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `sys_org_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属部门', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `sys_data_source_code_uni`(`code`) USING BTREE, + UNIQUE INDEX `uk_sdc_rule_code`(`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '多数据源管理表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_data_source +-- ---------------------------- +INSERT INTO `sys_data_source` VALUES ('1209779538310004737', 'local_mysql', 'MySQL5.7-Demo', '本地数据库MySQL5.7', '4', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai', 'jero-boot', 'jero-boot', 'c0e5dbdaede24c84091fb7dc0db47ccb', 'admin', '2019-12-25 18:14:53', 'admin', '2021-03-16 16:44:03', 'A01'); + +-- ---------------------------- +-- Table structure for sys_depart +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart`; +CREATE TABLE `sys_depart` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ID', + `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父机构ID', + `depart_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构/部门名称', + `depart_name_en` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '英文名', + `depart_name_abbr` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '缩写', + `depart_order` int(11) NULL DEFAULT 0 COMMENT '排序', + `description` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `org_category` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '机构类别 1公司,2组织机构,2岗位', + `org_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构类型 1一级部门 2子部门', + `org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '机构编码', + `mobile` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', + `fax` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '传真', + `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地址', + `memo` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态(1启用,0不启用)', + `del_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除状态(0,正常,1已删除)', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_depart_org_code`(`org_code`) USING BTREE, + INDEX `index_depart_parent_id`(`parent_id`) USING BTREE, + INDEX `index_depart_depart_order`(`depart_order`) USING BTREE, + INDEX `index_depart_org_code`(`org_code`) USING BTREE, + INDEX `idx_sd_parent_id`(`parent_id`) USING BTREE, + INDEX `idx_sd_depart_order`(`depart_order`) USING BTREE, + INDEX `idx_sd_org_code`(`org_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '组织机构表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_depart +-- ---------------------------- +INSERT INTO `sys_depart` VALUES ('c6d7cb4deeac411cb3384b1b31278596', '', '公司总部', NULL, NULL, 0, NULL, '1', '1', 'A01', NULL, NULL, NULL, NULL, NULL, '0', 'admin', '2019-02-11 14:21:51', 'admin', '2021-03-16 14:19:08'); + +-- ---------------------------- +-- Table structure for sys_depart_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart_permission`; +CREATE TABLE `sys_depart_permission` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `depart_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门id', + `permission_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限id', + `data_rule_ids` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据规则id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_depart_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart_role`; +CREATE TABLE `sys_depart_role` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `depart_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门id', + `role_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门角色名称', + `role_code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门角色编码', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_depart_role_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart_role_permission`; +CREATE TABLE `sys_depart_role_permission` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `depart_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门id', + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id', + `permission_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限id', + `data_rule_ids` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据权限ids', + `operate_date` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', + `operate_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作ip', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_group_role_per_id`(`role_id`, `permission_id`) USING BTREE, + INDEX `index_group_role_id`(`role_id`) USING BTREE, + INDEX `index_group_per_id`(`permission_id`) USING BTREE, + INDEX `idx_sdrp_role_per_id`(`role_id`, `permission_id`) USING BTREE, + INDEX `idx_sdrp_role_id`(`role_id`) USING BTREE, + INDEX `idx_sdrp_per_id`(`permission_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门角色权限表' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Table structure for sys_depart_role_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_depart_role_user`; +CREATE TABLE `sys_depart_role_user` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户id', + `drole_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '部门角色用户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_dict +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict`; +CREATE TABLE `sys_dict` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `dict_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典名称', + `dict_code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典编码', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `del_flag` int(1) NULL DEFAULT NULL COMMENT '删除状态', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `type` int(1) UNSIGNED ZEROFILL NULL DEFAULT 0 COMMENT '字典类型0为string,1为number', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `indextable_dict_code`(`dict_code`) USING BTREE, + UNIQUE INDEX `uk_sd_dict_code`(`dict_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_dict +-- ---------------------------- +INSERT INTO `sys_dict` VALUES ('0b5d19e1fce4b2e6647e6b4a17760c14', '通告类型', 'msg_category', '消息类型1:通知公告2:系统消息', 0, 'admin', '2019-04-22 18:01:35', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('1174511106530525185', '机构类型', 'org_category', '机构类型 1公司,2部门 3岗位', 0, 'admin', '2019-09-19 10:30:43', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('1209733563293962241', '数据库类型', 'database_type', '', 0, 'admin', '2019-12-25 15:12:12', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('1232913193820581889', 'Online表单业务分类', 'ol_form_biz_type', '', 0, 'admin', '2020-02-27 14:19:46', 'admin', '2020-02-27 14:20:23', 0); +INSERT INTO `sys_dict` VALUES ('1250687930947620866', '定时任务状态', 'quartz_status', '', 0, 'admin', '2020-04-16 15:30:14', '', NULL, NULL); +INSERT INTO `sys_dict` VALUES ('1280401766745718786', '租户状态', 'tenant_status', '租户状态', 0, 'admin', '2020-07-07 15:22:25', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('236e8a4baff0db8c62c00dd95632834f', '同步工作流引擎', 'activiti_sync', '同步工作流引擎', 0, 'admin', '2019-05-15 15:27:33', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('2e02df51611a4b9632828ab7e5338f00', '权限策略', 'perms_type', '权限策略', 0, 'admin', '2019-04-26 18:26:55', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('2f0320997ade5dd147c90130f7218c3e', '推送类别', 'msg_type', '', 0, 'admin', '2019-03-17 21:21:32', 'admin', '2019-03-26 19:57:45', 0); +INSERT INTO `sys_dict` VALUES ('3486f32803bb953e7155dab3513dc68b', '删除状态', 'del_flag', NULL, 0, 'admin', '2019-01-18 21:46:26', 'admin', '2019-03-30 11:17:11', 0); +INSERT INTO `sys_dict` VALUES ('3d9a351be3436fbefb1307d4cfb49bf2', '性别', 'sex', NULL, 0, NULL, '2019-01-04 14:56:32', 'admin', '2019-03-30 11:28:27', 1); +INSERT INTO `sys_dict` VALUES ('4274efc2292239b6f000b153f50823ff', '全局权限策略', 'global_perms_type', '全局权限策略', 0, 'admin', '2019-05-10 17:54:05', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('4c753b5293304e7a445fd2741b46529d', '字典状态', 'dict_item_status', NULL, 0, 'admin', '2020-06-18 23:18:42', 'admin', '2019-03-30 19:33:52', 1); +INSERT INTO `sys_dict` VALUES ('4d7fec1a7799a436d26d02325eff295e', '优先级', 'priority', '优先级', 0, 'admin', '2019-03-16 17:03:34', 'admin', '2019-04-16 17:39:23', 0); +INSERT INTO `sys_dict` VALUES ('4e4602b3e3686f0911384e188dc7efb4', '条件规则', 'rule_conditions', '', 0, 'admin', '2019-04-01 10:15:03', 'admin', '2019-04-01 10:30:47', 0); +INSERT INTO `sys_dict` VALUES ('4f69be5f507accea8d5df5f11346181a', '发送消息类型', 'msgType', NULL, 0, 'admin', '2019-04-11 14:27:09', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('68168534ff5065a152bfab275c2136f8', '有效无效状态', 'valid_status', '有效无效状态', 0, 'admin', '2020-09-26 19:21:14', 'admin', '2019-04-26 19:21:23', 0); +INSERT INTO `sys_dict` VALUES ('72cce0989df68887546746d8f09811aa', 'Online表单类型', 'cgform_table_type', '', 0, 'admin', '2019-01-27 10:13:02', 'admin', '2019-03-30 11:37:36', 0); +INSERT INTO `sys_dict` VALUES ('78bda155fe380b1b3f175f1e88c284c6', '流程状态', 'bpm_status', '流程状态', 0, 'admin', '2019-05-09 16:31:52', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('83bfb33147013cc81640d5fd9eda030c', '日志类型', 'log_type', NULL, 0, 'admin', '2019-03-18 23:22:19', NULL, NULL, 1); +INSERT INTO `sys_dict` VALUES ('845da5006c97754728bf48b6a10f79cc', '状态', 'status', NULL, 0, 'admin', '2019-03-18 21:45:25', 'admin', '2019-03-18 21:58:25', 0); +INSERT INTO `sys_dict` VALUES ('880a895c98afeca9d9ac39f29e67c13e', '操作类型', 'operate_type', '操作类型', 0, 'admin', '2019-07-22 10:54:29', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('8dfe32e2d29ea9430a988b3b558bf233', '发布状态', 'send_status', '发布状态', 0, 'admin', '2019-04-16 17:40:42', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('a7adbcd86c37f7dbc9b66945c82ef9e6', '1是0否', 'yn', '', 0, 'admin', '2019-05-22 19:29:29', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('a9d9942bd0eccb6e89de92d130ec4c4a', '消息发送状态', 'msgSendStatus', NULL, 0, 'admin', '2019-04-12 18:18:17', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('ac2f7c0c5c5775fcea7e2387bcb22f01', '菜单类型', 'menu_type', NULL, 0, 'admin', '2020-12-18 23:24:32', 'admin', '2019-04-01 15:27:06', 1); +INSERT INTO `sys_dict` VALUES ('c36169beb12de8a71c8683ee7c28a503', '部门状态', 'depart_status', NULL, 0, 'admin', '2019-03-18 21:59:51', NULL, NULL, 0); +INSERT INTO `sys_dict` VALUES ('fc6cd58fde2e8481db10d3a1e68ce70c', '用户状态', 'user_status', NULL, 0, 'admin', '2019-03-18 21:57:25', 'admin', '2019-03-18 23:11:58', 1); + +-- ---------------------------- +-- Table structure for sys_dict_item +-- ---------------------------- +DROP TABLE IF EXISTS `sys_dict_item`; +CREATE TABLE `sys_dict_item` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `dict_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典id', + `item_text` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典项文本', + `item_value` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '字典项值', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `sort_order` int(10) NULL DEFAULT NULL COMMENT '排序', + `status` int(11) NULL DEFAULT NULL COMMENT '状态(1启用 0不启用)', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_time` datetime(0) NULL DEFAULT NULL, + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_time` datetime(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_table_dict_id`(`dict_id`) USING BTREE, + INDEX `index_table_sort_order`(`sort_order`) USING BTREE, + INDEX `index_table_dict_status`(`status`) USING BTREE, + INDEX `idx_sdi_role_dict_id`(`dict_id`) USING BTREE, + INDEX `idx_sdi_role_sort_order`(`sort_order`) USING BTREE, + INDEX `idx_sdi_status`(`status`) USING BTREE, + INDEX `idx_sdi_dict_val`(`dict_id`, `item_value`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '字典内容表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_dict_item +-- ---------------------------- +INSERT INTO `sys_dict_item` VALUES ('0072d115e07c875d76c9b022e2179128', '4d7fec1a7799a436d26d02325eff295e', '低', 'L', '低', 3, 1, 'admin', '2019-04-16 17:04:59', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('05a2e732ce7b00aa52141ecc3e330b4e', '3486f32803bb953e7155dab3513dc68b', '已删除', '1', NULL, NULL, 1, 'admin', '2025-10-18 21:46:56', 'admin', '2019-03-28 22:23:20'); +INSERT INTO `sys_dict_item` VALUES ('0c9532916f5cd722017b46bc4d953e41', '2f0320997ade5dd147c90130f7218c3e', '指定用户', 'USER', NULL, NULL, 1, 'admin', '2019-03-17 21:22:19', 'admin', '2019-03-17 21:22:28'); +INSERT INTO `sys_dict_item` VALUES ('0ca4beba9efc4f9dd54af0911a946d5c', '72cce0989df68887546746d8f09811aa', '附表', '3', NULL, 3, 1, 'admin', '2019-03-27 10:13:43', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1030a2652608f5eac3b49d70458b8532', '2e02df51611a4b9632828ab7e5338f00', '禁用', '2', '禁用', 2, 1, 'admin', '2021-03-26 18:27:28', 'admin', '2019-04-26 18:39:11'); +INSERT INTO `sys_dict_item` VALUES ('1174509082208395266', '1174511106530525185', '岗位', '3', '岗位', 1, 1, 'admin', '2019-09-19 10:31:16', '', NULL); +INSERT INTO `sys_dict_item` VALUES ('1174511197735665665', '1174511106530525185', '公司', '1', '公司', 1, 1, 'admin', '2019-09-19 10:31:05', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1174511244036587521', '1174511106530525185', '部门', '2', '部门', 1, 1, 'admin', '2019-09-19 10:31:16', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1199607547704647681', '4f69be5f507accea8d5df5f11346181a', '系统', '4', '', 1, 1, 'admin', '2019-11-27 16:35:02', 'admin', '2019-11-27 19:37:46'); +INSERT INTO `sys_dict_item` VALUES ('1209733775114702850', '1209733563293962241', 'MySQL5.5', '1', '', 1, 1, 'admin', '2019-12-25 15:13:02', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1209733839933476865', '1209733563293962241', 'Oracle', '2', '', 3, 1, 'admin', '2019-12-25 15:13:18', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1209733903020003330', '1209733563293962241', 'SQLServer', '3', '', 4, 1, 'admin', '2019-12-25 15:13:33', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1232913424813486081', '1232913193820581889', '官方示例', 'demo', '', 1, 1, 'admin', '2020-02-27 14:20:42', 'admin', '2020-02-27 14:21:37'); +INSERT INTO `sys_dict_item` VALUES ('1232913493717512194', '1232913193820581889', '流程表单', 'bpm', '', 2, 1, 'admin', '2020-02-27 14:20:58', 'admin', '2020-02-27 14:22:20'); +INSERT INTO `sys_dict_item` VALUES ('1232913605382467585', '1232913193820581889', '测试表单', 'temp', '', 4, 1, 'admin', '2020-02-27 14:21:25', 'admin', '2020-02-27 14:22:16'); +INSERT INTO `sys_dict_item` VALUES ('1232914232372195330', '1232913193820581889', '导入表单', 'bdfl_include', '', 5, 1, 'admin', '2020-02-27 14:23:54', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1234371726545010689', '4e4602b3e3686f0911384e188dc7efb4', '左模糊', 'LEFT_LIKE', '左模糊', 7, 1, 'admin', '2020-03-02 14:55:27', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1234371809495760898', '4e4602b3e3686f0911384e188dc7efb4', '右模糊', 'RIGHT_LIKE', '右模糊', 7, 1, 'admin', '2020-03-02 14:55:47', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1250688147579228161', '1250687930947620866', '正常', '0', '', 1, 1, 'admin', '2020-04-16 15:31:05', '', NULL); +INSERT INTO `sys_dict_item` VALUES ('1250688201064992770', '1250687930947620866', '停止', '-1', '', 1, 1, 'admin', '2020-04-16 15:31:18', '', NULL); +INSERT INTO `sys_dict_item` VALUES ('1280401815068295170', '1280401766745718786', '正常', '1', '', 1, 1, 'admin', '2020-07-07 15:22:36', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1280401847607705602', '1280401766745718786', '冻结', '0', '', 1, 1, 'admin', '2020-07-07 15:22:44', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('1334440962954936321', '1209733563293962241', 'MYSQL5.7', '4', NULL, 1, 1, 'admin', '2020-12-03 18:16:02', 'admin', '2020-12-03 18:16:02'); +INSERT INTO `sys_dict_item` VALUES ('222705e11ef0264d4214affff1fb4ff9', '4f69be5f507accea8d5df5f11346181a', '短信', '1', '', 1, 1, 'admin', '2023-02-28 10:50:36', 'admin', '2019-04-28 10:58:11'); +INSERT INTO `sys_dict_item` VALUES ('23a5bb76004ed0e39414e928c4cde155', '4e4602b3e3686f0911384e188dc7efb4', '不等于', '!=', '不等于', 3, 1, 'admin', '2019-04-01 16:46:15', 'admin', '2019-04-01 17:48:40'); +INSERT INTO `sys_dict_item` VALUES ('25847e9cb661a7c711f9998452dc09e6', '4e4602b3e3686f0911384e188dc7efb4', '小于等于', '<=', '小于等于', 6, 1, 'admin', '2019-04-01 16:44:34', 'admin', '2019-04-01 17:49:10'); +INSERT INTO `sys_dict_item` VALUES ('2d51376643f220afdeb6d216a8ac2c01', '68168534ff5065a152bfab275c2136f8', '有效', '1', '有效', 2, 1, 'admin', '2019-04-26 19:22:01', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('308c8aadf0c37ecdde188b97ca9833f5', '8dfe32e2d29ea9430a988b3b558bf233', '已发布', '1', '已发布', 2, 1, 'admin', '2019-04-16 17:41:24', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('333e6b2196e01ef9a5f76d74e86a6e33', '8dfe32e2d29ea9430a988b3b558bf233', '未发布', '0', '未发布', 1, 1, 'admin', '2019-04-16 17:41:12', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('33bc9d9f753cf7dc40e70461e50fdc54', 'a9d9942bd0eccb6e89de92d130ec4c4a', '发送失败', '2', NULL, 3, 1, 'admin', '2019-04-12 18:20:02', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('3fbc03d6c994ae06d083751248037c0e', '78bda155fe380b1b3f175f1e88c284c6', '已完成', '3', '已完成', 3, 1, 'admin', '2019-05-09 16:33:25', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('41d7aaa40c9b61756ffb1f28da5ead8e', '0b5d19e1fce4b2e6647e6b4a17760c14', '通知公告', '1', NULL, 1, 1, 'admin', '2019-04-22 18:01:57', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('41fa1e9571505d643aea87aeb83d4d76', '4e4602b3e3686f0911384e188dc7efb4', '等于', '=', '等于', 4, 1, 'admin', '2019-04-01 16:45:24', 'admin', '2019-04-01 17:49:00'); +INSERT INTO `sys_dict_item` VALUES ('43d2295b8610adce9510ff196a49c6e9', '845da5006c97754728bf48b6a10f79cc', '正常', '1', NULL, NULL, 1, 'admin', '2019-03-18 21:45:51', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('4f05fb5376f4c61502c5105f52e4dd2b', '83bfb33147013cc81640d5fd9eda030c', '操作日志', '2', NULL, NULL, 1, 'admin', '2019-03-18 23:22:49', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('51222413e5906cdaf160bb5c86fb827c', 'a7adbcd86c37f7dbc9b66945c82ef9e6', '是', '1', '', 1, 1, 'admin', '2019-05-22 19:29:45', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('538fca35afe004972c5f3947c039e766', '2e02df51611a4b9632828ab7e5338f00', '显示', '1', '显示', 1, 1, 'admin', '2025-03-26 18:27:13', 'admin', '2019-04-26 18:39:07'); +INSERT INTO `sys_dict_item` VALUES ('5584c21993bde231bbde2b966f2633ac', '4e4602b3e3686f0911384e188dc7efb4', '自定义SQL表达式', 'USE_SQL_RULES', '自定义SQL表达式', 9, 1, 'admin', '2019-04-01 10:45:24', 'admin', '2019-04-01 17:49:27'); +INSERT INTO `sys_dict_item` VALUES ('58b73b344305c99b9d8db0fc056bbc0a', '72cce0989df68887546746d8f09811aa', '主表', '2', NULL, 2, 1, 'admin', '2019-03-27 10:13:36', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('5b65a88f076b32e8e69d19bbaadb52d5', '2f0320997ade5dd147c90130f7218c3e', '全体用户', 'ALL', NULL, NULL, 1, 'admin', '2020-10-17 21:22:43', 'admin', '2019-03-28 22:17:09'); +INSERT INTO `sys_dict_item` VALUES ('5d833f69296f691843ccdd0c91212b6b', '880a895c98afeca9d9ac39f29e67c13e', '修改', '3', '', 3, 1, 'admin', '2019-07-22 10:55:07', 'admin', '2019-07-22 10:55:41'); +INSERT INTO `sys_dict_item` VALUES ('5d84a8634c8fdfe96275385075b105c9', '3d9a351be3436fbefb1307d4cfb49bf2', '女', '2', NULL, 2, 1, NULL, '2019-01-04 14:56:56', NULL, '2019-01-04 17:38:12'); +INSERT INTO `sys_dict_item` VALUES ('66c952ae2c3701a993e7db58f3baf55e', '4e4602b3e3686f0911384e188dc7efb4', '大于', '>', '大于', 1, 1, 'admin', '2019-04-01 10:45:46', 'admin', '2019-04-01 17:48:29'); +INSERT INTO `sys_dict_item` VALUES ('69cacf64e244100289ddd4aa9fa3b915', 'a9d9942bd0eccb6e89de92d130ec4c4a', '未发送', '0', NULL, 1, 1, 'admin', '2019-04-12 18:19:23', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('6a7a9e1403a7943aba69e54ebeff9762', '4f69be5f507accea8d5df5f11346181a', '邮件', '2', '', 2, 1, 'admin', '2031-02-28 10:50:44', 'admin', '2019-04-28 10:59:03'); +INSERT INTO `sys_dict_item` VALUES ('6c682d78ddf1715baf79a1d52d2aa8c2', '72cce0989df68887546746d8f09811aa', '单表', '1', NULL, 1, 1, 'admin', '2019-03-27 10:13:29', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('6d404fd2d82311fbc87722cd302a28bc', '4e4602b3e3686f0911384e188dc7efb4', '模糊', 'LIKE', '模糊', 7, 1, 'admin', '2019-04-01 16:46:02', 'admin', '2019-04-01 17:49:20'); +INSERT INTO `sys_dict_item` VALUES ('6d4e26e78e1a09699182e08516c49fc4', '4d7fec1a7799a436d26d02325eff295e', '高', 'H', '高', 1, 1, 'admin', '2019-04-16 17:04:24', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('75b260d7db45a39fc7f21badeabdb0ed', 'c36169beb12de8a71c8683ee7c28a503', '不启用', '0', NULL, NULL, 1, 'admin', '2019-03-18 23:29:41', 'admin', '2019-03-18 23:29:54'); +INSERT INTO `sys_dict_item` VALUES ('7688469db4a3eba61e6e35578dc7c2e5', 'c36169beb12de8a71c8683ee7c28a503', '启用', '1', NULL, NULL, 1, 'admin', '2019-03-18 23:29:28', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('78ea6cadac457967a4b1c4eb7aaa418c', 'fc6cd58fde2e8481db10d3a1e68ce70c', '正常', '1', NULL, NULL, 1, 'admin', '2019-03-18 23:30:28', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('7ccf7b80c70ee002eceb3116854b75cb', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '按钮权限', '2', NULL, NULL, 1, 'admin', '2019-03-18 23:25:40', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('81fb2bb0e838dc68b43f96cc309f8257', 'fc6cd58fde2e8481db10d3a1e68ce70c', '冻结', '2', NULL, NULL, 1, 'admin', '2019-03-18 23:30:37', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('83250269359855501ec4e9c0b7e21596', '4274efc2292239b6f000b153f50823ff', '可见/可访问(授权后可见/可访问)', '1', '', 1, 1, 'admin', '2019-05-10 17:54:51', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('84778d7e928bc843ad4756db1322301f', '4e4602b3e3686f0911384e188dc7efb4', '大于等于', '>=', '大于等于', 5, 1, 'admin', '2019-04-01 10:46:02', 'admin', '2019-04-01 17:49:05'); +INSERT INTO `sys_dict_item` VALUES ('84dfc178dd61b95a72900fcdd624c471', '78bda155fe380b1b3f175f1e88c284c6', '处理中', '2', '处理中', 2, 1, 'admin', '2019-05-09 16:33:01', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('86f19c7e0a73a0bae451021ac05b99dd', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '子菜单', '1', NULL, NULL, 1, 'admin', '2019-03-18 23:25:27', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('8bccb963e1cd9e8d42482c54cc609ca2', '4f69be5f507accea8d5df5f11346181a', '微信', '3', NULL, 3, 1, 'admin', '2021-05-11 14:29:12', 'admin', '2019-04-11 14:29:31'); +INSERT INTO `sys_dict_item` VALUES ('8c618902365ca681ebbbe1e28f11a548', '4c753b5293304e7a445fd2741b46529d', '启用', '1', '', 0, 1, 'admin', '2020-07-18 23:19:27', 'admin', '2019-05-17 14:51:18'); +INSERT INTO `sys_dict_item` VALUES ('8cdf08045056671efd10677b8456c999', '4274efc2292239b6f000b153f50823ff', '可编辑(未授权时禁用)', '2', '', 2, 1, 'admin', '2019-05-10 17:55:38', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('8ff48e657a7c5090d4f2a59b37d1b878', '4d7fec1a7799a436d26d02325eff295e', '中', 'M', '中', 2, 1, 'admin', '2019-04-16 17:04:40', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('948923658baa330319e59b2213cda97c', '880a895c98afeca9d9ac39f29e67c13e', '添加', '2', '', 2, 1, 'admin', '2019-07-22 10:54:59', 'admin', '2019-07-22 10:55:36'); +INSERT INTO `sys_dict_item` VALUES ('9a96c4a4e4c5c9b4e4d0cbf6eb3243cc', '4c753b5293304e7a445fd2741b46529d', '不启用', '0', NULL, 1, 1, 'admin', '2019-03-18 23:19:53', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('a1e7d1ca507cff4a480c8caba7c1339e', '880a895c98afeca9d9ac39f29e67c13e', '导出', '6', '', 6, 1, 'admin', '2019-07-22 12:06:50', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('a2be752dd4ec980afaec1efd1fb589af', '8dfe32e2d29ea9430a988b3b558bf233', '已撤销', '2', '已撤销', 3, 1, 'admin', '2019-04-16 17:41:39', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('aa0d8a8042a18715a17f0a888d360aa4', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '一级菜单', '0', NULL, NULL, 1, 'admin', '2019-03-18 23:24:52', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('adcf2a1fe93bb99a84833043f475fe0b', '4e4602b3e3686f0911384e188dc7efb4', '包含', 'IN', '包含', 8, 1, 'admin', '2019-04-01 16:45:47', 'admin', '2019-04-01 17:49:24'); +INSERT INTO `sys_dict_item` VALUES ('b029a41a851465332ee4ee69dcf0a4c2', '0b5d19e1fce4b2e6647e6b4a17760c14', '系统消息', '2', NULL, 1, 1, 'admin', '2019-02-22 18:02:08', 'admin', '2019-04-22 18:02:13'); +INSERT INTO `sys_dict_item` VALUES ('b2a8b4bb2c8e66c2c4b1bb086337f393', '3486f32803bb953e7155dab3513dc68b', '正常', '0', NULL, NULL, 1, 'admin', '2022-10-18 21:46:48', 'admin', '2019-03-28 22:22:20'); +INSERT INTO `sys_dict_item` VALUES ('b5f3bd5f66bb9a83fecd89228c0d93d1', '68168534ff5065a152bfab275c2136f8', '无效', '0', '无效', 1, 1, 'admin', '2019-04-26 19:21:49', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('b9fbe2a3602d4a27b45c100ac5328484', '78bda155fe380b1b3f175f1e88c284c6', '待提交', '1', '待提交', 1, 1, 'admin', '2019-05-09 16:32:35', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('ba27737829c6e0e582e334832703d75e', '236e8a4baff0db8c62c00dd95632834f', '同步', '1', '同步', 1, 1, 'admin', '2019-05-15 15:28:15', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('bcec04526b04307e24a005d6dcd27fd6', '880a895c98afeca9d9ac39f29e67c13e', '导入', '5', '', 5, 1, 'admin', '2019-07-22 12:06:41', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('c53da022b9912e0aed691bbec3c78473', '880a895c98afeca9d9ac39f29e67c13e', '查询', '1', '', 1, 1, 'admin', '2019-07-22 10:54:51', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('c5700a71ad08994d18ad1dacc37a71a9', 'a7adbcd86c37f7dbc9b66945c82ef9e6', '否', '0', '', 1, 1, 'admin', '2019-05-22 19:29:55', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('df168368dcef46cade2aadd80100d8aa', '3d9a351be3436fbefb1307d4cfb49bf2', '男', '1', NULL, 1, 1, NULL, '2027-08-04 14:56:49', 'admin', '2019-03-23 22:44:44'); +INSERT INTO `sys_dict_item` VALUES ('e6329e3a66a003819e2eb830b0ca2ea0', '4e4602b3e3686f0911384e188dc7efb4', '小于', '<', '小于', 2, 1, 'admin', '2019-04-01 16:44:15', 'admin', '2019-04-01 17:48:34'); +INSERT INTO `sys_dict_item` VALUES ('e94eb7af89f1dbfa0d823580a7a6e66a', '236e8a4baff0db8c62c00dd95632834f', '不同步', '0', '不同步', 2, 1, 'admin', '2019-05-15 15:28:28', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('f16c5706f3ae05c57a53850c64ce7c45', 'a9d9942bd0eccb6e89de92d130ec4c4a', '发送成功', '1', NULL, 2, 1, 'admin', '2019-04-12 18:19:43', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('f2a7920421f3335afdf6ad2b342f6b5d', '845da5006c97754728bf48b6a10f79cc', '冻结', '2', NULL, NULL, 1, 'admin', '2019-03-18 21:46:02', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('f37f90c496ec9841c4c326b065e00bb2', '83bfb33147013cc81640d5fd9eda030c', '登录日志', '1', NULL, NULL, 1, 'admin', '2019-03-18 23:22:37', NULL, NULL); +INSERT INTO `sys_dict_item` VALUES ('f80a8f6838215753b05e1a5ba3346d22', '880a895c98afeca9d9ac39f29e67c13e', '删除', '4', '', 4, 1, 'admin', '2019-07-22 10:55:14', 'admin', '2019-07-22 10:55:30'); +INSERT INTO `sys_dict_item` VALUES ('fe50b23ae5e68434def76f67cef35d2d', '78bda155fe380b1b3f175f1e88c284c6', '已作废', '4', '已作废', 4, 1, 'admin', '2021-09-09 16:33:43', 'admin', '2019-05-09 16:34:40'); + +-- ---------------------------- +-- Table structure for sys_fill_rule +-- ---------------------------- +DROP TABLE IF EXISTS `sys_fill_rule`; +CREATE TABLE `sys_fill_rule` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键ID', + `rule_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则名称', + `rule_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则Code', + `rule_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则实现类', + `rule_params` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '规则参数', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uni_sys_fill_rule_code`(`rule_code`) USING BTREE, + UNIQUE INDEX `uk_sfr_rule_code`(`rule_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '填值规则表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_fill_rule +-- ---------------------------- +INSERT INTO `sys_fill_rule` VALUES ('1202551334738382850', '机构编码生成', 'org_num_role', 'com.jero.modules.system.rule.OrgCodeRule', '{\"parentId\":\"c6d7cb4deeac411cb3384b1b31278596\"}', 'admin', '2019-12-09 10:37:06', 'admin', '2019-12-05 19:32:35'); +INSERT INTO `sys_fill_rule` VALUES ('1202787623203065858', '分类字典编码生成', 'category_code_rule', 'com.jero.modules.system.rule.CategoryCodeRule', '{\"pid\":\"\"}', 'admin', '2019-12-09 10:36:54', 'admin', '2019-12-06 11:11:31'); + +-- ---------------------------- +-- Table structure for sys_gateway_route +-- ---------------------------- +DROP TABLE IF EXISTS `sys_gateway_route`; +CREATE TABLE `sys_gateway_route` ( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `router_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路由ID', + `name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '服务名', + `uri` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '服务地址', + `predicates` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '断言', + `filters` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '过滤器', + `retryable` int(3) NULL DEFAULT NULL COMMENT '是否重试:0-否 1-是', + `strip_prefix` int(3) NULL DEFAULT NULL COMMENT '是否忽略前缀0-否 1-是', + `persistable` int(3) NULL DEFAULT NULL COMMENT '是否为保留数据:0-否 1-是', + `show_api` int(3) NULL DEFAULT NULL COMMENT '是否在接口文档中展示:0-否 1-是', + `status` int(3) NULL DEFAULT NULL COMMENT '状态:0-无效 1-有效', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `sys_org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'gateway路由管理' ROW_FORMAT = Compact; + +-- ---------------------------- +-- Records of sys_gateway_route +-- ---------------------------- +INSERT INTO `sys_gateway_route` VALUES ('1331051599401857026', 'jero-demo-websocket', 'jero-demo-websocket', 'lb:ws://jero-demo', '[{\"args\":[\"/vxeSocket/**\"],\"name\":\"Path\"}]', '[]', NULL, NULL, NULL, NULL, 1, 'admin', '2020-11-24 09:46:46', NULL, NULL, NULL); +INSERT INTO `sys_gateway_route` VALUES ('jero-cloud-websocket', 'jero-system-websocket', 'jero-system-websocket', 'lb:ws://jero-system', '[{\"args\":[\"/websocket/**\",\"/eoaSocket/**\",\"/newsWebsocket/**\"],\"name\":\"Path\"}]', '[]', NULL, NULL, NULL, NULL, 1, 'admin', '2020-11-16 19:41:51', NULL, NULL, NULL); +INSERT INTO `sys_gateway_route` VALUES ('jero-demo', 'jero-demo', 'jero-demo', 'lb://jero-demo', '[{\"args\":[\"/mock/**\",\"/test/**\",\"/bigscreen/template1/**\",\"/bigscreen/template2/**\"],\"name\":\"Path\"}]', '[]', NULL, NULL, NULL, NULL, 1, 'admin', '2020-11-16 19:41:51', NULL, NULL, NULL); +INSERT INTO `sys_gateway_route` VALUES ('jero-system', 'jero-system', 'jero-system', 'lb://jero-system', '[{\"args\":[\"/sys/**\",\"/eoa/**\",\"/joa/**\",\"/online/**\",\"/bigscreen/**\",\"/jmreport/**\",\"/desform/**\",\"/process/**\",\"/act/**\",\"/plug-in/***/\",\"/druid/**\",\"/generic/**\"],\"name\":\"Path\"}]', '[]', NULL, NULL, NULL, NULL, 1, 'admin', '2020-11-16 19:41:51', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_log +-- ---------------------------- +DROP TABLE IF EXISTS `sys_log`; +CREATE TABLE `sys_log` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `log_type` int(2) NULL DEFAULT NULL COMMENT '日志类型(1登录日志,2操作日志)', + `log_content` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '日志内容', + `operate_type` int(2) NULL DEFAULT NULL COMMENT '操作类型', + `userid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作用户账号', + `username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作用户名称', + `ip` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'IP', + `method` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求java方法', + `request_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求路径', + `request_param` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '请求参数', + `request_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求类型', + `cost_time` bigint(20) NULL DEFAULT NULL COMMENT '耗时', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_table_userid`(`userid`) USING BTREE, + INDEX `index_logt_ype`(`log_type`) USING BTREE, + INDEX `index_operate_type`(`operate_type`) USING BTREE, + INDEX `index_log_type`(`log_type`) USING BTREE, + INDEX `idx_sl_userid`(`userid`) USING BTREE, + INDEX `idx_sl_log_type`(`log_type`) USING BTREE, + INDEX `idx_sl_operate_type`(`operate_type`) USING BTREE, + INDEX `idx_sl_create_time`(`create_time`) USING BTREE +) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '系统日志表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_log +-- ---------------------------- +INSERT INTO `sys_log` VALUES ('1385457895031435266', 1, '用户名: 开发管理员,退出成功!', NULL, 'admin', '开发管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2021-04-23 12:57:57', NULL, NULL); +INSERT INTO `sys_log` VALUES ('1385457925930872833', 1, '用户名: admin,登录成功!', NULL, 'admin', '开发管理员', '127.0.0.1', NULL, NULL, NULL, NULL, NULL, NULL, '2021-04-23 12:58:05', NULL, NULL); +INSERT INTO `sys_log` VALUES ('1385459069537218562', 2, '多数据源管理-分页列表查询', 1, 'admin', '开发管理员', '127.0.0.1', 'com.jero.modules.system.controller.SysDataSourceController.queryPageList()', NULL, ' sysDataSource: SysDataSource(id=null, code=null, name=null, remark=null, dbType=null, dbDriver=null, dbUrl=null, dbName=null, dbUsername=null, dbPassword=null, createBy=null, createTime=null, updateBy=null, updateTime=null, sysOrgCode=null) pageNo: 1 pageSize: 10 req: org.apache.shiro.web.servlet.ShiroHttpServletRequest@90dad63', NULL, 87, NULL, '2021-04-23 13:02:37', NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_permission`; +CREATE TABLE `sys_permission` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `parent_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父id', + `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单标题', + `url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '路径', + `component` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件', + `component_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '组件名字', + `redirect` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '一级菜单跳转地址', + `menu_type` int(11) NULL DEFAULT NULL COMMENT '菜单类型(0:一级菜单; 1:子菜单:2:按钮权限)', + `perms` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单权限编码', + `perms_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0' COMMENT '权限策略1显示2禁用', + `sort_no` double(8, 2) NULL DEFAULT NULL COMMENT '菜单排序', + `always_show` tinyint(1) NULL DEFAULT NULL COMMENT '聚合子路由: 1是0否', + `icon` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单图标', + `is_route` tinyint(1) NULL DEFAULT 1 COMMENT '是否路由菜单: 0:不是 1:是(默认值1)', + `is_leaf` tinyint(1) NULL DEFAULT NULL COMMENT '是否叶子节点: 1:是 0:不是', + `keep_alive` tinyint(1) NULL DEFAULT NULL COMMENT '是否缓存该页面: 1:是 0:不是', + `hidden` int(2) NULL DEFAULT 0 COMMENT '是否隐藏路由: 0否,1是', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `del_flag` int(1) NULL DEFAULT 0 COMMENT '删除状态 0正常 1已删除', + `rule_flag` int(3) NULL DEFAULT 0 COMMENT '是否添加数据权限1是0否', + `status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '按钮权限状态(0无效1有效)', + `internal_or_external` tinyint(1) NULL DEFAULT NULL COMMENT '外链菜单打开方式 0/内部打开 1/外部打开', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_prem_pid`(`parent_id`) USING BTREE, + INDEX `index_prem_is_route`(`is_route`) USING BTREE, + INDEX `index_prem_is_leaf`(`is_leaf`) USING BTREE, + INDEX `index_prem_sort_no`(`sort_no`) USING BTREE, + INDEX `index_prem_del_flag`(`del_flag`) USING BTREE, + INDEX `index_menu_type`(`menu_type`) USING BTREE, + INDEX `index_menu_hidden`(`hidden`) USING BTREE, + INDEX `index_menu_status`(`status`) USING BTREE, + INDEX `idx_sp_parent_id`(`parent_id`) USING BTREE, + INDEX `idx_sp_is_route`(`is_route`) USING BTREE, + INDEX `idx_sp_is_leaf`(`is_leaf`) USING BTREE, + INDEX `idx_sp_sort_no`(`sort_no`) USING BTREE, + INDEX `idx_sp_del_flag`(`del_flag`) USING BTREE, + INDEX `idx_sp_menu_type`(`menu_type`) USING BTREE, + INDEX `idx_sp_hidden`(`hidden`) USING BTREE, + INDEX `idx_sp_status`(`status`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_permission +-- ---------------------------- +INSERT INTO `sys_permission` VALUES ('00a2a0ae65cdca5e93209cdbde97cbe6', '2e42e3835c2b44ec9f7bc26c146ee531', '成功', '/result/success', 'result/Success', NULL, NULL, 1, NULL, NULL, 1.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('020b06793e4de2eee0007f603000c769', 'f0675b52d89100ee88472b6800754a08', 'ViserChartDemo', '/report/ViserChartDemo', 'demo/report/ViserChartDemo', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-03 19:08:53', 'admin', '2019-04-03 19:08:53', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('024f1fd1283dc632458976463d8984e1', '700b7f95165c46cc7a78bf227aa8fed3', 'Tomcat信息', '/monitor/TomcatInfo', 'modules/monitor/TomcatInfo', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-02 09:44:29', 'admin', '2019-05-07 15:19:10', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('043780fa095ff1b2bec4dc406d76f023', '2a470fc0c3954d9dbb61de6d80846549', '表格合计', '/demo/tableTotal', 'demo/TableTotal', NULL, NULL, 1, NULL, '1', 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-08-14 10:28:46', NULL, NULL, 0, 0, '1', NULL); +INSERT INTO `sys_permission` VALUES ('05b3c82ddb2536a4a5ee1a4c46b5abef', '540a2936940846cb98114ffb0d145cb8', '用户列表', '/list/user-list', 'demo/list/UserList', NULL, NULL, 1, NULL, NULL, 3.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('0620e402857b8c5b605e1ad9f4b89350', '2a470fc0c3954d9dbb61de6d80846549', '异步树列表Demo', '/demo/jeroTreeTable', 'demo/JeroTreeTable', NULL, NULL, 1, NULL, '0', 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-05-13 17:30:30', 'admin', '2021-03-16 22:19:21', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('078f9558cdeab239aecb2bda1a8ed0d1', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(文章)', '/list/search/article', 'demo/list/TableList', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-02-12 14:00:34', 'admin', '2019-02-12 14:17:54', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('08e6b9dc3c04489c8e1ff2ce6f105aa4', '', '系统监控', '/dashboard3', 'layouts/RouteView', NULL, NULL, 0, NULL, NULL, 16.00, 0, 'dashboard', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:31:58', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('0ac2ad938963b6c6d1af25477d5b8b51', '8d4683aacaa997ab86b966b464360338', '代码生成按钮', NULL, NULL, NULL, NULL, 2, 'online:goGenerateCode', '1', 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-06-11 14:20:09', NULL, NULL, 0, 0, '1', NULL); +INSERT INTO `sys_permission` VALUES ('109c78a583d4693ce2f16551b7786786', 'e41b69c57a941a3bbcce45032fe57605', 'Online报表配置', '/online/cgreport', 'modules/online/cgreport/OnlCgreportHeadList', NULL, NULL, 1, NULL, NULL, 2.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-03-08 10:51:07', 'admin', '2019-03-30 19:04:28', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('1166535831146504193', '2a470fc0c3954d9dbb61de6d80846549', '文件上传示例', '/oss/file', 'modules/oss/OSSFileList', NULL, NULL, 1, NULL, '1', 1.00, 0, '', 1, 1, 0, 0, NULL, 'admin', '2019-08-28 02:19:50', 'admin', '2021-03-16 20:48:53', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1192318987661234177', 'e41b69c57a941a3bbcce45032fe57605', '系统编码规则', '/isystem/fillRule', 'system/SysFillRuleList', NULL, NULL, 1, NULL, '1', 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-11-07 13:52:53', 'admin', '2020-07-10 16:55:03', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1205097455226462210', '1371830841603710977', '报表设计', '/big/screen', 'layouts/RouteView', NULL, NULL, 1, NULL, '1', 2.00, 0, 'area-chart', 1, 0, 0, 0, NULL, 'admin', '2019-12-12 20:09:58', 'admin', '2021-03-16 22:29:22', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1205098241075453953', '1205097455226462210', '生产销售监控', '{{ window._CONFIG[\'domianURL\'] }}/test/bigScreen/templat/index1', 'layouts/IframePageView', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-12-12 20:13:05', 'admin', '2019-12-12 20:15:27', 0, 0, '1', 1); +INSERT INTO `sys_permission` VALUES ('1205306106780364802', '1205097455226462210', '智慧物流监控', '{{ window._CONFIG[\'domianURL\'] }}/test/bigScreen/templat/index2', 'layouts/IframePageView', NULL, NULL, 1, NULL, '1', 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-12-13 09:59:04', 'admin', '2019-12-25 09:28:03', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1209731624921534465', 'e41b69c57a941a3bbcce45032fe57605', '多数据源管理', '/isystem/dataSource', 'system/SysDataSourceList', NULL, NULL, 1, NULL, '1', 6.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-12-25 15:04:30', 'admin', '2020-02-23 22:43:37', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1224641973866467330', 'e41b69c57a941a3bbcce45032fe57605', '系统校验规则', '/isystem/checkRule', 'system/SysCheckRuleList', NULL, NULL, 1, NULL, '1', 5.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-11-07 13:52:53', 'admin', '2020-07-10 16:55:12', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1260928341675982849', '3f915b2769fc80648e92d04e84ca059d', '添加按钮', NULL, NULL, NULL, NULL, 2, 'user:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-14 21:41:58', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1260929666434318338', '3f915b2769fc80648e92d04e84ca059d', '用户编辑', NULL, NULL, NULL, NULL, 2, 'user:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-14 21:47:14', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1260931366557696001', '3f915b2769fc80648e92d04e84ca059d', '表单性别可见', '', NULL, NULL, NULL, 2, 'user:sex', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-14 21:53:59', 'admin', '2020-05-14 21:57:00', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1260933542969458689', '3f915b2769fc80648e92d04e84ca059d', '禁用生日字段', NULL, NULL, NULL, NULL, 2, 'user:form:birthday', '2', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-05-14 22:02:38', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1265162119913824258', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '路由网关', '/isystem/gatewayroute', 'system/SysGatewayRouteList', NULL, NULL, 1, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, NULL, NULL, '2020-05-26 14:05:30', 'admin', '2020-09-09 14:47:52', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1280350452934307841', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户管理', '/isys/tenant', 'system/TenantList', NULL, NULL, 1, NULL, '1', 10.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-07 11:58:30', 'admin', '2020-07-10 15:46:35', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1280464606292099074', '2a470fc0c3954d9dbb61de6d80846549', '图片裁剪', '/demo/ImagCropper', 'demo/ImagCropper', NULL, NULL, 1, NULL, '1', 9.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-07 19:32:06', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287715272999944193', '2a470fc0c3954d9dbb61de6d80846549', 'JVXETable示例', '/demo/j-vxe-table-demo', 'layouts/RouteView', NULL, NULL, 1, NULL, '1', 0.10, 0, '', 1, 0, 0, 0, NULL, 'admin', '2020-07-27 19:43:40', 'admin', '2020-09-09 14:52:06', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287715783966834689', '1287715272999944193', '普通示例', '/demo/j-vxe-table-demo/normal', 'demo/JVXETableDemo', NULL, NULL, 1, NULL, '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-27 19:45:42', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287716451494510593', '1287715272999944193', '布局模板', '/demo/j-vxe-table-demo/layout', 'demo/JVxeDemo/layout-demo/Index', NULL, NULL, 1, NULL, '1', 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-27 19:48:21', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287718919049691137', '1287715272999944193', '即时保存', '/demo/j-vxe-table-demo/jsbc', 'demo/JVxeDemo/demo/JSBCDemo', NULL, NULL, 1, NULL, '1', 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-27 19:57:36', 'admin', '2020-07-27 20:03:37', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287718938179911682', '1287715272999944193', '弹出子表', '/demo/j-vxe-table-demo/tczb', 'demo/JVxeDemo/demo/PopupSubTable', NULL, NULL, 1, NULL, '1', 4.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-27 19:57:41', 'admin', '2020-07-27 20:03:47', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1287718956957810689', '1287715272999944193', '无痕刷新', '/demo/j-vxe-table-demo/whsx', 'demo/JVxeDemo/demo/SocketReload', NULL, NULL, 1, NULL, '1', 5.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-07-27 19:57:44', 'admin', '2020-07-27 20:03:57', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('13212d3416eb690c2e1d5033166ff47a', '2e42e3835c2b44ec9f7bc26c146ee531', '失败', '/result/fail', 'result/Error', NULL, NULL, 1, NULL, NULL, 2.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('1335960713267093506', '1205097455226462210', '积木报表设计', '{{ window._CONFIG[\'domianURL\'] }}/jmreport/list?token=${token}', 'layouts/IframePageView', NULL, NULL, 1, NULL, '1', 0.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2020-12-07 22:53:50', 'admin', '2020-12-08 09:28:06', 0, 0, '1', 1); +INSERT INTO `sys_permission` VALUES ('1367a93f2c410b169faa7abcbad2f77c', '6e73eb3c26099c191bf03852ee1310a1', '基本设置', '/account/settings/BaseSetting', 'account/settings/BaseSetting', 'account-settings-base', NULL, 1, 'BaseSettings', NULL, NULL, 0, NULL, 1, 1, NULL, 1, NULL, NULL, '2018-12-26 18:58:35', 'admin', '2019-03-20 12:57:31', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('1371830841603710977', '', '图表/报表示例', '/charts', 'layouts/RouteView', NULL, NULL, 0, NULL, '1', 19.00, 0, 'line-chart', 1, 0, 0, 0, NULL, 'admin', '2021-03-16 22:28:55', 'admin', '2021-03-16 22:31:24', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1371831353354936322', '', '日志中心', '/log', 'layouts/RouteView', NULL, NULL, 0, NULL, '1', 10.00, 0, 'copy', 1, 0, 0, 0, NULL, 'admin', '2021-03-16 22:30:57', 'admin', '2021-03-16 22:37:10', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383952003393466369', '190c2b43bec6a5f7a4194a85db67d96a', '角色添加', NULL, NULL, NULL, NULL, 2, 'sys:role:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:14:05', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383952499906785282', '190c2b43bec6a5f7a4194a85db67d96a', '角色编辑', NULL, NULL, NULL, NULL, 2, 'sys:role:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:16:03', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383952680177971201', '190c2b43bec6a5f7a4194a85db67d96a', '角色删除', NULL, NULL, NULL, NULL, 2, 'sys:role:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:16:46', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383952988471898113', '45c966826eeff4c99b8f8ebfe74511fc', '部门添加', NULL, NULL, NULL, NULL, 2, 'sys:depart:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:18:00', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953084483710977', '45c966826eeff4c99b8f8ebfe74511fc', '部门编辑', NULL, NULL, NULL, NULL, 2, 'sys:depart:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:18:23', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953171704262657', '45c966826eeff4c99b8f8ebfe74511fc', '部门删除', NULL, NULL, NULL, NULL, 2, 'sys:depart:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:18:43', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953340499832833', 'f1cb187abf927c88b89470d08615f5ac', '数据字典添加', NULL, NULL, NULL, NULL, 2, 'sys:dict:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:19:24', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953594972450818', 'f1cb187abf927c88b89470d08615f5ac', '数据字典编辑', NULL, NULL, NULL, NULL, 2, 'sys:dict:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:20:24', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953732851806210', 'f1cb187abf927c88b89470d08615f5ac', '数据字典删除', NULL, NULL, NULL, NULL, 2, 'sys:dict:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:20:57', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383953875781103617', 'ebb9d82ea16ad864071158e0c449d186', '分类字典添加', NULL, NULL, NULL, NULL, 2, 'sys:category:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:21:31', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383954065124569090', 'ebb9d82ea16ad864071158e0c449d186', '分类字典编辑', NULL, NULL, NULL, NULL, 2, 'sys:category:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:22:16', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383954151342682114', 'ebb9d82ea16ad864071158e0c449d186', '分类字典删除', NULL, NULL, NULL, NULL, 2, 'sys:category:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:22:37', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383956546739056641', '3f915b2769fc80648e92d04e84ca059d', '用户删除', NULL, NULL, NULL, NULL, 2, 'sys:user:sel', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:32:08', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383956678637334529', '3f915b2769fc80648e92d04e84ca059d', '用户导入', NULL, NULL, NULL, NULL, 2, 'sys:user:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:32:40', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383956779212550146', '3f915b2769fc80648e92d04e84ca059d', '用户导出', NULL, NULL, NULL, NULL, 2, 'sys:user:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:33:03', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383956904978755586', '190c2b43bec6a5f7a4194a85db67d96a', '角色导入', NULL, NULL, NULL, NULL, 2, 'sys:role:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:33:33', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957016807288833', '190c2b43bec6a5f7a4194a85db67d96a', '角色导出', NULL, NULL, NULL, NULL, 2, 'sys:role:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:34:00', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957130082856962', '45c966826eeff4c99b8f8ebfe74511fc', '部门导入', NULL, NULL, NULL, NULL, 2, 'sys:depart:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:34:27', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957217370517506', '45c966826eeff4c99b8f8ebfe74511fc', '部门导出', NULL, NULL, NULL, NULL, 2, 'sys:depart:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:34:48', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957378981244930', 'f1cb187abf927c88b89470d08615f5ac', '数据字典导入', NULL, NULL, NULL, NULL, 2, 'sys:dict:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:35:26', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957508945948674', 'f1cb187abf927c88b89470d08615f5ac', '数据字典导出', NULL, NULL, NULL, NULL, 2, 'sys:dict:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:35:57', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957660913971202', 'ebb9d82ea16ad864071158e0c449d186', '分类字典导入', NULL, NULL, NULL, NULL, 2, 'sys:category:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:36:34', NULL, NULL, 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1383957793466560514', 'ebb9d82ea16ad864071158e0c449d186', '分类字典导出', NULL, NULL, NULL, NULL, 2, 'sys:category:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2021-04-19 09:37:05', 'admin', '2021-04-19 10:04:58', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('190c2b43bec6a5f7a4194a85db67d96a', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '角色管理', '/isystem/roleUserList', 'system/RoleUserList', NULL, NULL, 1, 'sys:role:list', '1', 1.20, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2019-04-17 15:13:56', 'admin', '2019-12-25 09:36:31', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('1a0811914300741f4e11838ff37a1d3a', '3f915b2769fc80648e92d04e84ca059d', '手机号禁用', NULL, NULL, NULL, NULL, 2, 'user:form:phone', '2', 1.00, 0, NULL, 0, 1, NULL, 0, NULL, 'admin', '2019-05-11 17:19:30', 'admin', '2019-05-11 18:00:22', 0, 0, '1', NULL); +INSERT INTO `sys_permission` VALUES ('200006f0edf145a2b50eacca07585451', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(应用)', '/list/search/application', 'demo/list/TableList', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-02-12 14:02:51', 'admin', '2019-02-12 14:14:01', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('265de841c58907954b8877fb85212622', '2a470fc0c3954d9dbb61de6d80846549', '图片拖拽排序', '/demo/imgDragSort', 'demo/ImgDragSort', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-25 10:43:08', 'admin', '2019-04-25 10:46:26', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('277bfabef7d76e89b33062b16a9a5020', 'e3c13679c73a4f829bcff2aba8fd68b1', '基础表单', '/form/base-form', 'demo/form/BasicForm', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 0, NULL, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-02-26 17:02:08', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('2a470fc0c3954d9dbb61de6d80846549', '', '开发示例Demo', '/jero', 'layouts/RouteView', NULL, NULL, 0, NULL, NULL, 20.00, 0, 'qrcode', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:31:20', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('2aeddae571695cd6380f6d6d334d6e7d', 'f0675b52d89100ee88472b6800754a08', '布局统计报表', '/report/ArchivesStatisticst', 'demo/report/ArchivesStatisticst', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-03 18:32:48', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('2dbbafa22cda07fa5d169d741b81fe12', 'e41b69c57a941a3bbcce45032fe57605', '在线文档', '{{ window._CONFIG[\'domianURL\'] }}/doc.html', 'layouts/IframePageView', NULL, NULL, 1, NULL, NULL, 8.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-01-30 10:00:01', 'admin', '2021-03-16 22:33:43', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('2e42e3835c2b44ec9f7bc26c146ee531', '2a470fc0c3954d9dbb61de6d80846549', '结果页', '/result', 'layouts/PageView', NULL, NULL, 1, NULL, NULL, 20.00, 0, 'check-circle-o', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:22:54', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('3f915b2769fc80648e92d04e84ca059d', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '用户管理', '/isystem/user', 'system/UserList', NULL, NULL, 1, 'sys:user:list', '1', 1.10, 0, NULL, 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-12-25 09:36:24', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('3fac0d3c9cd40fa53ab70d4c583821f8', '2a470fc0c3954d9dbb61de6d80846549', '分屏', '/demo/splitPanel', 'demo/SplitPanel', NULL, NULL, 1, NULL, NULL, 6.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-25 16:27:06', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('4148ec82b6acd69f470bea75fe41c357', '2a470fc0c3954d9dbb61de6d80846549', '单表模型示例', '/demo/JeroDemoList', 'demo/JeroDemoList', 'DemoList', NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, 0, 0, NULL, NULL, '2018-12-28 15:57:30', 'jero', '2020-05-14 22:09:34', 0, 1, NULL, 0); +INSERT INTO `sys_permission` VALUES ('418964ba087b90a84897b62474496b93', '540a2936940846cb98114ffb0d145cb8', '查询表格', '/list/query-list', 'demo/list/TableList', NULL, NULL, 1, NULL, NULL, 1.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('4356a1a67b564f0988a484f5531fd4d9', '2a470fc0c3954d9dbb61de6d80846549', '内嵌Table', '/demo/TableExpandeSub', 'demo/TableExpandeSub', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-04 22:48:13', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('45c966826eeff4c99b8f8ebfe74511fc', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '部门管理', '/isystem/depart', 'system/DepartList', NULL, NULL, 1, 'sys:depart:list', '1', 1.40, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2019-01-29 18:47:40', 'admin', '2019-12-25 09:36:47', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('4875ebe289344e14844d8e3ea1edd73f', '2a470fc0c3954d9dbb61de6d80846549', '详情页', '/profile', 'layouts/RouteView', NULL, NULL, 1, NULL, NULL, 21.00, 0, 'profile', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:07', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('4f66409ef3bbd69c1d80469d6e2a885e', '6e73eb3c26099c191bf03852ee1310a1', '账户绑定', '/account/settings/binding', 'account/settings/Binding', NULL, NULL, 1, 'BindingSettings', NULL, NULL, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-26 19:01:20', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('4f84f9400e5e92c95f05b554724c2b58', '540a2936940846cb98114ffb0d145cb8', '角色列表', '/list/role-list', 'demo/list/RoleList', NULL, NULL, 1, NULL, NULL, 4.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('53a9230444d33de28aa11cc108fb1dba', '5c8042bd6c601270b2bbd9b20bccc68b', '我的消息', '/isps/userAnnouncement', 'system/UserAnnouncementList', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-04-19 10:16:00', 'admin', '2021-03-16 18:01:26', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('540a2936940846cb98114ffb0d145cb8', '2a470fc0c3954d9dbb61de6d80846549', '列表页', '/list', 'layouts/PageView', NULL, '/list/query-list', 1, NULL, NULL, 24.00, 0, 'table', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:31', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('54dd5457a3190740005c1bfec55b1c34', 'e41b69c57a941a3bbcce45032fe57605', '菜单管理', '/isystem/permission', 'system/PermissionList', NULL, NULL, 1, NULL, NULL, 7.00, 0, NULL, 1, 1, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:32:38', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('58857ff846e61794c69208e9d3a85466', '1371831353354936322', '操作日志', '/isystem/log', 'system/LogList', NULL, NULL, 1, NULL, NULL, 1.00, 0, '', 1, 1, 0, 0, NULL, NULL, '2018-12-26 10:11:18', 'admin', '2021-03-16 22:33:27', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('58b9204feaf07e47284ddb36cd2d8468', '2a470fc0c3954d9dbb61de6d80846549', '图片翻页', '/demo/imgTurnPage', 'demo/ImgTurnPage', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-25 11:36:42', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('5c2f42277948043026b7a14692456828', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '我的部门', '/isystem/departUserList', 'system/DepartUserList', NULL, NULL, 1, NULL, NULL, 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-04-17 15:12:24', 'admin', '2019-12-25 09:35:26', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('5c8042bd6c601270b2bbd9b20bccc68b', '', '消息中心', '/message', 'layouts/RouteView', NULL, NULL, 0, NULL, NULL, 9.00, 0, 'message', 1, 0, 0, 0, NULL, 'admin', '2019-04-09 11:05:04', 'admin', '2021-03-16 22:32:06', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('6531cf3421b1265aeeeabaab5e176e6d', 'e3c13679c73a4f829bcff2aba8fd68b1', '分步表单', '/form/step-form', 'demo/form/stepForm/StepForm', NULL, NULL, 1, NULL, NULL, 2.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('655563cd64b75dcf52ef7bcdd4836953', '2a470fc0c3954d9dbb61de6d80846549', '图片预览', '/demo/ImagPreview', 'demo/ImagPreview', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-17 11:18:45', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('65a8f489f25a345836b7f44b1181197a', 'c65321e57b7949b7a975313220de0422', '403', '/exception/403', 'exception/403', NULL, NULL, 1, NULL, NULL, 1.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('6ad53fd1b220989a8b71ff482d683a5a', '2a470fc0c3954d9dbb61de6d80846549', '一对多Tab示例', '/demo/tablist/jeroOrderDMainList', 'demo/tablist/JeroOrderDMainList', NULL, NULL, 1, NULL, NULL, 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-02-20 14:45:09', 'admin', '2021-03-16 22:18:38', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('6e73eb3c26099c191bf03852ee1310a1', '717f6bee46f44a3897eca9abd6e2ec44', '个人设置', '/account/settings/BaseSetting', 'account/settings/Index', NULL, NULL, 1, NULL, NULL, 2.00, 1, NULL, 1, 0, NULL, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-04-19 09:41:05', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('700b7f95165c46cc7a78bf227aa8fed3', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '性能监控', '/monitor', 'layouts/RouteView', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2019-04-02 11:34:34', 'admin', '2020-09-09 14:48:51', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('717f6bee46f44a3897eca9abd6e2ec44', '2a470fc0c3954d9dbb61de6d80846549', '个人页', '/account', 'layouts/RouteView', NULL, NULL, 1, NULL, NULL, 25.00, 0, 'user', 1, 0, 0, 1, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:42', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('73678f9daa45ed17a3674131b03432fb', '540a2936940846cb98114ffb0d145cb8', '权限列表', '/list/permission-list', 'demo/list/PermissionList', NULL, NULL, 1, NULL, NULL, 5.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('7960961b0063228937da5fa8dd73d371', '2a470fc0c3954d9dbb61de6d80846549', 'JEditableTable示例', '/demo/JEditableTable', 'demo/JeroEditableTableExample', NULL, NULL, 1, NULL, NULL, 0.20, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-03-22 15:22:18', 'admin', '2021-03-16 22:21:32', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('7ac9eb9ccbde2f7a033cd4944272bf1e', '540a2936940846cb98114ffb0d145cb8', '卡片列表', '/list/card', 'demo/list/CardList', NULL, NULL, 1, NULL, NULL, 7.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('841057b8a1bef8f6b4b20f9a618a7fa6', '1371831353354936322', '数据日志', '/sys/dataLog-list', 'system/DataLogList', NULL, NULL, 1, NULL, NULL, 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-03-11 19:26:49', 'admin', '2021-03-16 22:33:07', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('882a73768cfd7f78f3a37584f7299656', '6e73eb3c26099c191bf03852ee1310a1', '个性化设置', '/account/settings/custom', 'account/settings/Custom', NULL, NULL, 1, 'CustomSettings', NULL, NULL, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-26 19:00:46', NULL, '2018-12-26 21:13:25', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('8b3bff2eee6f1939147f5c68292a1642', '700b7f95165c46cc7a78bf227aa8fed3', '服务器信息', '/monitor/SystemInfo', 'modules/monitor/SystemInfo', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-02 11:39:19', 'admin', '2019-04-02 15:40:02', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('8d1ebd663688965f1fd86a2f0ead3416', '700b7f95165c46cc7a78bf227aa8fed3', 'Redis监控', '/monitor/redis/info', 'modules/monitor/RedisInfo', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-02 13:11:33', 'admin', '2019-05-07 15:18:54', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('8d4683aacaa997ab86b966b464360338', 'e41b69c57a941a3bbcce45032fe57605', 'Online表单开发', '/online/cgform', 'modules/online/cgform/OnlCgformHeadList', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 0, NULL, 0, NULL, 'admin', '2019-03-12 15:48:14', 'admin', '2019-06-11 14:19:17', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('8fb8172747a78756c11916216b8b8066', '717f6bee46f44a3897eca9abd6e2ec44', '工作台', '/dashboard/workplace', 'dashboard/Workplace', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, NULL, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-04-02 11:45:02', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('944abf0a8fc22fe1f1154a389a574154', '5c8042bd6c601270b2bbd9b20bccc68b', '消息管理', '/modules/message/sysMessageList', 'modules/message/SysMessageList', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-04-09 11:27:53', 'admin', '2021-03-16 18:01:20', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('9502685863ab87f0ad1134142788a385', '', '首页', '/dashboard/analysis', 'dashboard/Analysis', NULL, NULL, 0, NULL, NULL, 0.00, 0, 'home', 1, 1, NULL, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-03-29 11:04:13', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('97c8629abc7848eccdb6d77c24bb3ebb', '700b7f95165c46cc7a78bf227aa8fed3', '磁盘监控', '/monitor/Disk', 'modules/monitor/DiskMonitoring', NULL, NULL, 1, NULL, NULL, 6.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-25 14:30:06', 'admin', '2019-05-05 14:37:14', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('9a90363f216a6a08f32eecb3f0bf12a3', '2a470fc0c3954d9dbb61de6d80846549', 'Jero组件示例', '/demo/SelectDemo', 'demo/SelectDemo', NULL, NULL, 1, NULL, NULL, 0.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-03-19 11:19:05', 'admin', '2021-03-16 22:15:28', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('ae4fed059f67086fd52a73d913cf473d', '540a2936940846cb98114ffb0d145cb8', '内联编辑表格', '/list/edit-table', 'demo/list/TableInnerEditList', NULL, NULL, 1, NULL, NULL, 2.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('aedbf679b5773c1f25e9f7b10111da73', '08e6b9dc3c04489c8e1ff2ce6f105aa4', 'SQL监控', '{{ window._CONFIG[\'domianURL\'] }}/druid/', 'layouts/IframePageView', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-01-30 09:43:22', 'admin', '2020-09-09 14:48:38', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('b1cb0a3fedf7ed0e4653cb5a229837ee', 'e41b69c57a941a3bbcce45032fe57605', '定时任务', '/isystem/QuartzJobList', 'system/QuartzJobList', NULL, NULL, 1, NULL, NULL, 10.00, 0, NULL, 1, 1, 0, 0, NULL, NULL, '2019-01-03 09:38:52', 'admin', '2021-03-16 22:42:39', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('b3c824fc22bd953e2eb16ae6914ac8f9', '4875ebe289344e14844d8e3ea1edd73f', '高级详情页', '/profile/advanced', 'demo/profile/advanced/Advanced', NULL, NULL, 1, NULL, NULL, 2.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('b4dfc7d5dd9e8d5b6dd6d4579b1aa559', 'c65321e57b7949b7a975313220de0422', '500', '/exception/500', 'exception/500', NULL, NULL, 1, NULL, NULL, 3.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('c431130c0bc0ec71b0a5be37747bb36a', '2a470fc0c3954d9dbb61de6d80846549', '一对多JEditable', '/demo/JeroOrderMainListForJEditableTable', 'demo/JeroOrderMainListForJEditableTable', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-03-29 10:51:59', 'admin', '2019-04-04 20:09:39', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('c65321e57b7949b7a975313220de0422', '2a470fc0c3954d9dbb61de6d80846549', '异常页', '/exception', 'layouts/RouteView', NULL, NULL, 1, NULL, NULL, 22.00, 0, 'warning', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:19', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('c6cf95444d80435eb37b2f9db3971ae6', '2a470fc0c3954d9dbb61de6d80846549', '数据回执模拟', '/demo/InterfaceTest', 'demo/InterfaceTest', NULL, NULL, 1, NULL, NULL, 6.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-02-19 16:02:23', 'admin', '2019-02-21 16:25:45', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('cc50656cf9ca528e6f2150eba4714ad2', '4875ebe289344e14844d8e3ea1edd73f', '基础详情页', '/profile/basic', 'demo/profile/basic/Index', NULL, NULL, 1, NULL, NULL, 1.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('d07a2c87a451434c99ab06296727ec4f', '700b7f95165c46cc7a78bf227aa8fed3', 'JVM信息', '/monitor/JvmInfo', 'modules/monitor/JvmInfo', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-01 23:07:48', 'admin', '2019-04-02 11:37:16', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('d2bbf9ebca5a8fa2e227af97d2da7548', 'c65321e57b7949b7a975313220de0422', '404', '/exception/404', 'exception/404', NULL, NULL, 1, NULL, NULL, 2.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('d7d6e2e4e2934f2c9385a623fd98c6f3', '', '系统管理', '/isystem', 'layouts/RouteView', NULL, NULL, 0, NULL, NULL, 15.00, 0, 'setting', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:31:34', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('d86f58e7ab516d3bc6bfb1fe10585f97', '717f6bee46f44a3897eca9abd6e2ec44', '个人中心', '/account/center', 'account/center/Index', NULL, NULL, 1, NULL, NULL, 1.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('de13e0f6328c069748de7399fcc1dbbd', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(项目)', '/list/search/project', 'demo/list/TableList', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-02-12 14:01:40', 'admin', '2019-02-12 14:14:18', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('e08cb190ef230d5d4f03824198773950', '5c8042bd6c601270b2bbd9b20bccc68b', '系统通告', '/isystem/annountCement', 'system/SysAnnouncementList', NULL, NULL, 1, 'annountCement', NULL, 1.00, 0, '', 1, 1, 0, 0, NULL, NULL, '2019-01-02 17:23:01', 'admin', '2021-03-16 18:00:58', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('e1979bb53e9ea51cecc74d86fd9d2f64', '2a470fc0c3954d9dbb61de6d80846549', 'PDF预览', '/demo/jeroPdfView', 'demo/JeroPdfView', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-04-25 10:39:35', 'admin', '2021-03-16 22:18:26', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('e3c13679c73a4f829bcff2aba8fd68b1', '2a470fc0c3954d9dbb61de6d80846549', '表单页', '/form', 'layouts/PageView', NULL, NULL, 1, NULL, NULL, 25.00, 0, 'form', 1, 0, 0, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2021-03-16 22:23:54', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('e41b69c57a941a3bbcce45032fe57605', '', '开发工具', '/online', 'layouts/RouteView', NULL, NULL, 0, NULL, NULL, 18.00, 0, 'cloud', 1, 0, 0, 0, NULL, 'admin', '2019-03-08 10:43:10', 'admin', '2021-03-16 22:31:28', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('e5973686ed495c379d829ea8b2881fc6', 'e3c13679c73a4f829bcff2aba8fd68b1', '高级表单', '/form/advanced-form', 'demo/form/advancedForm/AdvancedForm', NULL, NULL, 1, NULL, NULL, 3.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('e6bfd1fcabfd7942fdd05f076d1dad38', '2a470fc0c3954d9dbb61de6d80846549', '打印测试', '/demo/PrintDemo', 'demo/PrintDemo', NULL, NULL, 1, NULL, NULL, 3.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-02-19 15:58:48', 'admin', '2019-05-07 20:14:39', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('ebb9d82ea16ad864071158e0c449d186', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '分类字典', '/isys/category', 'system/SysCategoryList', NULL, NULL, 1, 'sys:category:list', '1', 5.20, 0, NULL, 1, 0, 0, 0, NULL, 'admin', '2019-05-29 18:48:07', 'admin', '2020-02-23 22:45:33', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('ec8d607d0156e198b11853760319c646', '6e73eb3c26099c191bf03852ee1310a1', '安全设置', '/account/settings/security', 'account/settings/Security', NULL, NULL, 1, 'SecuritySettings', NULL, NULL, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-26 18:59:52', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('f0675b52d89100ee88472b6800754a08', '1371830841603710977', '统计报表', '/report', 'layouts/RouteView', NULL, NULL, 1, NULL, NULL, 1.00, 0, 'bar-chart', 1, 0, 0, 0, NULL, 'admin', '2019-04-03 18:32:02', 'admin', '2021-03-16 22:29:03', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('f1cb187abf927c88b89470d08615f5ac', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '数据字典', '/isystem/dict', 'system/DictList', NULL, NULL, 1, 'sys:dict:list', '1', 5.00, 0, NULL, 1, 0, 0, 0, NULL, NULL, '2018-12-28 13:54:43', 'admin', '2020-02-23 22:45:25', 0, 0, '1', 0); +INSERT INTO `sys_permission` VALUES ('f23d9bfff4d9aa6b68569ba2cff38415', '540a2936940846cb98114ffb0d145cb8', '标准列表', '/list/basic-list', 'demo/list/StandardList', NULL, NULL, 1, NULL, NULL, 6.00, NULL, NULL, 1, 1, NULL, NULL, NULL, NULL, '2018-12-25 20:34:38', NULL, NULL, 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('f780d0d3083d849ccbdb1b1baee4911d', '5c8042bd6c601270b2bbd9b20bccc68b', '模板管理', '/modules/message/sysMessageTemplateList', 'modules/message/SysMessageTemplateList', NULL, NULL, 1, NULL, NULL, 1.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-09 11:50:31', 'admin', '2019-04-12 10:16:34', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('fb07ca05a3e13674dbf6d3245956da2e', '540a2936940846cb98114ffb0d145cb8', '搜索列表', '/list/search', 'demo/list/search/SearchLayout', NULL, '/list/search/article', 1, NULL, NULL, 8.00, 0, NULL, 1, 0, NULL, 0, NULL, NULL, '2018-12-25 20:34:38', 'admin', '2019-02-12 15:09:13', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('fb367426764077dcf94640c843733985', '2a470fc0c3954d9dbb61de6d80846549', '一对多示例', '/demo/jeroOrderMainList', 'demo/JeroOrderMainList', NULL, NULL, 1, NULL, NULL, 2.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2019-02-15 16:24:11', 'admin', '2021-03-16 22:18:47', 0, 0, NULL, 0); +INSERT INTO `sys_permission` VALUES ('fc810a2267dd183e4ef7c71cc60f4670', '700b7f95165c46cc7a78bf227aa8fed3', '请求追踪', '/monitor/HttpTrace', 'modules/monitor/HttpTrace', NULL, NULL, 1, NULL, NULL, 4.00, 0, NULL, 1, 1, NULL, 0, NULL, 'admin', '2019-04-02 09:46:19', 'admin', '2019-04-02 11:37:27', 0, 0, NULL, NULL); +INSERT INTO `sys_permission` VALUES ('fedfbf4420536cacc0218557d263dfea', '6e73eb3c26099c191bf03852ee1310a1', '新消息通知', '/account/settings/notification', 'account/settings/Notification', NULL, NULL, 1, 'NotificationSettings', NULL, NULL, NULL, '', 1, 1, NULL, NULL, NULL, NULL, '2018-12-26 19:02:05', NULL, NULL, 0, 0, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_permission_data_rule +-- ---------------------------- +DROP TABLE IF EXISTS `sys_permission_data_rule`; +CREATE TABLE `sys_permission_data_rule` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ID', + `permission_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '菜单ID', + `rule_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '规则名称', + `rule_column` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段', + `rule_conditions` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '条件', + `rule_value` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '规则值', + `status` varchar(3) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限有效状态1有0否', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_fucntionid`(`permission_id`) USING BTREE, + INDEX `idx_spdr_permission_id`(`permission_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '菜单权限数据规则表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_quartz_job +-- ---------------------------- +DROP TABLE IF EXISTS `sys_quartz_job`; +CREATE TABLE `sys_quartz_job` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `del_flag` int(1) NULL DEFAULT NULL COMMENT '删除状态', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `job_class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '任务类名', + `cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'cron表达式', + `parameter` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `status` int(1) NULL DEFAULT NULL COMMENT '状态 0正常 -1停止', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_job_class_name`(`job_class_name`) USING BTREE +) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '定时任务在线管理表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_quartz_job +-- ---------------------------- +INSERT INTO `sys_quartz_job` VALUES ('df26ecacf0f75d219d746750fe84bbee', NULL, NULL, 0, 'admin', '2021-03-16 16:47:23', 'com.jero.modules.quartz.job.SampleParamJob', '0/1 * * * * ?', 'scott', 'Demo-带参测试,后台将每隔1秒执行输出日志', -1); +INSERT INTO `sys_quartz_job` VALUES ('a253cdfc811d69fa0efc70d052bc8128', 'admin', '2019-03-30 12:44:48', 0, 'admin', '2021-03-16 16:47:05', 'com.jero.modules.quartz.job.SampleJob', '0/1 * * * * ?', NULL, 'Demo', -1); + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role`; +CREATE TABLE `sys_role` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `role_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色名称', + `role_code` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '角色编码', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_sys_role_role_code`(`role_code`) USING BTREE, + INDEX `idx_sr_role_code`(`role_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO `sys_role` VALUES ('f6817f48af4fb3af11b9e8bf182f618b', '开发管理员', 'admin', '开发人员使用的最高管理员', NULL, '2018-12-21 18:03:39', 'admin', '2021-03-16 13:55:05'); + +-- ---------------------------- +-- Table structure for sys_role_permission +-- ---------------------------- +DROP TABLE IF EXISTS `sys_role_permission`; +CREATE TABLE `sys_role_permission` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id', + `permission_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '权限id', + `data_rule_ids` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据权限ids', + `operate_date` datetime(0) NULL DEFAULT NULL COMMENT '操作时间', + `operate_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '操作ip', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_group_role_per_id`(`role_id`, `permission_id`) USING BTREE, + INDEX `index_group_role_id`(`role_id`) USING BTREE, + INDEX `index_group_per_id`(`permission_id`) USING BTREE, + INDEX `idx_srp_role_per_id`(`role_id`, `permission_id`) USING BTREE, + INDEX `idx_srp_role_id`(`role_id`) USING BTREE, + INDEX `idx_srp_permission_id`(`permission_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '角色权限表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_role_permission +-- ---------------------------- +INSERT INTO `sys_role_permission` VALUES ('00b82058779cca5106fbb84783534c9b', 'f6817f48af4fb3af11b9e8bf182f618b', '4148ec82b6acd69f470bea75fe41c357', '', NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0254c0b25694ad5479e6d6935bbc176e', 'f6817f48af4fb3af11b9e8bf182f618b', '944abf0a8fc22fe1f1154a389a574154', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('09bd4fc30ffe88c4a44ed3868f442719', 'f6817f48af4fb3af11b9e8bf182f618b', 'e6bfd1fcabfd7942fdd05f076d1dad38', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0c2d2db76ee3aa81a4fe0925b0f31365', 'f6817f48af4fb3af11b9e8bf182f618b', '024f1fd1283dc632458976463d8984e1', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0c6b8facbb1cc874964c87a8cf01e4b1', 'f6817f48af4fb3af11b9e8bf182f618b', '841057b8a1bef8f6b4b20f9a618a7fa6', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0c6e1075e422972083c3e854d9af7851', 'f6817f48af4fb3af11b9e8bf182f618b', '08e6b9dc3c04489c8e1ff2ce6f105aa4', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0e1469997af2d3b97fff56a59ee29eeb', 'f6817f48af4fb3af11b9e8bf182f618b', 'e41b69c57a941a3bbcce45032fe57605', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('0f861cb988fdc639bb1ab943471f3a72', 'f6817f48af4fb3af11b9e8bf182f618b', '97c8629abc7848eccdb6d77c24bb3ebb', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1185039870537576450', 'f6817f48af4fb3af11b9e8bf182f618b', '1166535831146504193', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1197431682208206850', 'f6817f48af4fb3af11b9e8bf182f618b', '1192318987661234177', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1197795315916271617', 'f6817f48af4fb3af11b9e8bf182f618b', '109c78a583d4693ce2f16551b7786786', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1209423530518761473', 'f6817f48af4fb3af11b9e8bf182f618b', '1205097455226462210', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1209423530594258945', 'f6817f48af4fb3af11b9e8bf182f618b', '1205098241075453953', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1209423530606841858', 'f6817f48af4fb3af11b9e8bf182f618b', '1205306106780364802', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1209423580355481602', 'f6817f48af4fb3af11b9e8bf182f618b', '190c2b43bec6a5f7a4194a85db67d96a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1231590078632955905', 'f6817f48af4fb3af11b9e8bf182f618b', '1224641973866467330', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1231590078658121729', 'f6817f48af4fb3af11b9e8bf182f618b', '1209731624921534465', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1260928399955836929', 'f6817f48af4fb3af11b9e8bf182f618b', '1260928341675982849', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1269526122208522241', 'f6817f48af4fb3af11b9e8bf182f618b', '1267412134208319489', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('126ea9faebeec2b914d6d9bef957afb6', 'f6817f48af4fb3af11b9e8bf182f618b', 'f1cb187abf927c88b89470d08615f5ac', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1281494164924653569', 'f6817f48af4fb3af11b9e8bf182f618b', '1280350452934307841', NULL, '2020-07-10 15:43:13', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1281494164945625089', 'f6817f48af4fb3af11b9e8bf182f618b', '1280464606292099074', NULL, '2020-07-10 15:43:13', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1281494684632473602', 'f6817f48af4fb3af11b9e8bf182f618b', '1265162119913824258', NULL, '2020-07-10 15:45:16', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080082485250', 'f6817f48af4fb3af11b9e8bf182f618b', '1287715272999944193', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080103456769', 'f6817f48af4fb3af11b9e8bf182f618b', '1287715783966834689', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080116039682', 'f6817f48af4fb3af11b9e8bf182f618b', '1287716451494510593', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080124428290', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718919049691137', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080128622593', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718938179911682', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1303585080141205506', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718956957810689', NULL, '2020-09-09 14:44:37', '127.0.0.1'); +INSERT INTO `sys_role_permission` VALUES ('1335960787783098369', 'f6817f48af4fb3af11b9e8bf182f618b', '1335960713267093506', NULL, '2020-12-07 22:54:07', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624661061633', 'f6817f48af4fb3af11b9e8bf182f618b', '1371831353354936322', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624677838849', 'f6817f48af4fb3af11b9e8bf182f618b', '1260929666434318338', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624677838850', 'f6817f48af4fb3af11b9e8bf182f618b', '1260931366557696001', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624677838851', 'f6817f48af4fb3af11b9e8bf182f618b', '1260933542969458689', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624677838852', 'f6817f48af4fb3af11b9e8bf182f618b', '1a0811914300741f4e11838ff37a1d3a', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624677838853', 'f6817f48af4fb3af11b9e8bf182f618b', '1371830841603710977', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('1371832624686227457', 'f6817f48af4fb3af11b9e8bf182f618b', '277bfabef7d76e89b33062b16a9a5020', NULL, '2021-03-16 22:36:00', '0:0:0:0:0:0:0:1'); +INSERT INTO `sys_role_permission` VALUES ('154edd0599bd1dc2c7de220b489cd1e2', 'f6817f48af4fb3af11b9e8bf182f618b', '7ac9eb9ccbde2f7a033cd4944272bf1e', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('165acd6046a0eaf975099f46a3c898ea', 'f6817f48af4fb3af11b9e8bf182f618b', '4f66409ef3bbd69c1d80469d6e2a885e', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1664b92dff13e1575e3a929caa2fa14d', 'f6817f48af4fb3af11b9e8bf182f618b', 'd2bbf9ebca5a8fa2e227af97d2da7548', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1c1dbba68ef1817e7fb19c822d2854e8', 'f6817f48af4fb3af11b9e8bf182f618b', 'fb367426764077dcf94640c843733985', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('1e47db875601fd97723254046b5bba90', 'f6817f48af4fb3af11b9e8bf182f618b', 'baf16b7174bd821b6bab23fa9abb200d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('20e53c87a785688bdc0a5bb6de394ef1', 'f6817f48af4fb3af11b9e8bf182f618b', '540a2936940846cb98114ffb0d145cb8', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('25491ecbd5a9b34f09c8bc447a10ede1', 'f6817f48af4fb3af11b9e8bf182f618b', 'd07a2c87a451434c99ab06296727ec4f', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('2779cdea8367fff37db26a42c1a1f531', 'f6817f48af4fb3af11b9e8bf182f618b', 'fef097f3903caf3a3c3a6efa8de43fbb', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('29fb6b0ad59a7e911c8d27e0bdc42d23', 'f6817f48af4fb3af11b9e8bf182f618b', '9a90363f216a6a08f32eecb3f0bf12a3', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('2ad37346c1b83ddeebc008f6987b2227', 'f6817f48af4fb3af11b9e8bf182f618b', '8d1ebd663688965f1fd86a2f0ead3416', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('38a2e55db0960262800576e34b3af44c', 'f6817f48af4fb3af11b9e8bf182f618b', '5c2f42277948043026b7a14692456828', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('3b1886f727ac503c93fecdd06dcb9622', 'f6817f48af4fb3af11b9e8bf182f618b', 'c431130c0bc0ec71b0a5be37747bb36a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('3de2a60c7e42a521fecf6fcc5cb54978', 'f6817f48af4fb3af11b9e8bf182f618b', '2d83d62bd2544b8994c8f38cf17b0ddf', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('3e4e38f748b8d87178dd62082e5b7b60', 'f6817f48af4fb3af11b9e8bf182f618b', '7960961b0063228937da5fa8dd73d371', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('3f1d04075e3c3254666a4138106a4e51', 'f6817f48af4fb3af11b9e8bf182f618b', '3fac0d3c9cd40fa53ab70d4c583821f8', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('4204f91fb61911ba8ce40afa7c02369f', 'f6817f48af4fb3af11b9e8bf182f618b', '3f915b2769fc80648e92d04e84ca059d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('444126230885d5d38b8fa6072c9f43f8', 'f6817f48af4fb3af11b9e8bf182f618b', 'f780d0d3083d849ccbdb1b1baee4911d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('445656dd187bd8a71605f4bbab1938a3', 'f6817f48af4fb3af11b9e8bf182f618b', '020b06793e4de2eee0007f603000c769', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('455cdb482457f529b79b479a2ff74427', 'f6817f48af4fb3af11b9e8bf182f618b', 'e1979bb53e9ea51cecc74d86fd9d2f64', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('45a358bb738782d1a0edbf7485e81459', 'f6817f48af4fb3af11b9e8bf182f618b', '0ac2ad938963b6c6d1af25477d5b8b51', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('4dab5a06acc8ef3297889872caa74747', 'f6817f48af4fb3af11b9e8bf182f618b', 'ffb423d25cc59dcd0532213c4a518261', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('4e0a37ed49524df5f08fc6593aee875c', 'f6817f48af4fb3af11b9e8bf182f618b', 'f23d9bfff4d9aa6b68569ba2cff38415', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('4ea403fc1d19feb871c8bdd9f94a4ecc', 'f6817f48af4fb3af11b9e8bf182f618b', '2e42e3835c2b44ec9f7bc26c146ee531', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('4f254549d9498f06f4cc9b23f3e2c070', 'f6817f48af4fb3af11b9e8bf182f618b', '93d5cfb4448f11e9916698e7f462b4b6', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('504e326de3f03562cdd186748b48a8c7', 'f6817f48af4fb3af11b9e8bf182f618b', '027aee69baee98a0ed2e01806e89c891', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('520b5989e6fe4a302a573d4fee12a40a', 'f6817f48af4fb3af11b9e8bf182f618b', '6531cf3421b1265aeeeabaab5e176e6d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('54fdf85e52807bdb32ce450814abc256', 'f6817f48af4fb3af11b9e8bf182f618b', 'cc50656cf9ca528e6f2150eba4714ad2', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('5d230e6cd2935c4117f6cb9a7a749e39', 'f6817f48af4fb3af11b9e8bf182f618b', 'fc810a2267dd183e4ef7c71cc60f4670', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('5de6871fadb4fe1cdd28989da0126b07', 'f6817f48af4fb3af11b9e8bf182f618b', 'a400e4f4d54f79bf5ce160a3432231af', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('5e4015a9a641cbf3fb5d28d9f885d81a', 'f6817f48af4fb3af11b9e8bf182f618b', '2dbbafa22cda07fa5d169d741b81fe12', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('60eda4b4db138bdb47edbe8e10e71675', 'f6817f48af4fb3af11b9e8bf182f618b', 'fb07ca05a3e13674dbf6d3245956da2e', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('61835e48f3e675f7d3f5c9dd3a10dcf3', 'f6817f48af4fb3af11b9e8bf182f618b', 'f0675b52d89100ee88472b6800754a08', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('660fbc40bcb1044738f7cabdf1708c28', 'f6817f48af4fb3af11b9e8bf182f618b', 'b3c824fc22bd953e2eb16ae6914ac8f9', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('66b202f8f84fe766176b3f51071836ef', 'f6817f48af4fb3af11b9e8bf182f618b', '1367a93f2c410b169faa7abcbad2f77c', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('6c74518eb6bb9a353f6a6c459c77e64b', 'f6817f48af4fb3af11b9e8bf182f618b', 'b4dfc7d5dd9e8d5b6dd6d4579b1aa559', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('6daddafacd7eccb91309530c17c5855d', 'f6817f48af4fb3af11b9e8bf182f618b', 'edfa74d66e8ea63ea432c2910837b150', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('6fb4c2142498dd6d5b6c014ef985cb66', 'f6817f48af4fb3af11b9e8bf182f618b', '6e73eb3c26099c191bf03852ee1310a1', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('7413acf23b56c906aedb5a36fb75bd3a', 'f6817f48af4fb3af11b9e8bf182f618b', 'a4fc7b64b01a224da066bb16230f9c5a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('76a54a8cc609754360bf9f57e7dbb2db', 'f6817f48af4fb3af11b9e8bf182f618b', 'c65321e57b7949b7a975313220de0422', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('7ca833caa5eac837b7200d8b6de8b2e3', 'f6817f48af4fb3af11b9e8bf182f618b', 'fedfbf4420536cacc0218557d263dfea', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('84eac2f113c23737128fb099d1d1da89', 'f6817f48af4fb3af11b9e8bf182f618b', '03dc3d93261dda19fc86dd7ca486c6cf', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('86060e2867a5049d8a80d9fe5d8bc28b', 'f6817f48af4fb3af11b9e8bf182f618b', '765dd244f37b804e3d00f475fd56149b', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('884f147c20e003cc80ed5b7efa598cbe', 'f6817f48af4fb3af11b9e8bf182f618b', 'e5973686ed495c379d829ea8b2881fc6', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('8b09925bdc194ab7f3559cd3a7ea0507', 'f6817f48af4fb3af11b9e8bf182f618b', 'ebb9d82ea16ad864071158e0c449d186', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('8d154c2382a8ae5c8d1b84bd38df2a93', 'f6817f48af4fb3af11b9e8bf182f618b', 'd86f58e7ab516d3bc6bfb1fe10585f97', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('8dd64f65a1014196078d0882f767cd85', 'f6817f48af4fb3af11b9e8bf182f618b', 'e3c13679c73a4f829bcff2aba8fd68b1', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('8e3dc1671abad4f3c83883b194d2e05a', 'f6817f48af4fb3af11b9e8bf182f618b', 'b1cb0a3fedf7ed0e4653cb5a229837ee', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('905bf419332ebcb83863603b3ebe30f0', 'f6817f48af4fb3af11b9e8bf182f618b', '8fb8172747a78756c11916216b8b8066', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('9380121ca9cfee4b372194630fce150e', 'f6817f48af4fb3af11b9e8bf182f618b', '65a8f489f25a345836b7f44b1181197a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('94911fef73a590f6824105ebf9b6cab3', 'f6817f48af4fb3af11b9e8bf182f618b', '8b3bff2eee6f1939147f5c68292a1642', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('9700d20dbc1ae3cbf7de1c810b521fe6', 'f6817f48af4fb3af11b9e8bf182f618b', 'ec8d607d0156e198b11853760319c646', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('980171fda43adfe24840959b1d048d4d', 'f6817f48af4fb3af11b9e8bf182f618b', 'd7d6e2e4e2934f2c9385a623fd98c6f3', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('987c23b70873bd1d6dca52f30aafd8c2', 'f6817f48af4fb3af11b9e8bf182f618b', '00a2a0ae65cdca5e93209cdbde97cbe6', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('9b2ad767f9861e64a20b097538feafd3', 'f6817f48af4fb3af11b9e8bf182f618b', '73678f9daa45ed17a3674131b03432fb', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('9d980ec0489040e631a9c24a6af42934', 'f6817f48af4fb3af11b9e8bf182f618b', '05b3c82ddb2536a4a5ee1a4c46b5abef', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('a034ed7c38c996b880d3e78f586fe0ae', 'f6817f48af4fb3af11b9e8bf182f618b', 'c89018ea6286e852b424466fd92a2ffc', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('a307a9349ad64a2eff8ab69582fa9be4', 'f6817f48af4fb3af11b9e8bf182f618b', '0620e402857b8c5b605e1ad9f4b89350', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('a5d25fdb3c62904a8474182706ce11a0', 'f6817f48af4fb3af11b9e8bf182f618b', '418964ba087b90a84897b62474496b93', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('acacce4417e5d7f96a9c3be2ded5b4be', 'f6817f48af4fb3af11b9e8bf182f618b', 'f9d3f4f27653a71c52faa9fb8070fbe7', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ae1852fb349d8513eb3fdc173da3ee56', 'f6817f48af4fb3af11b9e8bf182f618b', '8d4683aacaa997ab86b966b464360338', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('af60ac8fafd807ed6b6b354613b9ccbc', 'f6817f48af4fb3af11b9e8bf182f618b', '58857ff846e61794c69208e9d3a85466', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('b0c8a20800b8bf1ebdd7be473bceb44f', 'f6817f48af4fb3af11b9e8bf182f618b', '58b9204feaf07e47284ddb36cd2d8468', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('b128ebe78fa5abb54a3a82c6689bdca3', 'f6817f48af4fb3af11b9e8bf182f618b', 'aedbf679b5773c1f25e9f7b10111da73', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('b21b07951bb547b09cc85624a841aea0', 'f6817f48af4fb3af11b9e8bf182f618b', '4356a1a67b564f0988a484f5531fd4d9', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('b64c4ab9cd9a2ea8ac1e9db5fb7cf522', 'f6817f48af4fb3af11b9e8bf182f618b', '2aeddae571695cd6380f6d6d334d6e7d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('bbec16ad016efec9ea2def38f4d3d9dc', 'f6817f48af4fb3af11b9e8bf182f618b', '13212d3416eb690c2e1d5033166ff47a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('bea2986432079d89203da888d99b3f16', 'f6817f48af4fb3af11b9e8bf182f618b', '54dd5457a3190740005c1bfec55b1c34', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('c56fb1658ee5f7476380786bf5905399', 'f6817f48af4fb3af11b9e8bf182f618b', 'de13e0f6328c069748de7399fcc1dbbd', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('c6fee38d293b9d0596436a0cbd205070', 'f6817f48af4fb3af11b9e8bf182f618b', '4f84f9400e5e92c95f05b554724c2b58', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('c90b0b01c7ca454d2a1cb7408563e696', 'f6817f48af4fb3af11b9e8bf182f618b', '882a73768cfd7f78f3a37584f7299656', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('cf1feb1bf69eafc982295ad6c9c8d698', 'f6817f48af4fb3af11b9e8bf182f618b', 'a2b11669e98c5fe54a53c3e3c4f35d14', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('cf2ef620217673e4042f695743294f01', 'f6817f48af4fb3af11b9e8bf182f618b', '717f6bee46f44a3897eca9abd6e2ec44', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('cf43895aef7fc684669483ab00ef2257', 'f6817f48af4fb3af11b9e8bf182f618b', '700b7f95165c46cc7a78bf227aa8fed3', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('d281a95b8f293d0fa2a136f46c4e0b10', 'f6817f48af4fb3af11b9e8bf182f618b', '5c8042bd6c601270b2bbd9b20bccc68b', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('d37ad568e26f46ed0feca227aa9c2ffa', 'f6817f48af4fb3af11b9e8bf182f618b', '9502685863ab87f0ad1134142788a385', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('d3ddcacee1acdfaa0810618b74e38ef2', 'f6817f48af4fb3af11b9e8bf182f618b', 'c6cf95444d80435eb37b2f9db3971ae6', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('d83282192a69514cfe6161b3087ff962', 'f6817f48af4fb3af11b9e8bf182f618b', '53a9230444d33de28aa11cc108fb1dba', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('d8a5c9079df12090e108e21be94b4fd7', 'f6817f48af4fb3af11b9e8bf182f618b', '078f9558cdeab239aecb2bda1a8ed0d1', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('dc83bb13c0e8c930e79d28b2db26f01f', 'f6817f48af4fb3af11b9e8bf182f618b', '63b551e81c5956d5c861593d366d8c57', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('dc8fd3f79bd85bd832608b42167a1c71', 'f6817f48af4fb3af11b9e8bf182f618b', '91c23960fab49335831cf43d820b0a61', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('de82e89b8b60a3ea99be5348f565c240', 'f6817f48af4fb3af11b9e8bf182f618b', '56ca78fe0f22d815fabc793461af67b8', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('e7467726ee72235baaeb47df04a35e73', 'f6817f48af4fb3af11b9e8bf182f618b', 'e08cb190ef230d5d4f03824198773950', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('eaef4486f1c9b0408580bbfa2037eb66', 'f6817f48af4fb3af11b9e8bf182f618b', '2a470fc0c3954d9dbb61de6d80846549', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ec4bc97829ab56afd83f428b6dc37ff6', 'f6817f48af4fb3af11b9e8bf182f618b', '200006f0edf145a2b50eacca07585451', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ec846a3f85fdb6813e515be71f11b331', 'f6817f48af4fb3af11b9e8bf182f618b', '732d48f8e0abe99fe6a23d18a3171cd1', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ec93bb06f5be4c1f19522ca78180e2ef', 'f6817f48af4fb3af11b9e8bf182f618b', '265de841c58907954b8877fb85212622', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ecdd72fe694e6bba9c1d9fc925ee79de', 'f6817f48af4fb3af11b9e8bf182f618b', '45c966826eeff4c99b8f8ebfe74511fc', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('edefd8d468f5727db465cf1b860af474', 'f6817f48af4fb3af11b9e8bf182f618b', '6ad53fd1b220989a8b71ff482d683a5a', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('ef8bdd20d29447681ec91d3603e80c7b', 'f6817f48af4fb3af11b9e8bf182f618b', 'ae4fed059f67086fd52a73d913cf473d', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('f177acac0276329dc66af0c9ad30558a', 'f6817f48af4fb3af11b9e8bf182f618b', 'c2c356bf4ddd29975347a7047a062440', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('f99f99cc3bc27220cdd4f5aced33b7d7', 'f6817f48af4fb3af11b9e8bf182f618b', '655563cd64b75dcf52ef7bcdd4836953', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('fafe73c4448b977fe42880a6750c3ee8', 'f6817f48af4fb3af11b9e8bf182f618b', '9cb91b8851db0cf7b19d7ecc2a8193dd', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('fced905c7598973b970d42d833f73474', 'f6817f48af4fb3af11b9e8bf182f618b', '4875ebe289344e14844d8e3ea1edd73f', NULL, NULL, NULL); +INSERT INTO `sys_role_permission` VALUES ('fd97963dc5f144d3aecfc7045a883427', 'f6817f48af4fb3af11b9e8bf182f618b', '043780fa095ff1b2bec4dc406d76f023', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for sys_sms +-- ---------------------------- +DROP TABLE IF EXISTS `sys_sms`; +CREATE TABLE `sys_sms` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'ID', + `es_title` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '消息标题', + `es_type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发送方式:1短信 2邮件 3微信', + `es_receiver` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '接收人', + `es_param` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '发送所需参数Json格式', + `es_content` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '推送内容', + `es_send_time` datetime(0) NULL DEFAULT NULL COMMENT '推送时间', + `es_send_status` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '推送状态 0未推送 1推送成功 2推送失败 -1失败不再发送', + `es_send_num` int(11) NULL DEFAULT NULL COMMENT '发送次数 超过5次不再发送', + `es_result` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '推送失败原因', + `remark` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index_type`(`es_type`) USING BTREE, + INDEX `index_receiver`(`es_receiver`) USING BTREE, + INDEX `index_sendtime`(`es_send_time`) USING BTREE, + INDEX `index_status`(`es_send_status`) USING BTREE, + INDEX `idx_ss_es_type`(`es_type`) USING BTREE, + INDEX `idx_ss_es_receiver`(`es_receiver`) USING BTREE, + INDEX `idx_ss_es_send_time`(`es_send_time`) USING BTREE, + INDEX `idx_ss_es_send_status`(`es_send_status`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_sms_template +-- ---------------------------- +DROP TABLE IF EXISTS `sys_sms_template`; +CREATE TABLE `sys_sms_template` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键', + `template_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模板标题', + `template_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '模板CODE', + `template_type` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '模板类型:1短信 2邮件 3微信', + `template_content` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '模板内容', + `template_test_json` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模板测试json', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_templatecode`(`template_code`) USING BTREE, + UNIQUE INDEX `uk_sst_template_code`(`template_code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '消息模板表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_sms_template +-- ---------------------------- +INSERT INTO `sys_sms_template` VALUES ('1199606397416775681', '系统消息通知-Demo', 'sys_ts_note', '4', '

    系统通知

\n
    \n
  • 通知时间:  ${ts_date}
  • \n
  • 通知内容:  ${ts_content}
  • \n
', NULL, '2019-11-27 16:30:27', 'admin', '2021-03-16 16:56:36', 'admin'); +INSERT INTO `sys_sms_template` VALUES ('1199648914107625473', '流程办理超时提醒-Demo', 'bpm_chaoshi_tip', '4', '

   流程办理超时提醒

\n
    \n
  •    超时提醒信息:    您有待处理的超时任务,请尽快处理!
  • \n
  •    超时任务标题:    ${title}
  • \n
  •    超时任务节点:    ${task}
  • \n
  •    任务处理人:       ${user}
  • \n
  •    任务开始时间:    ${time}
  • \n
', NULL, '2019-11-27 19:19:24', 'admin', '2021-03-16 16:56:20', 'admin'); +INSERT INTO `sys_sms_template` VALUES ('4028608164691b000164693108140003', '催办:${taskName}-Demo', 'SYS001', '3', '${userName},您好!\r\n请前待办任务办理事项!${taskName}\r\n\r\n\r\n===========================\r\n此消息由系统发出', '{\r\n\"taskName\":\"HR审批\",\r\n\"userName\":\"admin\"\r\n}', '2018-07-05 14:46:18', 'admin', '2021-03-16 16:57:00', 'admin'); + +-- ---------------------------- +-- Table structure for sys_third_account +-- ---------------------------- +DROP TABLE IF EXISTS `sys_third_account`; +CREATE TABLE `sys_third_account` ( + `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '编号', + `sys_user_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方登录id', + `third_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '登录来源', + `avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '状态(1-正常,2-冻结)', + `del_flag` tinyint(1) NULL DEFAULT NULL COMMENT '删除状态(0-正常,1-已删除)', + `realname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '真实姓名', + `third_user_uuid` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '第三方账号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '第三方登录账号表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user`; +CREATE TABLE `sys_user` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `username` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '登录账号', + `realname` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '真实姓名', + `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码', + `salt` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'md5密码盐', + `avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '头像', + `birthday` datetime(0) NULL DEFAULT NULL COMMENT '生日', + `sex` tinyint(1) NULL DEFAULT NULL COMMENT '性别(0-默认未知,1-男,2-女)', + `email` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电子邮件', + `phone` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话', + `org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机构编码', + `status` tinyint(1) NULL DEFAULT NULL COMMENT '性别(1-正常,2-冻结)', + `del_flag` tinyint(1) NULL DEFAULT NULL COMMENT '删除状态(0-正常,1-已删除)', + `third_id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '第三方登录的唯一标识', + `third_type` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '第三方类型', + `activiti_sync` tinyint(1) NULL DEFAULT NULL COMMENT '同步工作流引擎(1-同步,0-不同步)', + `work_no` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '工号,唯一键', + `telephone` varchar(45) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '座机号', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', + `user_identity` tinyint(1) NULL DEFAULT NULL COMMENT '身份(1普通成员 2上级)', + `depart_ids` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '负责部门', + `rel_tenant_ids` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '多租户标识', + `client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '设备ID', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `index_user_name`(`username`) USING BTREE, + UNIQUE INDEX `uniq_sys_user_work_no`(`work_no`) USING BTREE, + UNIQUE INDEX `uniq_sys_user_username`(`username`) USING BTREE, + UNIQUE INDEX `uniq_sys_user_phone`(`phone`) USING BTREE, + UNIQUE INDEX `uniq_sys_user_email`(`email`) USING BTREE, + INDEX `index_user_status`(`status`) USING BTREE, + INDEX `index_user_del_flag`(`del_flag`) USING BTREE, + INDEX `idx_su_username`(`username`) USING BTREE, + INDEX `idx_su_status`(`status`) USING BTREE, + INDEX `idx_su_del_flag`(`del_flag`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO `sys_user` VALUES ('e9ca23d68d884d4ebb19d07889727dae', 'admin', '开发管理员', 'cb362cfeefbf3d8d', 'RCGTeGiH', NULL, '2018-12-05 00:00:00', 1, 'lixuetao@syxysoft.com', '18608732661', 'A01', 1, 0, NULL, NULL, 1, '00001', NULL, NULL, '2019-06-21 17:54:10', 'admin', '2021-03-16 18:00:16', 2, 'c6d7cb4deeac411cb3384b1b31278596', '', NULL); + +-- ---------------------------- +-- Table structure for sys_user_agent +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_agent`; +CREATE TABLE `sys_user_agent` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '序号', + `user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名', + `agent_user_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '代理人用户名', + `start_time` datetime(0) NULL DEFAULT NULL COMMENT '代理开始时间', + `end_time` datetime(0) NULL DEFAULT NULL COMMENT '代理结束时间', + `status` varchar(2) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态0无效1有效', + `create_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人名称', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人名称', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `sys_org_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门', + `sys_company_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属公司', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_username`(`user_name`) USING BTREE, + UNIQUE INDEX `uk_sug_user_name`(`user_name`) USING BTREE, + INDEX `statux_index`(`status`) USING BTREE, + INDEX `begintime_index`(`start_time`) USING BTREE, + INDEX `endtime_index`(`end_time`) USING BTREE, + INDEX `idx_sug_status`(`status`) USING BTREE, + INDEX `idx_sug_start_time`(`start_time`) USING BTREE, + INDEX `idx_sug_end_time`(`end_time`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户代理人设置' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for sys_user_depart +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_depart`; +CREATE TABLE `sys_user_depart` ( + `ID` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id', + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户id', + `dep_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '部门id', + PRIMARY KEY (`ID`) USING BTREE, + INDEX `index_depart_groupk_userid`(`user_id`) USING BTREE, + INDEX `index_depart_groupkorgid`(`dep_id`) USING BTREE, + INDEX `index_depart_groupk_uidanddid`(`user_id`, `dep_id`) USING BTREE, + INDEX `idx_sud_user_id`(`user_id`) USING BTREE, + INDEX `idx_sud_dep_id`(`dep_id`) USING BTREE, + INDEX `idx_sud_user_dep_id`(`user_id`, `dep_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户部门表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_user_depart +-- ---------------------------- +INSERT INTO `sys_user_depart` VALUES ('1371763232992583682', 'e9ca23d68d884d4ebb19d07889727dae', 'c6d7cb4deeac411cb3384b1b31278596'); + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +DROP TABLE IF EXISTS `sys_user_role`; +CREATE TABLE `sys_user_role` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键id', + `user_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户id', + `role_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '角色id', + PRIMARY KEY (`id`) USING BTREE, + INDEX `index2_groupuu_user_id`(`user_id`) USING BTREE, + INDEX `index2_groupuu_ole_id`(`role_id`) USING BTREE, + INDEX `index2_groupuu_useridandroleid`(`user_id`, `role_id`) USING BTREE, + INDEX `idx_sur_user_id`(`user_id`) USING BTREE, + INDEX `idx_sur_role_id`(`role_id`) USING BTREE, + INDEX `idx_sur_user_role_id`(`user_id`, `role_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户角色表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO `sys_user_role` VALUES ('1371763232468295682', 'e9ca23d68d884d4ebb19d07889727dae', 'f6817f48af4fb3af11b9e8bf182f618b'); + +-- ---------------------------- +-- Table structure for sys_confusion +-- ---------------------------- +DROP TABLE IF EXISTS `sys_confusion`; +CREATE TABLE `sys_confusion` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime NULL DEFAULT NULL COMMENT '更新日期', + `sys_org_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属部门', + `table_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '表名', + `field_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '字段名', + `confusion_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '混淆code', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '混淆表' ROW_FORMAT = Dynamic; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/db/jeroboot-oracle11g.sql b/db/jeroboot-oracle11g.sql new file mode 100644 index 00000000..e70d5ed1 --- /dev/null +++ b/db/jeroboot-oracle11g.sql @@ -0,0 +1,4338 @@ +/* +Navicat Oracle Data Transfer +Oracle Client Version : 10.2.0.5.0 + +Source Server : jero-boot +Source Server Version : 110200 +Source Host : 121.36.69.172:1521 +Source Schema : JERO-BOOT + +Target Server Type : ORACLE +Target Server Version : 110200 +File Encoding : 65001 + +Date: 2021-03-19 14:36:25 +*/ + + +-- ---------------------------- +-- Table structure for DEMO +-- ---------------------------- +DROP TABLE "DEMO"; +CREATE TABLE "DEMO" ( +"ID" NVARCHAR2(50) NOT NULL , +"NAME" NVARCHAR2(30) NULL , +"KEY_WORD" NVARCHAR2(255) NULL , +"PUNCH_TIME" DATE NULL , +"SALARY_MONEY" NUMBER NULL , +"BONUS_MONEY" NUMBER(10,2) NULL , +"SEX" NVARCHAR2(2) NULL , +"AGE" NUMBER(11) NULL , +"BIRTHDAY" DATE NULL , +"EMAIL" NVARCHAR2(50) NULL , +"CONTENT" NVARCHAR2(1000) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"SYS_ORG_CODE" NVARCHAR2(64) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "DEMO"."ID" IS '主键ID'; +COMMENT ON COLUMN "DEMO"."NAME" IS '姓名'; +COMMENT ON COLUMN "DEMO"."KEY_WORD" IS '关键词'; +COMMENT ON COLUMN "DEMO"."PUNCH_TIME" IS '打卡时间'; +COMMENT ON COLUMN "DEMO"."SALARY_MONEY" IS '工资'; +COMMENT ON COLUMN "DEMO"."BONUS_MONEY" IS '奖金'; +COMMENT ON COLUMN "DEMO"."SEX" IS '性别 {男:1,女:2}'; +COMMENT ON COLUMN "DEMO"."AGE" IS '年龄'; +COMMENT ON COLUMN "DEMO"."BIRTHDAY" IS '生日'; +COMMENT ON COLUMN "DEMO"."EMAIL" IS '邮箱'; +COMMENT ON COLUMN "DEMO"."CONTENT" IS '个人简介'; +COMMENT ON COLUMN "DEMO"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "DEMO"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "DEMO"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "DEMO"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "DEMO"."SYS_ORG_CODE" IS '所属部门编码'; + +-- ---------------------------- +-- Records of DEMO +-- ---------------------------- +INSERT INTO "DEMO" VALUES ('1353563050407936002', '小红帽', null, TO_DATE('2021-01-26 12:39:04', 'YYYY-MM-DD HH24:MI:SS'), null, null, '2', '22', TO_DATE('2021-01-25 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'admin', TO_DATE('2021-01-25 12:39:14', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'A01'); +INSERT INTO "DEMO" VALUES ('1dc29e80be14d1400f165b5c6b30c707', 'zhang daihao', null, null, null, null, '2', null, null, 'zhangdaiscott@163.com', null, null, null, null, null, null); +INSERT INTO "DEMO" VALUES ('304e651dc769d5c9b6e08fb30457a602', '小白兔', null, null, null, null, '2', '28', null, null, null, 'scott', TO_DATE('2019-01-19 13:12:53', 'YYYY-MM-DD HH24:MI:SS'), 'qinfeng', TO_DATE('2019-01-19 13:13:12', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "DEMO" VALUES ('4', 'Sandy', '开源,很好', TO_DATE('2018-12-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, '2', '21', TO_DATE('2018-12-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'test4@baomidou.com', '聪明00', null, null, 'admin', TO_DATE('2019-02-25 16:29:27', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "DEMO" VALUES ('4981637bf71b0c1ed1365241dfcfa0ea', '小虎', null, null, null, null, '2', '28', null, null, null, 'scott5', TO_DATE('2019-01-19 13:12:53', 'YYYY-MM-DD HH24:MI:SS'), 'qinfeng', TO_DATE('2019-01-19 13:13:12', 'YYYY-MM-DD HH24:MI:SS'), 'A02'); +INSERT INTO "DEMO" VALUES ('7', 'zhangdaiscott', null, null, null, null, '1', null, TO_DATE('2019-01-03 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, null, null, null, 'A02A01A01'); +INSERT INTO "DEMO" VALUES ('73bc58611012617ca446d8999379e4ac', '郭靖', '777', TO_DATE('2018-12-07 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, '1', null, null, null, null, 'jero-boot', TO_DATE('2019-03-28 18:16:39', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-02 18:14:14', 'YYYY-MM-DD HH24:MI:SS'), 'A02A01A02'); +INSERT INTO "DEMO" VALUES ('917e240eaa0b1b2d198ae869b64a81c3', 'zhang daihao', null, null, null, null, '2', '0', TO_DATE('2018-11-29 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'zhangdaiscott@163.com', null, null, null, null, null, 'A02'); +INSERT INTO "DEMO" VALUES ('94420c5d8fc4420dde1e7196154b3a24', '秦风', null, null, null, null, '2', null, null, null, null, 'scott', TO_DATE('2019-01-19 12:54:58', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-02 18:14:33', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "DEMO" VALUES ('b86897900c770503771c7bb88e5d1e9b', 'scott1', '开源、很好、hello', null, null, null, '1', null, null, 'zhangdaiscott@163.com', null, 'scott', TO_DATE('2019-01-19 12:22:34', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "DEMO" VALUES ('c28fa8391ef81d6fabd8bd894a7615aa', '小麦', null, null, null, null, '2', null, null, 'zhangdaiscott@163.com', null, 'jero-boot', TO_DATE('2019-04-04 17:18:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "DEMO" VALUES ('c2c0d49e3c01913067cf8d1fb3c971d2', 'zhang daihao', null, null, null, null, '2', null, null, 'zhangdaiscott@163.com', null, 'admin', TO_DATE('2019-01-19 23:37:18', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-01-21 16:49:06', 'YYYY-MM-DD HH24:MI:SS'), null); +INSERT INTO "DEMO" VALUES ('c96279c666b4b82e3ef1e4e2978701ce', '报名时间', null, null, null, null, null, null, null, null, null, 'jero-boot', TO_DATE('2019-03-28 18:00:52', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "DEMO" VALUES ('d24668721446e8478eeeafe4db66dcff', 'zhang daihao999', null, null, null, null, '1', null, null, 'zhangdaiscott@163.com', null, null, null, null, null, null); +INSERT INTO "DEMO" VALUES ('eaa6c1116b41dc10a94eae34cf990133', 'zhang daihao', null, null, null, null, null, null, null, 'zhangdaiscott@163.com', null, null, null, null, null, null); + +-- ---------------------------- +-- Table structure for JERO_ORDER_CUSTOMER +-- ---------------------------- +DROP TABLE "JERO_ORDER_CUSTOMER"; +CREATE TABLE "JERO_ORDER_CUSTOMER" ( +"ID" NVARCHAR2(32) NOT NULL , +"NAME" NVARCHAR2(100) NOT NULL , +"SEX" NVARCHAR2(4) NULL , +"IDCARD" NVARCHAR2(18) NULL , +"IDCARD_PIC" NVARCHAR2(500) NULL , +"TELPHONE" NVARCHAR2(32) NULL , +"ORDER_ID" NVARCHAR2(32) NOT NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."ID" IS '主键'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."NAME" IS '客户名'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."SEX" IS '性别'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."IDCARD" IS '身份证号码'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."IDCARD_PIC" IS '身份证扫描件'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."TELPHONE" IS '电话1'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."ORDER_ID" IS '外键'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "JERO_ORDER_CUSTOMER"."UPDATE_TIME" IS '修改时间'; + +-- ---------------------------- +-- Records of JERO_ORDER_CUSTOMER +-- ---------------------------- +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('1256527640480821249', 'scott', '2', null, null, null, 'b190737bd04cca8360e6f87c9ef9ec4e', 'admin', TO_DATE('2020-05-02 18:15:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('1256527640531152898', 'x秦风', '1', null, null, null, 'b190737bd04cca8360e6f87c9ef9ec4e', 'admin', TO_DATE('2020-05-02 18:15:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('1256527874216800257', '小王1', '1', null, null, null, '9a57c850e4f68cf94ef7d8585dbaf7e6', 'admin', TO_DATE('2020-05-02 18:17:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('15538561502720', '3333', '1', null, null, null, '0d4a2e67b538ee1bc881e5ed34f670f0', 'jero-boot', TO_DATE('2019-03-29 18:42:55', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('15538561512681', '3332333', '2', null, null, null, '0d4a2e67b538ee1bc881e5ed34f670f0', 'jero-boot', TO_DATE('2019-03-29 18:42:55', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-29 18:43:12', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('15538561550142', '4442', '2', null, null, null, '0d4a2e67b538ee1bc881e5ed34f670f0', 'jero-boot', TO_DATE('2019-03-29 18:42:55', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('15541168497342', '444', null, null, null, null, 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('15541168499553', '5555', null, null, null, null, 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('18dc5eb1068ccdfe90e358951ca1a3d6', 'dr2', null, null, null, null, '8ab1186410a65118c4d746eb085d3bed', 'admin', TO_DATE('2019-04-04 17:25:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('195d280490fe88ca1475512ddcaf2af9', '12', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('217a2bf83709775d2cd85bf598392327', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('22bc052ae53ed09913b946abba93fa89', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('23bafeae88126c3bf3322a29a04f0d5e', 'x秦风', null, null, null, null, '163e2efcbc6d7d54eb3f8a137da8a75a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('25c4a552c6843f36fad6303bfa99a382', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('2d32144e2bee63264f3f16215c258381', '33333', '2', null, null, null, 'd908bfee3377e946e59220c4a4eb414a', 'admin', TO_DATE('2019-04-01 16:27:03', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('2d43170d6327f941bd1a017999495e25', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('2e5f62a8b6e0a0ce19b52a6feae23d48', '3', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('34a1c5cf6cee360ed610ed0bed70e0f9', '导入秦风', null, null, null, null, 'a2cce75872cc8fcc47f78de9ffd378c2', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('3c87400f8109b4cf43c5598f0d40e34d', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('40964bcbbecb38e5ac15e6d08cf3cd43', '233', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('41e3dee0b0b6e6530eccb7fbb22fd7a3', '4555', '1', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('4808ae8344c7679a4a2f461db5dc3a70', '44', '1', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('4b6cef12f195fad94d57279b2241770d', 'dr12', null, null, null, null, '8ab1186410a65118c4d746eb085d3bed', 'admin', TO_DATE('2019-04-04 17:25:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('524e695283f8e8c256cc24f39d6d8542', '小王', '2', '370285198604033222', null, '18611788674', 'eb13ab35d2946a2b0cfe3452bca1e73f', 'admin', TO_DATE('2019-02-25 16:29:41', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('57c2a8367db34016114cbc9fa368dba0', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('5df36a1608b8c7ac99ad9bc408fe54bf', '4', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('6c6fd2716c2dcd044ed03c2c95d261f8', '李四', '2', '370285198602058833', null, '18611788676', 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('742d008214dee0afff2145555692973e', '秦风', '1', '370285198602058822', null, '18611788676', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('7469c3e5d371767ff90a739d297689b5', '导入秦风', '2', null, null, null, '3a867ebf2cebce9bae3f79676d8d86f3', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-08 17:35:02', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('7a96e2c7b24847d4a29940dbc0eda6e5', 'drscott', null, null, null, null, 'e73434dad84ebdce2d4e0c2a2f06d8ea', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('7f5a40818e225ee18bda6da7932ac5f9', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('8011575abfd7c8085e71ff66df1124b9', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('8404f31d7196221a573c9bd6c8f15003', '小张', '1', '370285198602058211', null, '18611788676', 'eb13ab35d2946a2b0cfe3452bca1e73f', 'admin', TO_DATE('2019-02-25 16:29:41', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('859020e10a2f721f201cdbff78cf7b9f', 'scott', null, null, null, null, '163e2efcbc6d7d54eb3f8a137da8a75a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('8cc3c4d26e3060975df3a2adb781eeb4', 'dr33', null, null, null, null, 'b2feb454e43c46b2038768899061e464', 'jero-boot', TO_DATE('2019-04-04 17:23:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('8d1725c23a6a50685ff0dedfd437030d', '4', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('933cae3a79f60a93922d59aace5346ce', '小王', null, '370285198604033222', null, '18611788674', '6a719071a29927a14f19482f8693d69a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('9bdb5400b709ba4eaf3444de475880d7', 'dr22', null, null, null, null, '22c17790dcd04b296c4a2a089f71895f', 'jero-boot', TO_DATE('2019-04-04 17:23:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('9f87677f70e5f864679314389443a3eb', '33', '2', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('a2c2b7101f75c02deb328ba777137897', '44', '2', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('ab4d002dc552c326147e318c87d3bed4', '小红1', '1', '370285198604033222', null, '18611755848', '9a57c850e4f68cf94ef7d8585dbaf7e6', 'admin', TO_DATE('2020-05-02 18:17:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('ad116f722a438e5f23095a0b5fcc8e89', 'dr秦风', null, null, null, null, 'e73434dad84ebdce2d4e0c2a2f06d8ea', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('b1ba147b75f5eaa48212586097fc3fd1', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('b43bf432c251f0e6b206e403b8ec29bc', 'lisi', null, null, null, null, 'f8889aaef6d1bccffd98d2889c0aafb5', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('bcdd300a7d44c45a66bdaac14903c801', '33', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('beb983293e47e2dc1a9b3d649aa3eb34', 'ddd3', null, null, null, null, 'd908bfee3377e946e59220c4a4eb414a', 'admin', TO_DATE('2019-04-01 16:27:03', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('c219808196406f1b8c7f1062589de4b5', '44', '1', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('c8ed061d4b27c0c7a64e100f2b1c8ab5', '张经理', '2', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('cc5de4af7f06cd6d250965ebe92a0395', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('cf8817bd703bf7c7c77a2118edc26cc7', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('d72b26fae42e71270fce2097a88da58a', '导入scott', null, 'www', null, null, '3a867ebf2cebce9bae3f79676d8d86f3', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-08 17:35:05', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('dbdc60a6ac1a8c43f24afee384039b68', 'xiaowang', null, null, null, null, 'f8889aaef6d1bccffd98d2889c0aafb5', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('dc5883b50466de94d900919ed96d97af', '33', '1', '370285198602058823', null, '18611788674', '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('deeb73e553ad8dc0a0b3cfd5a338de8e', '3333', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('e2570278bf189ac05df3673231326f47', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('e39cb23bb950b2bdedfc284686c6128a', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('e46fe9111a9100844af582a18a2aa402', '1', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('ee7af0acb9beb9bf8d8b3819a8a7fdc3', '2', null, null, null, null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('f5d2605e844192d9e548f9bd240ac908', '小张', null, '370285198602058211', null, '18611788676', '6a719071a29927a14f19482f8693d69a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_CUSTOMER" VALUES ('f6db6547382126613a3e46e7cd58a5f2', '导入scott', null, null, null, null, 'a2cce75872cc8fcc47f78de9ffd378c2', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); + +-- ---------------------------- +-- Table structure for JERO_ORDER_MAIN +-- ---------------------------- +DROP TABLE "JERO_ORDER_MAIN"; +CREATE TABLE "JERO_ORDER_MAIN" ( +"ID" NVARCHAR2(32) NOT NULL , +"ORDER_CODE" NVARCHAR2(50) NULL , +"CTYPE" NVARCHAR2(500) NULL , +"ORDER_DATE" DATE NULL , +"ORDER_MONEY" NUMBER(10,3) NULL , +"CONTENT" NVARCHAR2(500) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."ID" IS '主键'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."ORDER_CODE" IS '订单号'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."CTYPE" IS '订单类型'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."ORDER_DATE" IS '订单日期'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."ORDER_MONEY" IS '订单金额'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."CONTENT" IS '订单备注'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "JERO_ORDER_MAIN"."UPDATE_TIME" IS '修改时间'; + +-- ---------------------------- +-- Records of JERO_ORDER_MAIN +-- ---------------------------- +INSERT INTO "JERO_ORDER_MAIN" VALUES ('163e2efcbc6d7d54eb3f8a137da8a75a', 'B100', null, null, '3000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('3a867ebf2cebce9bae3f79676d8d86f3', '导入B100', '2222', null, '3000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-08 17:35:13', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('4cba137333127e8e31df7ad168cc3732', '青岛订单A0001', '2', TO_DATE('2019-04-03 10:56:07', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'admin', TO_DATE('2019-04-03 10:56:11', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('54e739bef5b67569c963c38da52581ec', 'NC911', '1', TO_DATE('2019-02-18 09:58:51', 'YYYY-MM-DD HH24:MI:SS'), '40', null, 'admin', TO_DATE('2019-02-18 09:58:47', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-18 09:58:59', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('6a719071a29927a14f19482f8693d69a', 'c100', null, null, '5000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('8ab1186410a65118c4d746eb085d3bed', '导入400', '1', TO_DATE('2019-02-18 09:58:51', 'YYYY-MM-DD HH24:MI:SS'), '40', null, 'admin', TO_DATE('2019-02-18 09:58:47', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-18 09:58:59', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('9a57c850e4f68cf94ef7d8585dbaf7e6', 'halou001', '1', TO_DATE('2019-04-04 17:30:32', 'YYYY-MM-DD HH24:MI:SS'), '500', null, 'admin', TO_DATE('2019-04-04 17:30:41', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-02 18:17:36', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('a2cce75872cc8fcc47f78de9ffd378c2', '导入B100', null, null, '3000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('b190737bd04cca8360e6f87c9ef9ec4e', 'B0018888', '1', null, null, null, 'admin', TO_DATE('2019-02-15 18:39:29', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-02 18:15:09', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('d908bfee3377e946e59220c4a4eb414a', 'SSSS001', null, null, '599', null, 'admin', TO_DATE('2019-04-01 15:43:03', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 16:26:52', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('e73434dad84ebdce2d4e0c2a2f06d8ea', '导入200', null, null, '3000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('eb13ab35d2946a2b0cfe3452bca1e73f', 'BJ9980', '1', null, '90', null, 'admin', TO_DATE('2019-02-16 17:36:42', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-16 17:46:16', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('f71f7f8930b5b6b1703d9948d189982b', 'BY911', null, TO_DATE('2019-04-06 19:08:39', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'admin', TO_DATE('2019-04-01 16:36:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 16:36:08', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_MAIN" VALUES ('f8889aaef6d1bccffd98d2889c0aafb5', 'A100', null, TO_DATE('2018-10-10 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '6000', null, 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); + +-- ---------------------------- +-- Table structure for JERO_ORDER_TICKET +-- ---------------------------- +DROP TABLE "JERO_ORDER_TICKET"; +CREATE TABLE "JERO_ORDER_TICKET" ( +"ID" NVARCHAR2(32) NOT NULL , +"TICKET_CODE" NVARCHAR2(100) NOT NULL , +"TICKECT_DATE" DATE NULL , +"ORDER_ID" NVARCHAR2(32) NOT NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."ID" IS '主键'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."TICKET_CODE" IS '航班号'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."TICKECT_DATE" IS '航班时间'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."ORDER_ID" IS '外键'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "JERO_ORDER_TICKET"."UPDATE_TIME" IS '修改时间'; + +-- ---------------------------- +-- Records of JERO_ORDER_TICKET +-- ---------------------------- +INSERT INTO "JERO_ORDER_TICKET" VALUES ('0f0e3a40a215958f807eea08a6e1ac0a', '88', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('0fa3bd0bbcf53650c0bb3c0cac6d8cb7', 'ffff', TO_DATE('2019-02-21 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'eb13ab35d2946a2b0cfe3452bca1e73f', 'admin', TO_DATE('2019-02-25 16:29:41', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('1256527640543735810', '222', TO_DATE('2019-02-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'b190737bd04cca8360e6f87c9ef9ec4e', 'admin', TO_DATE('2020-05-02 18:15:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('1256527640560513025', '111', TO_DATE('2019-02-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'b190737bd04cca8360e6f87c9ef9ec4e', 'admin', TO_DATE('2020-05-02 18:15:09', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('14221afb4f5f749c1deef26ac56fdac3', '33', TO_DATE('2019-03-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('15538561502730', '222', null, '0d4a2e67b538ee1bc881e5ed34f670f0', 'jero-boot', TO_DATE('2019-03-29 18:42:55', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('15538561526461', '2244', TO_DATE('2019-03-29 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '0d4a2e67b538ee1bc881e5ed34f670f0', 'jero-boot', TO_DATE('2019-03-29 18:42:55', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-29 18:43:26', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('15541168478913', 'hhhhh', null, 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('18905bc89ee3851805aab38ed3b505ec', '44', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('1f809cbd26f4e574697e1c10de575d72', 'A100', null, 'e73434dad84ebdce2d4e0c2a2f06d8ea', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('21051adb51529bdaa8798b5a3dd7f7f7', 'C10029', TO_DATE('2019-02-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('269576e766b917f8b6509a2bb0c4d4bd', 'A100', null, '163e2efcbc6d7d54eb3f8a137da8a75a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('2d473ffc79e5b38a17919e15f8b7078e', '66', TO_DATE('2019-03-29 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('3655b66fca5fef9c6aac6d70182ffda2', 'AA123', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'd908bfee3377e946e59220c4a4eb414a', 'admin', TO_DATE('2019-04-01 16:27:03', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('365d5919155473ade45840fd626c51a9', 'dddd', TO_DATE('2019-04-04 17:25:29', 'YYYY-MM-DD HH24:MI:SS'), '8ab1186410a65118c4d746eb085d3bed', 'admin', TO_DATE('2019-04-04 17:25:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('4889a782e78706ab4306a925cfb163a5', 'C34', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'd908bfee3377e946e59220c4a4eb414a', 'admin', TO_DATE('2019-04-01 16:35:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 16:35:07', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('48d385796382cf87fa4bdf13b42d9a28', '导入A100', null, '3a867ebf2cebce9bae3f79676d8d86f3', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('541faed56efbeb4be9df581bd8264d3a', '88', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('57a27a7dfd6a48e7d981f300c181b355', '6', TO_DATE('2019-03-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('5ce4dc439c874266e42e6c0ff8dc8b5c', '导入A100', null, 'a2cce75872cc8fcc47f78de9ffd378c2', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('645a06152998a576c051474157625c41', '88', TO_DATE('2019-04-04 17:25:31', 'YYYY-MM-DD HH24:MI:SS'), '8ab1186410a65118c4d746eb085d3bed', 'admin', TO_DATE('2019-04-04 17:25:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('6e3562f2571ea9e96b2d24497b5f5eec', '55', TO_DATE('2019-03-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('8fd2b389151568738b1cc4d8e27a6110', '导入A100', null, 'a2cce75872cc8fcc47f78de9ffd378c2', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('93f1a84053e546f59137432ff5564cac', '55', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('969ddc5d2e198d50903686917f996470', 'A10029', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('96e7303a8d22a5c384e08d7bcf7ac2bf', 'A100', null, 'e73434dad84ebdce2d4e0c2a2f06d8ea', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('9e8a3336f6c63f558f2b68ce2e1e666e', '深圳1001', TO_DATE('2020-05-02 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '9a57c850e4f68cf94ef7d8585dbaf7e6', 'admin', TO_DATE('2020-05-02 18:17:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('a28db02c810c65660015095cb81ed434', 'A100', null, 'f8889aaef6d1bccffd98d2889c0aafb5', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('b217bb0e4ec6a45b6cbf6db880060c0f', 'A100', null, '6a719071a29927a14f19482f8693d69a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('ba708df70bb2652ed1051a394cfa0bb3', '333', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('beabbfcb195d39bedeeafe8318794562', 'A1345', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'd908bfee3377e946e59220c4a4eb414a', 'admin', TO_DATE('2019-04-01 16:27:04', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('bf450223cb505f89078a311ef7b6ed16', '777', TO_DATE('2019-03-30 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c06165b6603e3e1335db187b3c841eef', '北京2001', TO_DATE('2020-05-23 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '9a57c850e4f68cf94ef7d8585dbaf7e6', 'admin', TO_DATE('2020-05-02 18:17:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c113136abc26ace3a6da4e41d7dc1c7e', '44', TO_DATE('2019-03-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c1abdc2e30aeb25de13ad6ee3488ac24', '77', TO_DATE('2019-03-22 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c23751a7deb44f553ce50a94948c042a', '33', TO_DATE('2019-03-09 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '8ab1186410a65118c4d746eb085d3bed', 'admin', TO_DATE('2019-04-04 17:25:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c64547666b634b3d6a0feedcf05f25ce', 'C10019', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'f71f7f8930b5b6b1703d9948d189982b', 'admin', TO_DATE('2019-04-01 19:08:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('c8b8d3217f37da78dddf711a1f7da485', 'A100', null, '163e2efcbc6d7d54eb3f8a137da8a75a', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('cab691c1c1ff7a6dfd7248421917fd3c', 'A100', null, 'f8889aaef6d1bccffd98d2889c0aafb5', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('cca10a9a850b456d9b72be87da7b0883', '77', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('d2fbba11f4814d9b1d3cb1a3f342234a', 'C10019', TO_DATE('2019-02-18 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('dbdb07a16826808e4276e84b2aa4731a', '导入A100', null, '3a867ebf2cebce9bae3f79676d8d86f3', 'jero-boot', TO_DATE('2019-03-29 18:43:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('e7075639c37513afc0bbc4bf7b5d98b9', '88', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('fa759dc104d0371f8aa28665b323dab6', '888', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "JERO_ORDER_TICKET" VALUES ('ff197da84a9a3af53878eddc91afbb2e', '33', null, '54e739bef5b67569c963c38da52581ec', 'admin', TO_DATE('2019-03-15 16:50:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); + +-- ---------------------------- +-- Table structure for JOA_DEMO +-- ---------------------------- +DROP TABLE "JOA_DEMO"; +CREATE TABLE "JOA_DEMO" ( +"ID" NVARCHAR2(32) NULL , +"NAME" NVARCHAR2(100) NULL , +"DAYS" NUMBER(11) NULL , +"BEGIN_DATE" DATE NULL , +"END_DATE" DATE NULL , +"REASON" NVARCHAR2(500) NULL , +"BPM_STATUS" NVARCHAR2(50) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "JOA_DEMO" IS '流程测试'; +COMMENT ON COLUMN "JOA_DEMO"."ID" IS 'ID'; +COMMENT ON COLUMN "JOA_DEMO"."NAME" IS '请假人'; +COMMENT ON COLUMN "JOA_DEMO"."DAYS" IS '请假天数'; +COMMENT ON COLUMN "JOA_DEMO"."BEGIN_DATE" IS '开始时间'; +COMMENT ON COLUMN "JOA_DEMO"."END_DATE" IS '请假结束时间'; +COMMENT ON COLUMN "JOA_DEMO"."REASON" IS '请假原因'; +COMMENT ON COLUMN "JOA_DEMO"."BPM_STATUS" IS '流程状态'; +COMMENT ON COLUMN "JOA_DEMO"."CREATE_BY" IS '创建人id'; +COMMENT ON COLUMN "JOA_DEMO"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "JOA_DEMO"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "JOA_DEMO"."UPDATE_BY" IS '修改人id'; + +-- ---------------------------- +-- Records of JOA_DEMO +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_AUTH_DATA +-- ---------------------------- +DROP TABLE "ONL_AUTH_DATA"; +CREATE TABLE "ONL_AUTH_DATA" ( +"ID" NVARCHAR2(32) NOT NULL , +"CGFORM_ID" NVARCHAR2(32) NULL , +"RULE_NAME" NVARCHAR2(50) NULL , +"RULE_COLUMN" NVARCHAR2(50) NULL , +"RULE_OPERATOR" NVARCHAR2(50) NULL , +"RULE_VALUE" NVARCHAR2(255) NULL , +"STATUS" NUMBER(11) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_AUTH_DATA"."ID" IS '主键'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."CGFORM_ID" IS 'online表ID'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."RULE_NAME" IS '规则名'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."RULE_COLUMN" IS '规则列'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."RULE_OPERATOR" IS '规则条件 大于小于like'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."RULE_VALUE" IS '规则值'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."STATUS" IS '1有效 0无效'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "ONL_AUTH_DATA"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of ONL_AUTH_DATA +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_AUTH_PAGE +-- ---------------------------- +DROP TABLE "ONL_AUTH_PAGE"; +CREATE TABLE "ONL_AUTH_PAGE" ( +"ID" NVARCHAR2(32) NOT NULL , +"CGFORM_ID" NVARCHAR2(32) NULL , +"CODE" NVARCHAR2(255) NULL , +"TYPE" NUMBER(11) NULL , +"CONTROL" NUMBER(11) NULL , +"PAGE" NUMBER(11) NULL , +"STATUS" NUMBER(11) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."ID" IS ' 主键'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."CGFORM_ID" IS 'online表id'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."CODE" IS '字段名/按钮编码'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."TYPE" IS '1字段 2按钮'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."CONTROL" IS '3可编辑 5可见(仅支持两种状态值3,5)'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."PAGE" IS '3列表 5表单(仅支持两种状态值3,5)'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."STATUS" IS '1有效 0无效'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "ONL_AUTH_PAGE"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of ONL_AUTH_PAGE +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_AUTH_RELATION +-- ---------------------------- +DROP TABLE "ONL_AUTH_RELATION"; +CREATE TABLE "ONL_AUTH_RELATION" ( +"ID" NVARCHAR2(32) NOT NULL , +"ROLE_ID" NVARCHAR2(32) NULL , +"AUTH_ID" NVARCHAR2(32) NULL , +"TYPE" NUMBER(11) NULL , +"CGFORM_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_AUTH_RELATION"."ROLE_ID" IS '角色id'; +COMMENT ON COLUMN "ONL_AUTH_RELATION"."AUTH_ID" IS '权限id'; +COMMENT ON COLUMN "ONL_AUTH_RELATION"."TYPE" IS '1字段 2按钮 3数据权限'; +COMMENT ON COLUMN "ONL_AUTH_RELATION"."CGFORM_ID" IS 'online表单ID'; + +-- ---------------------------- +-- Records of ONL_AUTH_RELATION +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_CGFORM_BUTTON +-- ---------------------------- +DROP TABLE "ONL_CGFORM_BUTTON"; +CREATE TABLE "ONL_CGFORM_BUTTON" ( +"ID" NVARCHAR2(32) NOT NULL , +"BUTTON_CODE" NVARCHAR2(50) NULL , +"BUTTON_ICON" NVARCHAR2(20) NULL , +"BUTTON_NAME" NVARCHAR2(50) NULL , +"BUTTON_STATUS" NVARCHAR2(2) NULL , +"BUTTON_STYLE" NVARCHAR2(20) NULL , +"EXP" NVARCHAR2(255) NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NULL , +"OPT_TYPE" NVARCHAR2(20) NULL , +"ORDER_NUM" NUMBER(11) NULL , +"OPT_POSITION" NVARCHAR2(3) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "ONL_CGFORM_BUTTON" IS 'Online表单自定义按钮'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."ID" IS '主键ID'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."BUTTON_CODE" IS '按钮编码'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."BUTTON_ICON" IS '按钮图标'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."BUTTON_NAME" IS '按钮名称'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."BUTTON_STATUS" IS '按钮状态'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."BUTTON_STYLE" IS '按钮样式'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."EXP" IS '表达式'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."CGFORM_HEAD_ID" IS '表单ID'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."OPT_TYPE" IS '按钮类型'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."ORDER_NUM" IS '排序'; +COMMENT ON COLUMN "ONL_CGFORM_BUTTON"."OPT_POSITION" IS '按钮位置1侧面 2底部'; + +-- ---------------------------- +-- Records of ONL_CGFORM_BUTTON +-- ---------------------------- +INSERT INTO "ONL_CGFORM_BUTTON" VALUES ('cc1d12de57a1a41d3986ed6d13e3ac11', '链接按钮测试', 'icon-edit', '自定义link', '1', 'link', null, '55103a50b7144fae83997e1cf421f36c', 'js', null, '2'); +INSERT INTO "ONL_CGFORM_BUTTON" VALUES ('ebcc48ef0bde4433a6faf940a5e170c1', 'button按钮测试', 'icon-edit', '自定义button', '1', 'button', null, '55103a50b7144fae83997e1cf421f36c', 'js', null, '2'); + +-- ---------------------------- +-- Table structure for ONL_CGFORM_ENHANCE_JAVA +-- ---------------------------- +DROP TABLE "ONL_CGFORM_ENHANCE_JAVA"; +CREATE TABLE "ONL_CGFORM_ENHANCE_JAVA" ( +"ID" NVARCHAR2(36) NOT NULL , +"BUTTON_CODE" NVARCHAR2(32) NULL , +"CG_JAVA_TYPE" NVARCHAR2(32) NOT NULL , +"CG_JAVA_VALUE" NVARCHAR2(200) NOT NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NOT NULL , +"ACTIVE_STATUS" NVARCHAR2(2) NULL , +"EVENT" NVARCHAR2(10) NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."BUTTON_CODE" IS '按钮编码'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."CG_JAVA_TYPE" IS '类型'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."CG_JAVA_VALUE" IS '数值'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."CGFORM_HEAD_ID" IS '表单ID'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."ACTIVE_STATUS" IS '生效状态'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JAVA"."EVENT" IS '事件状态(end:结束,start:开始)'; + +-- ---------------------------- +-- Records of ONL_CGFORM_ENHANCE_JAVA +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_CGFORM_ENHANCE_JS +-- ---------------------------- +DROP TABLE "ONL_CGFORM_ENHANCE_JS"; +CREATE TABLE "ONL_CGFORM_ENHANCE_JS" ( +"ID" NVARCHAR2(32) NOT NULL , +"CG_JS" NCLOB NULL , +"CG_JS_TYPE" NVARCHAR2(20) NULL , +"CONTENT" NVARCHAR2(1000) NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JS"."ID" IS '主键ID'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JS"."CG_JS" IS 'JS增强内容'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JS"."CG_JS_TYPE" IS '类型'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JS"."CONTENT" IS '备注'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_JS"."CGFORM_HEAD_ID" IS '表单ID'; + +-- ---------------------------- +-- Records of ONL_CGFORM_ENHANCE_JS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_CGFORM_ENHANCE_SQL +-- ---------------------------- +DROP TABLE "ONL_CGFORM_ENHANCE_SQL"; +CREATE TABLE "ONL_CGFORM_ENHANCE_SQL" ( +"ID" NVARCHAR2(32) NOT NULL , +"BUTTON_CODE" NVARCHAR2(50) NULL , +"CGB_SQL" NCLOB NULL , +"CGB_SQL_NAME" NVARCHAR2(50) NULL , +"CONTENT" NVARCHAR2(1000) NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."ID" IS '主键ID'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."BUTTON_CODE" IS '按钮编码'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."CGB_SQL" IS 'SQL内容'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."CGB_SQL_NAME" IS 'Sql名称'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."CONTENT" IS '备注'; +COMMENT ON COLUMN "ONL_CGFORM_ENHANCE_SQL"."CGFORM_HEAD_ID" IS '表单ID'; + +-- ---------------------------- +-- Records of ONL_CGFORM_ENHANCE_SQL +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_CGFORM_FIELD +-- ---------------------------- +DROP TABLE "ONL_CGFORM_FIELD"; +CREATE TABLE "ONL_CGFORM_FIELD" ( +"ID" NVARCHAR2(32) NOT NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NOT NULL , +"DB_FIELD_NAME" NVARCHAR2(32) NOT NULL , +"DB_FIELD_TXT" NVARCHAR2(200) NULL , +"DB_FIELD_NAME_OLD" NVARCHAR2(32) NULL , +"DB_IS_KEY" NUMBER(4) NULL , +"DB_IS_NULL" NUMBER(4) NULL , +"DB_TYPE" NVARCHAR2(32) NOT NULL , +"DB_LENGTH" NUMBER(11) NOT NULL , +"DB_POINT_LENGTH" NUMBER(11) NULL , +"DB_DEFAULT_VAL" NVARCHAR2(20) NULL , +"DICT_FIELD" NVARCHAR2(100) NULL , +"DICT_TABLE" NVARCHAR2(255) NULL , +"DICT_TEXT" NVARCHAR2(100) NULL , +"FIELD_SHOW_TYPE" NVARCHAR2(10) NULL , +"FIELD_HREF" NVARCHAR2(200) NULL , +"FIELD_LENGTH" NUMBER(11) NULL , +"FIELD_VALID_TYPE" NVARCHAR2(300) NULL , +"FIELD_MUST_INPUT" NVARCHAR2(2) NULL , +"FIELD_EXTEND_JSON" NVARCHAR2(500) NULL , +"FIELD_DEFAULT_VALUE" NVARCHAR2(100) NULL , +"IS_QUERY" NUMBER(4) NULL , +"IS_SHOW_FORM" NUMBER(4) NULL , +"IS_SHOW_LIST" NUMBER(4) NULL , +"IS_READ_ONLY" NUMBER(4) NULL , +"QUERY_MODE" NVARCHAR2(10) NULL , +"MAIN_TABLE" NVARCHAR2(100) NULL , +"MAIN_FIELD" NVARCHAR2(100) NULL , +"ORDER_NUM" NUMBER(11) NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(255) NULL , +"CONVERTER" NVARCHAR2(255) NULL , +"QUERY_DEF_VAL" NVARCHAR2(50) NULL , +"QUERY_DICT_TEXT" NVARCHAR2(100) NULL , +"QUERY_DICT_FIELD" NVARCHAR2(100) NULL , +"QUERY_DICT_TABLE" NVARCHAR2(500) NULL , +"QUERY_SHOW_TYPE" NVARCHAR2(50) NULL , +"QUERY_CONFIG_FLAG" NVARCHAR2(3) NULL , +"QUERY_VALID_TYPE" NVARCHAR2(50) NULL , +"QUERY_MUST_INPUT" NVARCHAR2(3) NULL , +"SORT_FLAG" NVARCHAR2(3) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."ID" IS '主键ID'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."CGFORM_HEAD_ID" IS '表ID'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_FIELD_NAME" IS '字段名字'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_FIELD_TXT" IS '字段备注'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_FIELD_NAME_OLD" IS '原字段名'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_IS_KEY" IS '是否主键 0否 1是'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_IS_NULL" IS '是否允许为空0否 1是'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_TYPE" IS '数据库字段类型'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_LENGTH" IS '数据库字段长度'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_POINT_LENGTH" IS '小数点'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DB_DEFAULT_VAL" IS '表字段默认值'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DICT_FIELD" IS '字典code'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DICT_TABLE" IS '字典表'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."DICT_TEXT" IS '字典Text'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_SHOW_TYPE" IS '表单控件类型'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_HREF" IS '跳转URL'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_LENGTH" IS '表单控件长度'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_VALID_TYPE" IS '表单字段校验规则'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_MUST_INPUT" IS '字段是否必填'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_EXTEND_JSON" IS '扩展参数JSON'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."FIELD_DEFAULT_VALUE" IS '控件默认值,不同的表达式展示不同的结果。 +1. 纯字符串直接赋给默认值; +2. #{普通变量}; +3. {{ 动态JS表达式 }}; +4. ${填值规则编码}; +填值规则表达式只允许存在一个,且不能和其他规则混用。'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."IS_QUERY" IS '是否查询条件0否 1是'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."IS_SHOW_FORM" IS '表单是否显示0否 1是'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."IS_SHOW_LIST" IS '列表是否显示0否 1是'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."IS_READ_ONLY" IS '是否是只读(1是 0否)'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_MODE" IS '查询模式'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."MAIN_TABLE" IS '外键主表名'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."MAIN_FIELD" IS '外键主键字段'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."ORDER_NUM" IS '排序'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."CONVERTER" IS '自定义值转换器'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_DEF_VAL" IS '查询默认值'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_DICT_TEXT" IS '查询配置字典text'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_DICT_FIELD" IS '查询配置字典code'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_DICT_TABLE" IS '查询配置字典table'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_SHOW_TYPE" IS '查询显示控件'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_CONFIG_FLAG" IS '是否启用查询配置1是0否'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_VALID_TYPE" IS '查询字段校验类型'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."QUERY_MUST_INPUT" IS '查询字段是否必填1是0否'; +COMMENT ON COLUMN "ONL_CGFORM_FIELD"."SORT_FLAG" IS '是否支持排序1是0否'; + +-- ---------------------------- +-- Records of ONL_CGFORM_FIELD +-- ---------------------------- +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('90a822b8a63bbbc1e9575c9f4e21e021', 'd35109c3632c4952a19ecc094943dd71', 'descc', '描述', null, '0', '1', 'string', '500', '0', null, null, null, null, 'umeditor', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '9', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('d4d8cae3cd9ea93e378fc14303eee105', 'd35109c3632c4952a19ecc094943dd71', 'create_by', '创建人登录名称', null, '0', '1', 'string', '50', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '0', '0', '0', 'single', null, null, '2', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('e50b4398731e06572c247993a0dcc38d', 'd35109c3632c4952a19ecc094943dd71', 'name', '用户名', null, '0', '1', 'string', '200', '0', null, null, null, null, 'text', null, '120', '*', '0', null, null, '1', '1', '1', '0', 'single', null, null, '6', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '1'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('f6076d9c662a0adddb39a91cccb4c993', 'd35109c3632c4952a19ecc094943dd71', 'xiamuti', '下拉多选', null, '0', '1', 'string', '100', '0', null, 'sex', null, null, 'list_multi', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '17', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-11-26 18:02:20', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, 'text', '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('cb7da49a981a1b0acc5f7e8a0130bdcd', 'd35109c3632c4952a19ecc094943dd71', 'user_code', '用户编码', null, '0', '1', 'String', '32', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '1', '1', '0', '0', 'single', null, null, '11', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-05-11 16:26:37', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('ba17414716b12b51c85f9d1f6f1e5787', 'd35109c3632c4952a19ecc094943dd71', 'chegnshi', '城市', null, '0', '1', 'string', '300', '0', null, null, null, null, 'pca', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '14', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-11-26 16:54:45', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, 'text', '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('88de72456c03410c364c80095aaa96eb', 'd35109c3632c4952a19ecc094943dd71', 'pop', '弹窗', null, '0', '1', 'string', '32', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '15', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-11-26 18:02:20', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, 'text', '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('47fa05530f3537a1be8f9e7a9e98be82', 'd35109c3632c4952a19ecc094943dd71', 'sex', '性别', null, '0', '1', 'string', '32', '0', null, 'sex', null, null, 'list', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '7', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '1'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('509a4f63f02e784bc04499a6a9be8528', 'd35109c3632c4952a19ecc094943dd71', 'update_by', '更新人登录名称', null, '0', '1', 'string', '50', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '0', '0', '0', 'single', null, null, '4', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('be868eed386da3cfcf49ea9afcdadf11', 'd35109c3632c4952a19ecc094943dd71', 'create_time', '创建日期', null, '0', '1', 'Date', '20', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '0', '0', '0', 'single', null, null, '3', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('5b17ba693745c258f6b66380ac851e5f', 'd35109c3632c4952a19ecc094943dd71', 'id', '主键', null, '1', '0', 'string', '36', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '1', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('3acd1b022fd8cb6b99534161fa3d6a24', 'd35109c3632c4952a19ecc094943dd71', 'ceck', 'checkbox', null, '0', '1', 'string', '32', '0', null, 'sex', null, null, 'checkbox', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '16', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-11-26 18:02:20', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, 'text', '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('04e4185a503e6aaaa31c243829ff4ac7', 'd35109c3632c4952a19ecc094943dd71', 'birthday', '生日', null, '0', '1', 'Date', '32', '0', null, null, null, null, 'date', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '10', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('191705159cea35e8cbacb326f172be94', 'd35109c3632c4952a19ecc094943dd71', 'search_sel', '搜索下拉', null, '0', '1', 'string', '100', '0', null, 'role_code', 'sys_role', 'role_name', 'sel_search', null, '120', null, '0', null, null, '1', '1', '1', '0', 'single', null, null, '18', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2020-11-26 18:02:20', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, 'text', '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('242cc59b23965a92161eca69ffdbf018', 'd35109c3632c4952a19ecc094943dd71', 'age', '年龄', null, '0', '1', 'int', '32', '0', null, null, null, null, 'text', 'http://www.baidu.com', '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '8', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('20ff34fb0466089cb633d73d5a6f08d6', 'd35109c3632c4952a19ecc094943dd71', 'update_time', '更新日期', null, '0', '1', 'Date', '20', '0', null, null, null, null, 'text', null, '120', null, '0', null, null, '0', '0', '0', '0', 'single', null, null, '5', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('3cd2061ea15ce9eeb4b7cf2e544ccb6b', 'd35109c3632c4952a19ecc094943dd71', 'file_kk', '附件', null, '0', '1', 'String', '500', '0', null, null, null, null, 'file', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '13', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-06-10 20:06:57', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); +INSERT INTO "ONL_CGFORM_FIELD" VALUES ('6a30c2e6f01ddd24349da55a37025cc0', 'd35109c3632c4952a19ecc094943dd71', 'top_pic', '头像', null, '0', '1', 'String', '500', '0', null, null, null, null, 'image', null, '120', null, '0', null, null, '0', '1', '1', '0', 'single', null, null, '12', 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2019-06-10 20:06:56', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null, null, null, null, null, '0', null, null, '0'); + +-- ---------------------------- +-- Table structure for ONL_CGFORM_HEAD +-- ---------------------------- +DROP TABLE "ONL_CGFORM_HEAD"; +CREATE TABLE "ONL_CGFORM_HEAD" ( +"ID" NVARCHAR2(32) NOT NULL , +"TABLE_NAME" NVARCHAR2(50) NOT NULL , +"TABLE_TYPE" NUMBER(11) NOT NULL , +"TABLE_VERSION" NUMBER(11) NULL , +"TABLE_TXT" NVARCHAR2(200) NOT NULL , +"IS_CHECKBOX" NVARCHAR2(5) NOT NULL , +"IS_DB_SYNCH" NVARCHAR2(20) NOT NULL , +"IS_PAGE" NVARCHAR2(5) NOT NULL , +"IS_TREE" NVARCHAR2(5) NOT NULL , +"ID_SEQUENCE" NVARCHAR2(200) NULL , +"ID_TYPE" NVARCHAR2(100) NULL , +"QUERY_MODE" NVARCHAR2(10) NOT NULL , +"RELATION_TYPE" NUMBER(11) NULL , +"SUB_TABLE_STR" NVARCHAR2(1000) NULL , +"TAB_ORDER_NUM" NUMBER(11) NULL , +"TREE_PARENT_ID_FIELD" NVARCHAR2(50) NULL , +"TREE_ID_FIELD" NVARCHAR2(50) NULL , +"TREE_FIELDNAME" NVARCHAR2(50) NULL , +"FORM_CATEGORY" NVARCHAR2(50) NOT NULL , +"FORM_TEMPLATE" NVARCHAR2(50) NULL , +"FORM_TEMPLATE_MOBILE" NVARCHAR2(50) NULL , +"SCROLL" NUMBER(11) NULL , +"COPY_VERSION" NUMBER(11) NULL , +"COPY_TYPE" NUMBER(11) NULL , +"PHYSIC_ID" NVARCHAR2(32) NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"THEME_TEMPLATE" NVARCHAR2(50) NULL , +"IS_DES_FORM" NVARCHAR2(2) NULL , +"DES_FORM_CODE" NVARCHAR2(50) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."ID" IS '主键ID'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TABLE_NAME" IS '表名'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TABLE_TYPE" IS '表类型: 0单表、1主表、2附表'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TABLE_VERSION" IS '表版本'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TABLE_TXT" IS '表说明'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."IS_CHECKBOX" IS '是否带checkbox'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."IS_DB_SYNCH" IS '同步数据库状态'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."IS_PAGE" IS '是否分页'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."IS_TREE" IS '是否是树'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."ID_SEQUENCE" IS '主键生成序列'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."ID_TYPE" IS '主键类型'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."QUERY_MODE" IS '查询模式'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."RELATION_TYPE" IS '映射关系 0一对多 1一对一'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."SUB_TABLE_STR" IS '子表'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TAB_ORDER_NUM" IS '附表排序序号'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TREE_PARENT_ID_FIELD" IS '树形表单父id'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TREE_ID_FIELD" IS '树表主键字段'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."TREE_FIELDNAME" IS '树开表单列字段'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."FORM_CATEGORY" IS '表单分类'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."FORM_TEMPLATE" IS 'PC表单模板'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."FORM_TEMPLATE_MOBILE" IS '表单模板样式(移动端)'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."SCROLL" IS '是否有横向滚动条'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."COPY_VERSION" IS '复制版本号'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."COPY_TYPE" IS '复制表类型1为复制表 0为原始表'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."PHYSIC_ID" IS '原始表ID'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."THEME_TEMPLATE" IS '主题模板'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."IS_DES_FORM" IS '是否用设计器表单'; +COMMENT ON COLUMN "ONL_CGFORM_HEAD"."DES_FORM_CODE" IS '设计器表单编码'; + +-- ---------------------------- +-- Records of ONL_CGFORM_HEAD +-- ---------------------------- +INSERT INTO "ONL_CGFORM_HEAD" VALUES ('d35109c3632c4952a19ecc094943dd71', 'test_demo', '1', '31', '测试用户表', 'Y', 'Y', 'Y', 'N', null, 'UUID', 'group', null, null, null, null, null, null, 'demo', '1', null, '0', null, '0', null, 'admin', TO_DATE('2021-03-19 09:54:26', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-15 14:24:35', 'YYYY-MM-DD HH24:MI:SS'), 'normal', null, null); + +-- ---------------------------- +-- Table structure for ONL_CGFORM_INDEX +-- ---------------------------- +DROP TABLE "ONL_CGFORM_INDEX"; +CREATE TABLE "ONL_CGFORM_INDEX" ( +"ID" NVARCHAR2(36) NOT NULL , +"CGFORM_HEAD_ID" NVARCHAR2(32) NULL , +"INDEX_NAME" NVARCHAR2(100) NULL , +"INDEX_FIELD" NVARCHAR2(500) NULL , +"INDEX_TYPE" NVARCHAR2(32) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"IS_DB_SYNCH" NVARCHAR2(2) NULL , +"DEL_FLAG" NUMBER(11) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."ID" IS '主键'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."CGFORM_HEAD_ID" IS '主表id'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."INDEX_NAME" IS '索引名称'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."INDEX_FIELD" IS '索引栏位'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."INDEX_TYPE" IS '索引类型'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."IS_DB_SYNCH" IS '是否同步数据库 N未同步 Y已同步'; +COMMENT ON COLUMN "ONL_CGFORM_INDEX"."DEL_FLAG" IS '是否删除 0未删除 1删除'; + +-- ---------------------------- +-- Records of ONL_CGFORM_INDEX +-- ---------------------------- + +-- ---------------------------- +-- Table structure for ONL_CGREPORT_HEAD +-- ---------------------------- +DROP TABLE "ONL_CGREPORT_HEAD"; +CREATE TABLE "ONL_CGREPORT_HEAD" ( +"ID" NVARCHAR2(36) NOT NULL , +"CODE" NVARCHAR2(100) NOT NULL , +"NAME" NVARCHAR2(100) NOT NULL , +"CGR_SQL" NVARCHAR2(1000) NOT NULL , +"RETURN_VAL_FIELD" NVARCHAR2(100) NULL , +"RETURN_TXT_FIELD" NVARCHAR2(100) NULL , +"RETURN_TYPE" NVARCHAR2(2) NULL , +"DB_SOURCE" NVARCHAR2(100) NULL , +"CONTENT" NVARCHAR2(1000) NULL , +"UPDATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."CODE" IS '报表编码'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."NAME" IS '报表名字'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."CGR_SQL" IS '报表SQL'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."RETURN_VAL_FIELD" IS '返回值字段'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."RETURN_TXT_FIELD" IS '返回文本字段'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."RETURN_TYPE" IS '返回类型,单选或多选'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."DB_SOURCE" IS '动态数据源'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."CONTENT" IS '描述'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."UPDATE_BY" IS '修改人id'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_CGREPORT_HEAD"."CREATE_BY" IS '创建人id'; + +-- ---------------------------- +-- Records of ONL_CGREPORT_HEAD +-- ---------------------------- +INSERT INTO "ONL_CGREPORT_HEAD" VALUES ('1256627801873821698', 'report002', '统计登录每日登录次数-Demo', 'select DATE_FORMAT(create_time, ''%Y-%m-%d'') as date,count(*) as num from sys_log group by DATE_FORMAT(create_time, ''%Y-%m-%d'')', null, null, '1', null, null, TO_DATE('2020-11-26 19:22:04', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-03 00:53:10', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "ONL_CGREPORT_HEAD" VALUES ('1260179852088135681', 'tj_user_report', '统一有效系统用户-Demo', 'select * from sys_user', null, null, '1', null, null, TO_DATE('2020-11-26 19:50:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-12 20:07:44', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "ONL_CGREPORT_HEAD" VALUES ('6c7f59741c814347905a938f06ee003c', 'report_user', '统计在线用户-Demo', 'select * from sys_user', null, null, '1', null, null, TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-25 11:20:45', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "ONL_CGREPORT_HEAD" VALUES ('87b55a515d3441b6b98e48e5b35474a6', 'demo', 'Report-Demo', 'select * from demo', null, null, '1', null, null, TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-12 11:25:16', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); + +-- ---------------------------- +-- Table structure for ONL_CGREPORT_ITEM +-- ---------------------------- +DROP TABLE "ONL_CGREPORT_ITEM"; +CREATE TABLE "ONL_CGREPORT_ITEM" ( +"ID" NVARCHAR2(36) NOT NULL , +"CGRHEAD_ID" NVARCHAR2(36) NOT NULL , +"FIELD_NAME" NVARCHAR2(36) NOT NULL , +"FIELD_TXT" NVARCHAR2(300) NULL , +"FIELD_WIDTH" NUMBER(11) NULL , +"FIELD_TYPE" NVARCHAR2(10) NULL , +"SEARCH_MODE" NVARCHAR2(10) NULL , +"IS_ORDER" NUMBER(11) NULL , +"IS_SEARCH" NUMBER(11) NULL , +"DICT_CODE" NVARCHAR2(500) NULL , +"FIELD_HREF" NVARCHAR2(120) NULL , +"IS_SHOW" NUMBER(11) NULL , +"ORDER_NUM" NUMBER(11) NULL , +"REPLACE_VAL" NVARCHAR2(200) NULL , +"IS_TOTAL" NVARCHAR2(2) NULL , +"GROUP_TITLE" NVARCHAR2(50) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."CGRHEAD_ID" IS '报表ID'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."FIELD_NAME" IS '字段名字'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."FIELD_TXT" IS '字段文本'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."FIELD_TYPE" IS '字段类型'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."SEARCH_MODE" IS '查询模式'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."IS_ORDER" IS '是否排序 0否,1是'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."IS_SEARCH" IS '是否查询 0否,1是'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."DICT_CODE" IS '字典CODE'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."FIELD_HREF" IS '字段跳转URL'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."IS_SHOW" IS '是否显示 0否,1显示'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."ORDER_NUM" IS '排序'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."REPLACE_VAL" IS '取值表达式'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."IS_TOTAL" IS '是否合计 0否,1是(仅对数值有效)'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."GROUP_TITLE" IS '分组标题'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "ONL_CGREPORT_ITEM"."UPDATE_TIME" IS '修改时间'; + +-- ---------------------------- +-- Records of ONL_CGREPORT_ITEM +-- ---------------------------- +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1256627802020622337', '1256627801873821698', 'date', '日期', null, 'String', null, '0', '0', null, null, '1', '1', null, null, null, 'admin', TO_DATE('2020-09-11 14:50:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1256627802075148289', '1256627801873821698', 'num', '登录次数', null, 'String', null, '0', '0', null, null, '1', '2', null, '1', null, 'admin', TO_DATE('2020-09-11 14:50:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496577', '1260179852088135681', 'id', 'ID', null, 'String', null, '0', '0', null, null, '0', '1', null, null, null, 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496578', '1260179852088135681', 'username', '账号', null, 'String', null, '0', '0', null, null, '1', '2', null, null, '用户信息', 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496579', '1260179852088135681', 'realname', '用户名字', null, 'String', null, '0', '0', null, null, '1', '3', null, null, '用户信息', 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496584', '1260179852088135681', 'sex', '性别', null, 'String', null, '0', '1', 'sex', null, '1', '4', null, null, '用户信息', 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496585', '1260179852088135681', 'email', '邮箱', null, 'String', 'single', '0', '1', null, null, '1', '5', null, null, null, 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1260179881129496586', '1260179852088135681', 'phone', '电话', null, 'String', null, '0', '0', null, null, '1', '6', null, null, null, 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('15884396588465896672', '87b55a515d3441b6b98e48e5b35474a6', 'id', 'ID', null, 'String', null, '0', '0', null, null, '0', '1', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('15892858611256977947', '1260179852088135681', 'birthday', '生日', null, 'Date', null, '0', '0', null, null, '1', '7', null, null, null, 'admin', TO_DATE('2020-09-11 14:07:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1740bb02519db90c44cb2cba8b755136', '6c7f59741c814347905a938f06ee003c', 'realname', '用户名称', null, 'String', null, '0', '0', null, 'https://www.baidu.com', '1', '1', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('1b181e6d2813bcb263adc39737f9df46', '87b55a515d3441b6b98e48e5b35474a6', 'name', '用户名', null, 'String', 'single', '0', '1', null, null, '1', '2', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('61ef5b323134938fdd07ad5e3ea16cd3', '87b55a515d3441b6b98e48e5b35474a6', 'key_word', '关键词', null, 'String', 'single', '0', '1', null, null, '1', '3', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('627768efd9ba2c41e905579048f21000', '6c7f59741c814347905a938f06ee003c', 'username', '用户账号', null, 'String', 'single', '0', '1', null, null, '1', '2', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('8bb087a9aa2000bcae17a1b3f5768435', '6c7f59741c814347905a938f06ee003c', 'sex', '性别', null, 'String', 'single', '0', '1', 'sex', null, '1', '3', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('90d4fa57d301801abb26a9b86b6b94c4', '6c7f59741c814347905a938f06ee003c', 'birthday', '生日', null, 'Date', 'single', '0', '0', null, null, '1', '4', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('a4ac355f07a05218854e5f23e2930163', '6c7f59741c814347905a938f06ee003c', 'avatar', '头像', null, 'String', null, '0', '0', null, null, '0', '5', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('d6e86b5ffd096ddcc445c0f320a45004', '6c7f59741c814347905a938f06ee003c', 'phone', '手机号', null, 'String', null, '0', '0', null, null, '1', '6', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('df365cd357699eea96c29763d1dd7f9d', '6c7f59741c814347905a938f06ee003c', 'email', '邮箱', null, 'String', null, '0', '0', null, null, '1', '7', null, null, null, 'admin', TO_DATE('2020-05-03 02:35:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('edf9932912b81ad01dd557d3d593a559', '87b55a515d3441b6b98e48e5b35474a6', 'age', '年龄', null, 'String', null, '0', '0', null, null, '1', '4', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('f985883e509a6faaaf62ca07fd24a73c', '87b55a515d3441b6b98e48e5b35474a6', 'birthday', '生日', null, 'Date', 'single', '0', '1', null, null, '1', '5', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "ONL_CGREPORT_ITEM" VALUES ('fce83e4258de3e2f114ab3116397670c', '87b55a515d3441b6b98e48e5b35474a6', 'punch_time', '发布时间', null, 'String', null, '0', '0', null, null, '1', '6', null, null, null, 'admin', TO_DATE('2020-05-03 01:14:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); + +-- ---------------------------- +-- Table structure for ONL_CGREPORT_PARAM +-- ---------------------------- +DROP TABLE "ONL_CGREPORT_PARAM"; +CREATE TABLE "ONL_CGREPORT_PARAM" ( +"ID" NVARCHAR2(36) NOT NULL , +"CGRHEAD_ID" NVARCHAR2(36) NOT NULL , +"PARAM_NAME" NVARCHAR2(32) NOT NULL , +"PARAM_TXT" NVARCHAR2(32) NULL , +"PARAM_VALUE" NVARCHAR2(32) NULL , +"ORDER_NUM" NUMBER(11) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."CGRHEAD_ID" IS '动态报表ID'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."PARAM_NAME" IS '参数字段'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."PARAM_TXT" IS '参数文本'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."PARAM_VALUE" IS '参数默认值'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."ORDER_NUM" IS '排序'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "ONL_CGREPORT_PARAM"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of ONL_CGREPORT_PARAM +-- ---------------------------- + +-- ---------------------------- +-- Table structure for OSS_FILE +-- ---------------------------- +DROP TABLE "OSS_FILE"; +CREATE TABLE "OSS_FILE" ( +"ID" NVARCHAR2(32) NOT NULL , +"FILE_NAME" NVARCHAR2(255) NULL , +"URL" NVARCHAR2(255) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "OSS_FILE" IS 'Oss File'; +COMMENT ON COLUMN "OSS_FILE"."ID" IS '主键id'; +COMMENT ON COLUMN "OSS_FILE"."FILE_NAME" IS '文件名称'; +COMMENT ON COLUMN "OSS_FILE"."URL" IS '文件地址'; +COMMENT ON COLUMN "OSS_FILE"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "OSS_FILE"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "OSS_FILE"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "OSS_FILE"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of OSS_FILE +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_BLOB_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_BLOB_TRIGGERS"; +CREATE TABLE "QRTZ_BLOB_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"BLOB_DATA" BLOB NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_BLOB_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CALENDARS +-- ---------------------------- +DROP TABLE "QRTZ_CALENDARS"; +CREATE TABLE "QRTZ_CALENDARS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"CALENDAR_NAME" VARCHAR2(200 BYTE) NOT NULL , +"CALENDAR" BLOB NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_CALENDARS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CRON_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_CRON_TRIGGERS"; +CREATE TABLE "QRTZ_CRON_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"CRON_EXPRESSION" VARCHAR2(120 BYTE) NOT NULL , +"TIME_ZONE_ID" VARCHAR2(80 BYTE) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_CRON_TRIGGERS +-- ---------------------------- +INSERT INTO "QRTZ_CRON_TRIGGERS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); +INSERT INTO "QRTZ_CRON_TRIGGERS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', '0/1 * * * * ?', 'Asia/Shanghai'); + +-- ---------------------------- +-- Table structure for QRTZ_FIRED_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_FIRED_TRIGGERS"; +CREATE TABLE "QRTZ_FIRED_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"ENTRY_ID" VARCHAR2(95 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"INSTANCE_NAME" VARCHAR2(200 BYTE) NOT NULL , +"FIRED_TIME" NUMBER(13) NOT NULL , +"SCHED_TIME" NUMBER(13) NOT NULL , +"PRIORITY" NUMBER(13) NOT NULL , +"STATE" VARCHAR2(16 BYTE) NOT NULL , +"JOB_NAME" VARCHAR2(200 BYTE) NULL , +"JOB_GROUP" VARCHAR2(200 BYTE) NULL , +"IS_NONCONCURRENT" VARCHAR2(1 BYTE) NULL , +"REQUESTS_RECOVERY" VARCHAR2(1 BYTE) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_FIRED_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_JOB_DETAILS +-- ---------------------------- +DROP TABLE "QRTZ_JOB_DETAILS"; +CREATE TABLE "QRTZ_JOB_DETAILS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"JOB_NAME" VARCHAR2(200 BYTE) NOT NULL , +"JOB_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"DESCRIPTION" VARCHAR2(250 BYTE) NULL , +"JOB_CLASS_NAME" VARCHAR2(250 BYTE) NOT NULL , +"IS_DURABLE" VARCHAR2(1 BYTE) NOT NULL , +"IS_NONCONCURRENT" VARCHAR2(1 BYTE) NOT NULL , +"IS_UPDATE_DATA" VARCHAR2(1 BYTE) NOT NULL , +"REQUESTS_RECOVERY" VARCHAR2(1 BYTE) NOT NULL , +"JOB_DATA" BLOB NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_JOB_DETAILS +-- ---------------------------- +INSERT INTO "QRTZ_JOB_DETAILS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', null, 'com.jero.modules.quartz.job.SampleJob', '0', '0', '0', '0', HexToRaw('30784143454430303035373337323030313536463732363732453731373536313732373437413245344136463632343436313734363134443631373039464230383345384246413942304342303230303030373837323030323636463732363732453731373536313732373437413245373537343639364337333245353337343732363936453637344236353739343436393732373437393436364336313637344436313730383230384538433346424335354432383032303030313541303031333631364336433646373737333534373236313645373336393635364537343434363137343631373837323030314436463732363732453731373536313732373437413245373537343639364337333245343436393732373437393436364336313637344436313730313345363245414432383736304143453032303030323541303030353634363937323734373934433030303336443631373037343030304634433641363137363631324637353734363936433246344436313730334237383730303137333732303031313641363137363631324537353734363936433245343836313733363834443631373030353037444143314333313636304431303330303032343630303041364336463631363434363631363337343646373234393030303937343638373236353733363836463643363437383730334634303030303030303030303030433737303830303030303031303030303030303031373430303039373036313732363136443635373436353732373037383030')); +INSERT INTO "QRTZ_JOB_DETAILS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', null, 'com.jero.modules.quartz.job.SampleParamJob', '0', '0', '0', '0', HexToRaw('307841434544303030353733373230303135364637323637324537313735363137323734374132453441364636323434363137343631344436313730394642303833453842464139423043423032303030303738373230303236364637323637324537313735363137323734374132453735373436393643373332453533373437323639364536373442363537393434363937323734373934363643363136373444363137303832303845384333464243353544323830323030303135413030313336313643364336463737373335343732363136453733363936353645373434343631373436313738373230303144364637323637324537313735363137323734374132453735373436393643373332453434363937323734373934363643363136373444363137303133453632454144323837363041434530323030303235413030303536343639373237343739344330303033364436313730373430303046344336413631373636313246373537343639364332463444363137303342373837303031373337323030313136413631373636313245373537343639364332453438363137333638344436313730303530374441433143333136363044313033303030323436303030413643364636313634343636313633373436463732343930303039373436383732363537333638364636433634373837303346343030303030303030303030304337373038303030303030313030303030303030313734303030393730363137323631364436353734363537323734303030353733363336463734373437383030')); + +-- ---------------------------- +-- Table structure for QRTZ_LOCKS +-- ---------------------------- +DROP TABLE "QRTZ_LOCKS"; +CREATE TABLE "QRTZ_LOCKS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"LOCK_NAME" VARCHAR2(40 BYTE) NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_LOCKS +-- ---------------------------- +INSERT INTO "QRTZ_LOCKS" VALUES ('MyScheduler', 'STATE_ACCESS'); +INSERT INTO "QRTZ_LOCKS" VALUES ('MyScheduler', 'TRIGGER_ACCESS'); +INSERT INTO "QRTZ_LOCKS" VALUES ('quartzScheduler', 'TRIGGER_ACCESS'); + +-- ---------------------------- +-- Table structure for QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +DROP TABLE "QRTZ_PAUSED_TRIGGER_GRPS"; +CREATE TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SCHEDULER_STATE +-- ---------------------------- +DROP TABLE "QRTZ_SCHEDULER_STATE"; +CREATE TABLE "QRTZ_SCHEDULER_STATE" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"INSTANCE_NAME" VARCHAR2(200 BYTE) NOT NULL , +"LAST_CHECKIN_TIME" NUMBER(13) NOT NULL , +"CHECKIN_INTERVAL" NUMBER(13) NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_SCHEDULER_STATE +-- ---------------------------- +INSERT INTO "QRTZ_SCHEDULER_STATE" VALUES ('MyScheduler', 'mmmmmm1616114494533', '1616135809090', '10000'); + +-- ---------------------------- +-- Table structure for QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_SIMPLE_TRIGGERS"; +CREATE TABLE "QRTZ_SIMPLE_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"REPEAT_COUNT" NUMBER(7) NOT NULL , +"REPEAT_INTERVAL" NUMBER(12) NOT NULL , +"TIMES_TRIGGERED" NUMBER(10) NOT NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_SIMPROP_TRIGGERS"; +CREATE TABLE "QRTZ_SIMPROP_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"STR_PROP_1" VARCHAR2(512 BYTE) NULL , +"STR_PROP_2" VARCHAR2(512 BYTE) NULL , +"STR_PROP_3" VARCHAR2(512 BYTE) NULL , +"INT_PROP_1" NUMBER(10) NULL , +"INT_PROP_2" NUMBER(10) NULL , +"LONG_PROP_1" NUMBER(13) NULL , +"LONG_PROP_2" NUMBER(13) NULL , +"DEC_PROP_1" NUMBER(13,4) NULL , +"DEC_PROP_2" NUMBER(13,4) NULL , +"BOOL_PROP_1" VARCHAR2(1 BYTE) NULL , +"BOOL_PROP_2" VARCHAR2(1 BYTE) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_TRIGGERS +-- ---------------------------- +DROP TABLE "QRTZ_TRIGGERS"; +CREATE TABLE "QRTZ_TRIGGERS" ( +"SCHED_NAME" VARCHAR2(120 BYTE) NOT NULL , +"TRIGGER_NAME" VARCHAR2(200 BYTE) NOT NULL , +"TRIGGER_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"JOB_NAME" VARCHAR2(200 BYTE) NOT NULL , +"JOB_GROUP" VARCHAR2(200 BYTE) NOT NULL , +"DESCRIPTION" VARCHAR2(250 BYTE) NULL , +"NEXT_FIRE_TIME" NUMBER(13) NULL , +"PREV_FIRE_TIME" NUMBER(13) NULL , +"PRIORITY" NUMBER(13) NULL , +"TRIGGER_STATE" VARCHAR2(16 BYTE) NOT NULL , +"TRIGGER_TYPE" VARCHAR2(8 BYTE) NOT NULL , +"START_TIME" NUMBER(13) NOT NULL , +"END_TIME" NUMBER(13) NULL , +"CALENDAR_NAME" VARCHAR2(200 BYTE) NULL , +"MISFIRE_INSTR" NUMBER(2) NULL , +"JOB_DATA" BLOB NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; + +-- ---------------------------- +-- Records of QRTZ_TRIGGERS +-- ---------------------------- +INSERT INTO "QRTZ_TRIGGERS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', 'com.jero.modules.quartz.job.SampleJob', 'DEFAULT', null, '1588405730000', '1588405729000', '5', 'PAUSED', 'CRON', '1588405237000', '0', null, '0', null); +INSERT INTO "QRTZ_TRIGGERS" VALUES ('MyScheduler', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', 'com.jero.modules.quartz.job.SampleParamJob', 'DEFAULT', null, '1588405236000', '1588405235000', '5', 'PAUSED', 'CRON', '1588405221000', '0', null, '0', null); + +-- ---------------------------- +-- Table structure for SYS_ANNOUNCEMENT +-- ---------------------------- +DROP TABLE "SYS_ANNOUNCEMENT"; +CREATE TABLE "SYS_ANNOUNCEMENT" ( +"ID" NVARCHAR2(32) NOT NULL , +"TITILE" NVARCHAR2(100) NULL , +"MSG_CONTENT" NCLOB NULL , +"START_TIME" DATE NULL , +"END_TIME" DATE NULL , +"SENDER" NVARCHAR2(100) NULL , +"PRIORITY" NVARCHAR2(255) NULL , +"MSG_CATEGORY" NVARCHAR2(10) NOT NULL , +"MSG_TYPE" NVARCHAR2(10) NULL , +"SEND_STATUS" NVARCHAR2(10) NULL , +"SEND_TIME" DATE NULL , +"CANCEL_TIME" DATE NULL , +"DEL_FLAG" NVARCHAR2(1) NULL , +"BUS_TYPE" NVARCHAR2(20) NULL , +"BUS_ID" NVARCHAR2(50) NULL , +"OPEN_TYPE" NVARCHAR2(20) NULL , +"OPEN_PAGE" NVARCHAR2(255) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"USER_IDS" NCLOB NULL , +"MSG_ABSTRACT" NCLOB NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_ANNOUNCEMENT" IS '系统通告表'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."TITILE" IS '标题'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."MSG_CONTENT" IS '内容'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."START_TIME" IS '开始时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."END_TIME" IS '结束时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."SENDER" IS '发布人'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."PRIORITY" IS '优先级(L低,M中,H高)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."MSG_CATEGORY" IS '消息类型1:通知公告2:系统消息'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."MSG_TYPE" IS '通告对象类型(USER:指定用户,ALL:全体用户)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."SEND_STATUS" IS '发布状态(0未发布,1已发布,2已撤销)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."SEND_TIME" IS '发布时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."CANCEL_TIME" IS '撤销时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."DEL_FLAG" IS '删除状态(0,正常,1已删除)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."BUS_TYPE" IS '业务类型(email:邮件 bpm:流程)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."BUS_ID" IS '业务id'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."OPEN_TYPE" IS '打开方式(组件:component 路由:url)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."OPEN_PAGE" IS '组件/路由 地址'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."UPDATE_TIME" IS '更新时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."USER_IDS" IS '指定用户'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT"."MSG_ABSTRACT" IS '摘要'; + +-- ---------------------------- +-- Records of SYS_ANNOUNCEMENT +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_ANNOUNCEMENT_SEND +-- ---------------------------- +DROP TABLE "SYS_ANNOUNCEMENT_SEND"; +CREATE TABLE "SYS_ANNOUNCEMENT_SEND" ( +"ID" NVARCHAR2(32) NULL , +"ANNT_ID" NVARCHAR2(32) NULL , +"USER_ID" NVARCHAR2(32) NULL , +"READ_FLAG" NVARCHAR2(10) NULL , +"READ_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_ANNOUNCEMENT_SEND" IS '用户通告阅读标记表'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."ANNT_ID" IS '通告ID'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."USER_ID" IS '用户id'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."READ_FLAG" IS '阅读状态(0未读,1已读)'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."READ_TIME" IS '阅读时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_ANNOUNCEMENT_SEND"."UPDATE_TIME" IS '更新时间'; + +-- ---------------------------- +-- Records of SYS_ANNOUNCEMENT_SEND +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_CATEGORY +-- ---------------------------- +DROP TABLE "SYS_CATEGORY"; +CREATE TABLE "SYS_CATEGORY" ( +"ID" NVARCHAR2(36) NOT NULL , +"PID" NVARCHAR2(36) NULL , +"NAME" NVARCHAR2(100) NULL , +"CODE" NVARCHAR2(100) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"SYS_ORG_CODE" NVARCHAR2(64) NULL , +"HAS_CHILD" NVARCHAR2(3) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_CATEGORY"."PID" IS '父级节点'; +COMMENT ON COLUMN "SYS_CATEGORY"."NAME" IS '类型名称'; +COMMENT ON COLUMN "SYS_CATEGORY"."CODE" IS '类型编码'; +COMMENT ON COLUMN "SYS_CATEGORY"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_CATEGORY"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_CATEGORY"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_CATEGORY"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_CATEGORY"."SYS_ORG_CODE" IS '所属部门'; +COMMENT ON COLUMN "SYS_CATEGORY"."HAS_CHILD" IS '是否有子节点'; + +-- ---------------------------- +-- Records of SYS_CATEGORY +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_CHECK_RULE +-- ---------------------------- +DROP TABLE "SYS_CHECK_RULE"; +CREATE TABLE "SYS_CHECK_RULE" ( +"ID" NVARCHAR2(32) NOT NULL , +"RULE_NAME" NVARCHAR2(100) NULL , +"RULE_CODE" NVARCHAR2(100) NULL , +"RULE_JSON" NCLOB NULL , +"RULE_DESCRIPTION" NVARCHAR2(200) NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_CHECK_RULE"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."RULE_NAME" IS '规则名称'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."RULE_CODE" IS '规则Code'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."RULE_JSON" IS '规则JSON'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."RULE_DESCRIPTION" IS '规则描述'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."UPDATE_TIME" IS '更新时间'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_CHECK_RULE"."CREATE_TIME" IS '创建时间'; + +-- ---------------------------- +-- Records of SYS_CHECK_RULE +-- ---------------------------- +INSERT INTO "SYS_CHECK_RULE" VALUES ('1224980593992388610', '通用编码规则-Demo', 'common', '[{"digits":"1","pattern":"^[a-z|A-Z]$","message":"第一位只能是字母"},{"digits":"*","pattern":"^[0-9|a-z|A-Z|_]{0,}$","message":"只能填写数字、大小写字母、下划线"},{"digits":"*","pattern":"^.{3,}$","message":"最少输入3位数"},{"digits":"*","pattern":"^.{3,12}$","message":"最多输入12位数"}]', '规则:1、首位只能是字母;2、只能填写数字、大小写字母、下划线;3、最少3位数,最多12位数。', 'admin', TO_DATE('2021-03-18 15:45:01', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-05 16:58:27', 'YYYY-MM-DD HH24:MI:SS')); + +-- ---------------------------- +-- Table structure for SYS_DATA_LOG +-- ---------------------------- +DROP TABLE "SYS_DATA_LOG"; +CREATE TABLE "SYS_DATA_LOG" ( +"ID" NVARCHAR2(32) NOT NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"DATA_TABLE" NVARCHAR2(32) NULL , +"DATA_ID" NVARCHAR2(32) NULL , +"DATA_CONTENT" NCLOB NULL , +"DATA_VERSION" NUMBER(11) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_DATA_LOG"."ID" IS 'id'; +COMMENT ON COLUMN "SYS_DATA_LOG"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "SYS_DATA_LOG"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_DATA_LOG"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "SYS_DATA_LOG"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_DATA_LOG"."DATA_TABLE" IS '表名'; +COMMENT ON COLUMN "SYS_DATA_LOG"."DATA_ID" IS '数据ID'; +COMMENT ON COLUMN "SYS_DATA_LOG"."DATA_CONTENT" IS '数据内容'; +COMMENT ON COLUMN "SYS_DATA_LOG"."DATA_VERSION" IS '版本号'; + +-- ---------------------------- +-- Records of SYS_DATA_LOG +-- ---------------------------- +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab0d198015ab12274bf0006', 'admin', TO_DATE('2017-03-09 11:35:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 23, 2016 12:00:00 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"9001","status":"1","content":"111","id":"4028ef81550c1a7901550c1cd6e70001"}', '3'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab700bead0009', 'admin', TO_DATE('2017-03-10 14:56:03', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '402880f05ab6d12b015ab700be8d0008', '{"mobilePhone":"","officePhone":"","email":"","createDate":"Mar 10, 2017 2:56:03 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"111","status":"0","id":"402880f05ab6d12b015ab700be8d0008"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab705a23f000d', 'admin', TO_DATE('2017-03-10 15:01:24', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '402880f05ab6d12b015ab705a233000c', '{"mobilePhone":"","officePhone":"11","email":"","createDate":"Mar 10, 2017 3:01:24 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"11","status":"0","id":"402880f05ab6d12b015ab705a233000c"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab712a6420013', 'admin', TO_DATE('2017-03-10 15:15:37', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '402880f05ab6d12b015ab712a6360012', '{"mobilePhone":"","officePhone":"","email":"","createDate":"Mar 10, 2017 3:15:37 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"小王","status":"0","id":"402880f05ab6d12b015ab712a6360012"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab712d0510015', 'admin', TO_DATE('2017-03-10 15:15:47', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '402880f05ab6d12b015ab712a6360012', '{"mobilePhone":"18611788525","officePhone":"","email":"","createDate":"Mar 10, 2017 3:15:37 AM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"小王","status":"0","id":"402880f05ab6d12b015ab712a6360012"}', '2'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab71308240018', 'admin', TO_DATE('2017-03-10 15:16:02', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '8a8ab0b246dc81120146dc81860f016f', '{"mobilePhone":"13111111111","officePhone":"66666666","email":"demo@jero.com","age":12,"salary":10.00,"birthday":"Feb 14, 2014 12:00:00 AM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"小明","status":"","content":"","id":"8a8ab0b246dc81120146dc81860f016f"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('402880f05ab6d12b015ab72806c3001b', 'admin', TO_DATE('2017-03-10 15:38:58', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '8a8ab0b246dc81120146dc81860f016f', '{"mobilePhone":"18611788888","officePhone":"66666666","email":"demo@jero.com","age":12,"salary":10.00,"birthday":"Feb 14, 2014 12:00:00 AM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"小明","status":"","content":"","id":"8a8ab0b246dc81120146dc81860f016f"}', '2'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef815318148a0153181567690001', 'admin', TO_DATE('2016-02-25 18:59:29', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef815318148a0153181566270000', '{"mobilePhone":"13423423423","officePhone":"1","email":"","age":1,"salary":1,"birthday":"Feb 25, 2016 12:00:00 AM","createDate":"Feb 25, 2016 6:59:24 PM","depId":"402880e447e9a9570147e9b6a3be0005","userName":"1","status":"0","id":"4028ef815318148a0153181566270000"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef815318148a01531815ec5c0003', 'admin', TO_DATE('2016-02-25 19:00:03', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef815318148a0153181566270000', '{"mobilePhone":"13426498659","officePhone":"1","email":"","age":1,"salary":1.00,"birthday":"Feb 25, 2016 12:00:00 AM","createDate":"Feb 25, 2016 6:59:24 AM","depId":"402880e447e9a9570147e9b6a3be0005","userName":"1","status":"0","id":"4028ef815318148a0153181566270000"}', '2'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c0502e6b0003', 'admin', TO_DATE('2016-03-29 10:59:53', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{"mobilePhone":"18455477548","officePhone":"123","email":"","createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c0509aa40006', 'admin', TO_DATE('2016-03-29 11:00:21', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{"mobilePhone":"13565486458","officePhone":"","email":"","createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c051c4a70008', 'admin', TO_DATE('2016-03-29 11:01:37', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{"mobilePhone":"13565486458","officePhone":"","email":"","createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', '2'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c051d4b5000a', 'admin', TO_DATE('2016-03-29 11:01:41', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{"mobilePhone":"13565486458","officePhone":"123","email":"","createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', '2'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c07033d8000d', 'admin', TO_DATE('2016-03-29 11:34:52', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0502d420002', '{"mobilePhone":"13565486458","officePhone":"123","email":"","age":23,"createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', '3'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef8153c028db0153c070492e000f', 'admin', TO_DATE('2016-03-29 11:34:57', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef8153c028db0153c0509a3e0005', '{"mobilePhone":"13565486458","officePhone":"","email":"","age":22,"createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', '3'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef81550c1a7901550c1cd7850002', 'admin', TO_DATE('2016-06-01 21:17:44', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 1, 2016 9:17:44 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"121221","status":"0","id":"4028ef81550c1a7901550c1cd6e70001"}', '1'); +INSERT INTO "SYS_DATA_LOG" VALUES ('4028ef81568c31ec01568c3307080004', 'admin', TO_DATE('2016-08-15 11:16:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, 'jero_demo', '4028ef81550c1a7901550c1cd6e70001', '{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 23, 2016 12:00:00 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"9001","status":"1","content":"111","id":"4028ef81550c1a7901550c1cd6e70001"}', '2'); + +-- ---------------------------- +-- Table structure for SYS_DATA_SOURCE +-- ---------------------------- +DROP TABLE "SYS_DATA_SOURCE"; +CREATE TABLE "SYS_DATA_SOURCE" ( +"ID" NVARCHAR2(36) NOT NULL , +"CODE" NVARCHAR2(100) NULL , +"NAME" NVARCHAR2(100) NULL , +"REMARK" NVARCHAR2(200) NULL , +"DB_TYPE" NVARCHAR2(10) NULL , +"DB_DRIVER" NVARCHAR2(100) NULL , +"DB_URL" NVARCHAR2(500) NULL , +"DB_NAME" NVARCHAR2(100) NULL , +"DB_USERNAME" NVARCHAR2(100) NULL , +"DB_PASSWORD" NVARCHAR2(100) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"SYS_ORG_CODE" NVARCHAR2(64) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."CODE" IS '数据源编码'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."NAME" IS '数据源名称'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."REMARK" IS '备注'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_TYPE" IS '数据库类型'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_DRIVER" IS '驱动类'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_URL" IS '数据源地址'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_NAME" IS '数据库名称'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_USERNAME" IS '用户名'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."DB_PASSWORD" IS '密码'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_DATA_SOURCE"."SYS_ORG_CODE" IS '所属部门'; + +-- ---------------------------- +-- Records of SYS_DATA_SOURCE +-- ---------------------------- +INSERT INTO "SYS_DATA_SOURCE" VALUES ('1209779538310004737', 'local_mysql', 'MySQL5.7-Demo', '本地数据库MySQL5.7', '4', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai', 'jero-boot', 'jero-boot', 'c0e5dbdaede24c84091fb7dc0db47ccb', 'admin', TO_DATE('2019-12-25 18:14:53', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 16:44:03', 'YYYY-MM-DD HH24:MI:SS'), 'A01'); + +-- ---------------------------- +-- Table structure for SYS_DEPART +-- ---------------------------- +DROP TABLE "SYS_DEPART"; +CREATE TABLE "SYS_DEPART" ( +"ID" NVARCHAR2(32) NOT NULL , +"PARENT_ID" NVARCHAR2(32) NULL , +"DEPART_NAME" NVARCHAR2(100) NOT NULL , +"DEPART_NAME_EN" NVARCHAR2(500) NULL , +"DEPART_NAME_ABBR" NVARCHAR2(500) NULL , +"DEPART_ORDER" NUMBER(11) NULL , +"DESCRIPTION" NVARCHAR2(500) NULL , +"ORG_CATEGORY" NVARCHAR2(10) NOT NULL , +"ORG_TYPE" NVARCHAR2(10) NULL , +"ORG_CODE" NVARCHAR2(64) NOT NULL , +"MOBILE" NVARCHAR2(32) NULL , +"FAX" NVARCHAR2(32) NULL , +"ADDRESS" NVARCHAR2(100) NULL , +"MEMO" NVARCHAR2(500) NULL , +"STATUS" NVARCHAR2(1) NULL , +"DEL_FLAG" NVARCHAR2(1) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_DEPART" IS '组织机构表'; +COMMENT ON COLUMN "SYS_DEPART"."ID" IS 'ID'; +COMMENT ON COLUMN "SYS_DEPART"."PARENT_ID" IS '父机构ID'; +COMMENT ON COLUMN "SYS_DEPART"."DEPART_NAME" IS '机构/部门名称'; +COMMENT ON COLUMN "SYS_DEPART"."DEPART_NAME_EN" IS '英文名'; +COMMENT ON COLUMN "SYS_DEPART"."DEPART_NAME_ABBR" IS '缩写'; +COMMENT ON COLUMN "SYS_DEPART"."DEPART_ORDER" IS '排序'; +COMMENT ON COLUMN "SYS_DEPART"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_DEPART"."ORG_CATEGORY" IS '机构类别 1公司,2组织机构,2岗位'; +COMMENT ON COLUMN "SYS_DEPART"."ORG_TYPE" IS '机构类型 1一级部门 2子部门'; +COMMENT ON COLUMN "SYS_DEPART"."ORG_CODE" IS '机构编码'; +COMMENT ON COLUMN "SYS_DEPART"."MOBILE" IS '手机号'; +COMMENT ON COLUMN "SYS_DEPART"."FAX" IS '传真'; +COMMENT ON COLUMN "SYS_DEPART"."ADDRESS" IS '地址'; +COMMENT ON COLUMN "SYS_DEPART"."MEMO" IS '备注'; +COMMENT ON COLUMN "SYS_DEPART"."STATUS" IS '状态(1启用,0不启用)'; +COMMENT ON COLUMN "SYS_DEPART"."DEL_FLAG" IS '删除状态(0,正常,1已删除)'; +COMMENT ON COLUMN "SYS_DEPART"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_DEPART"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_DEPART"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_DEPART"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of SYS_DEPART +-- ---------------------------- +INSERT INTO "SYS_DEPART" VALUES ('c6d7cb4deeac411cb3384b1b31278596', null, '公司总部', null, null, '0', null, '1', '1', 'A01', null, null, null, null, null, '0', 'admin', TO_DATE('2019-02-11 14:21:51', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 14:19:08', 'YYYY-MM-DD HH24:MI:SS')); + +-- ---------------------------- +-- Table structure for SYS_DEPART_PERMISSION +-- ---------------------------- +DROP TABLE "SYS_DEPART_PERMISSION"; +CREATE TABLE "SYS_DEPART_PERMISSION" ( +"ID" NVARCHAR2(32) NOT NULL , +"DEPART_ID" NVARCHAR2(32) NULL , +"PERMISSION_ID" NVARCHAR2(32) NULL , +"DATA_RULE_IDS" NVARCHAR2(1000) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_DEPART_PERMISSION" IS '部门权限表'; +COMMENT ON COLUMN "SYS_DEPART_PERMISSION"."DEPART_ID" IS '部门id'; +COMMENT ON COLUMN "SYS_DEPART_PERMISSION"."PERMISSION_ID" IS '权限id'; +COMMENT ON COLUMN "SYS_DEPART_PERMISSION"."DATA_RULE_IDS" IS '数据规则id'; + +-- ---------------------------- +-- Records of SYS_DEPART_PERMISSION +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_DEPART_ROLE +-- ---------------------------- +DROP TABLE "SYS_DEPART_ROLE"; +CREATE TABLE "SYS_DEPART_ROLE" ( +"ID" NVARCHAR2(32) NOT NULL , +"DEPART_ID" NVARCHAR2(32) NULL , +"ROLE_NAME" NVARCHAR2(200) NULL , +"ROLE_CODE" NVARCHAR2(100) NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_DEPART_ROLE" IS '部门角色表'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."DEPART_ID" IS '部门id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."ROLE_NAME" IS '部门角色名称'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."ROLE_CODE" IS '部门角色编码'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_DEPART_ROLE"."UPDATE_TIME" IS '更新时间'; + +-- ---------------------------- +-- Records of SYS_DEPART_ROLE +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_DEPART_ROLE_PERMISSION +-- ---------------------------- +DROP TABLE "SYS_DEPART_ROLE_PERMISSION"; +CREATE TABLE "SYS_DEPART_ROLE_PERMISSION" ( +"ID" NVARCHAR2(32) NOT NULL , +"DEPART_ID" NVARCHAR2(32) NULL , +"ROLE_ID" NVARCHAR2(32) NULL , +"PERMISSION_ID" NVARCHAR2(32) NULL , +"DATA_RULE_IDS" NVARCHAR2(1000) NULL , +"OPERATE_DATE" DATE NULL , +"OPERATE_IP" NVARCHAR2(20) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_DEPART_ROLE_PERMISSION" IS '部门角色权限表'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."DEPART_ID" IS '部门id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."ROLE_ID" IS '角色id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."PERMISSION_ID" IS '权限id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."DATA_RULE_IDS" IS '数据权限ids'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."OPERATE_DATE" IS '操作时间'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_PERMISSION"."OPERATE_IP" IS '操作ip'; + +-- ---------------------------- +-- Records of SYS_DEPART_ROLE_PERMISSION +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_DEPART_ROLE_USER +-- ---------------------------- +DROP TABLE "SYS_DEPART_ROLE_USER"; +CREATE TABLE "SYS_DEPART_ROLE_USER" ( +"ID" NVARCHAR2(32) NOT NULL , +"USER_ID" NVARCHAR2(32) NULL , +"DROLE_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_DEPART_ROLE_USER" IS '部门角色用户表'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_USER"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_USER"."USER_ID" IS '用户id'; +COMMENT ON COLUMN "SYS_DEPART_ROLE_USER"."DROLE_ID" IS '角色id'; + +-- ---------------------------- +-- Records of SYS_DEPART_ROLE_USER +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_DICT +-- ---------------------------- +DROP TABLE "SYS_DICT"; +CREATE TABLE "SYS_DICT" ( +"ID" NVARCHAR2(32) NOT NULL , +"DICT_NAME" NVARCHAR2(100) NOT NULL , +"DICT_CODE" NVARCHAR2(100) NOT NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"DEL_FLAG" NUMBER(11) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"TYPE" NUMBER(11) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_DICT"."DICT_NAME" IS '字典名称'; +COMMENT ON COLUMN "SYS_DICT"."DICT_CODE" IS '字典编码'; +COMMENT ON COLUMN "SYS_DICT"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_DICT"."DEL_FLAG" IS '删除状态'; +COMMENT ON COLUMN "SYS_DICT"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_DICT"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_DICT"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_DICT"."UPDATE_TIME" IS '更新时间'; +COMMENT ON COLUMN "SYS_DICT"."TYPE" IS '字典类型0为string,1为number'; + +-- ---------------------------- +-- Records of SYS_DICT +-- ---------------------------- +INSERT INTO "SYS_DICT" VALUES ('0b5d19e1fce4b2e6647e6b4a17760c14', '通告类型', 'msg_category', '消息类型1:通知公告2:系统消息', '0', 'admin', TO_DATE('2019-04-22 18:01:35', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('1174511106530525185', '机构类型', 'org_category', '机构类型 1公司,2部门 3岗位', '0', 'admin', TO_DATE('2019-09-19 10:30:43', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('1209733563293962241', '数据库类型', 'database_type', null, '0', 'admin', TO_DATE('2019-12-25 15:12:12', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('1232913193820581889', 'Online表单业务分类', 'ol_form_biz_type', null, '0', 'admin', TO_DATE('2020-02-27 14:19:46', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-27 14:20:23', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('1250687930947620866', '定时任务状态', 'quartz_status', null, '0', 'admin', TO_DATE('2020-04-16 15:30:14', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "SYS_DICT" VALUES ('1280401766745718786', '租户状态', 'tenant_status', '租户状态', '0', 'admin', TO_DATE('2020-07-07 15:22:25', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('236e8a4baff0db8c62c00dd95632834f', '同步工作流引擎', 'activiti_sync', '同步工作流引擎', '0', 'admin', TO_DATE('2019-05-15 15:27:33', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('2e02df51611a4b9632828ab7e5338f00', '权限策略', 'perms_type', '权限策略', '0', 'admin', TO_DATE('2019-04-26 18:26:55', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('2f0320997ade5dd147c90130f7218c3e', '推送类别', 'msg_type', null, '0', 'admin', TO_DATE('2019-03-17 21:21:32', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-26 19:57:45', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('3486f32803bb953e7155dab3513dc68b', '删除状态', 'del_flag', null, '0', 'admin', TO_DATE('2019-01-18 21:46:26', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-30 11:17:11', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('3d9a351be3436fbefb1307d4cfb49bf2', '性别', 'sex', null, '0', null, TO_DATE('2019-01-04 14:56:32', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-30 11:28:27', 'YYYY-MM-DD HH24:MI:SS'), '1'); +INSERT INTO "SYS_DICT" VALUES ('4274efc2292239b6f000b153f50823ff', '全局权限策略', 'global_perms_type', '全局权限策略', '0', 'admin', TO_DATE('2019-05-10 17:54:05', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('4c753b5293304e7a445fd2741b46529d', '字典状态', 'dict_item_status', null, '0', 'admin', TO_DATE('2020-06-18 23:18:42', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-30 19:33:52', 'YYYY-MM-DD HH24:MI:SS'), '1'); +INSERT INTO "SYS_DICT" VALUES ('4d7fec1a7799a436d26d02325eff295e', '优先级', 'priority', '优先级', '0', 'admin', TO_DATE('2019-03-16 17:03:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-16 17:39:23', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('4e4602b3e3686f0911384e188dc7efb4', '条件规则', 'rule_conditions', null, '0', 'admin', TO_DATE('2019-04-01 10:15:03', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 10:30:47', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('4f69be5f507accea8d5df5f11346181a', '发送消息类型', 'msgType', null, '0', 'admin', TO_DATE('2019-04-11 14:27:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('68168534ff5065a152bfab275c2136f8', '有效无效状态', 'valid_status', '有效无效状态', '0', 'admin', TO_DATE('2020-09-26 19:21:14', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-26 19:21:23', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('72cce0989df68887546746d8f09811aa', 'Online表单类型', 'cgform_table_type', null, '0', 'admin', TO_DATE('2019-01-27 10:13:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-30 11:37:36', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('78bda155fe380b1b3f175f1e88c284c6', '流程状态', 'bpm_status', '流程状态', '0', 'admin', TO_DATE('2019-05-09 16:31:52', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('83bfb33147013cc81640d5fd9eda030c', '日志类型', 'log_type', null, '0', 'admin', TO_DATE('2019-03-18 23:22:19', 'YYYY-MM-DD HH24:MI:SS'), null, null, '1'); +INSERT INTO "SYS_DICT" VALUES ('845da5006c97754728bf48b6a10f79cc', '状态', 'status', null, '0', 'admin', TO_DATE('2019-03-18 21:45:25', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-18 21:58:25', 'YYYY-MM-DD HH24:MI:SS'), '0'); +INSERT INTO "SYS_DICT" VALUES ('880a895c98afeca9d9ac39f29e67c13e', '操作类型', 'operate_type', '操作类型', '0', 'admin', TO_DATE('2019-07-22 10:54:29', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('8dfe32e2d29ea9430a988b3b558bf233', '发布状态', 'send_status', '发布状态', '0', 'admin', TO_DATE('2019-04-16 17:40:42', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('a7adbcd86c37f7dbc9b66945c82ef9e6', '1是0否', 'yn', null, '0', 'admin', TO_DATE('2019-05-22 19:29:29', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('a9d9942bd0eccb6e89de92d130ec4c4a', '消息发送状态', 'msgSendStatus', null, '0', 'admin', TO_DATE('2019-04-12 18:18:17', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('ac2f7c0c5c5775fcea7e2387bcb22f01', '菜单类型', 'menu_type', null, '0', 'admin', TO_DATE('2020-12-18 23:24:32', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 15:27:06', 'YYYY-MM-DD HH24:MI:SS'), '1'); +INSERT INTO "SYS_DICT" VALUES ('c36169beb12de8a71c8683ee7c28a503', '部门状态', 'depart_status', null, '0', 'admin', TO_DATE('2019-03-18 21:59:51', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0'); +INSERT INTO "SYS_DICT" VALUES ('fc6cd58fde2e8481db10d3a1e68ce70c', '用户状态', 'user_status', null, '0', 'admin', TO_DATE('2019-03-18 21:57:25', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-18 23:11:58', 'YYYY-MM-DD HH24:MI:SS'), '1'); + +-- ---------------------------- +-- Table structure for SYS_DICT_ITEM +-- ---------------------------- +DROP TABLE "SYS_DICT_ITEM"; +CREATE TABLE "SYS_DICT_ITEM" ( +"ID" NVARCHAR2(32) NOT NULL , +"DICT_ID" NVARCHAR2(32) NULL , +"ITEM_TEXT" NVARCHAR2(100) NOT NULL , +"ITEM_VALUE" NVARCHAR2(100) NOT NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"SORT_ORDER" NUMBER(11) NULL , +"STATUS" NUMBER(11) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_DICT_ITEM"."DICT_ID" IS '字典id'; +COMMENT ON COLUMN "SYS_DICT_ITEM"."ITEM_TEXT" IS '字典项文本'; +COMMENT ON COLUMN "SYS_DICT_ITEM"."ITEM_VALUE" IS '字典项值'; +COMMENT ON COLUMN "SYS_DICT_ITEM"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_DICT_ITEM"."SORT_ORDER" IS '排序'; +COMMENT ON COLUMN "SYS_DICT_ITEM"."STATUS" IS '状态(1启用 0不启用)'; + +-- ---------------------------- +-- Records of SYS_DICT_ITEM +-- ---------------------------- +INSERT INTO "SYS_DICT_ITEM" VALUES ('0072d115e07c875d76c9b022e2179128', '4d7fec1a7799a436d26d02325eff295e', '低', 'L', '低', '3', '1', 'admin', TO_DATE('2019-04-16 17:04:59', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('05a2e732ce7b00aa52141ecc3e330b4e', '3486f32803bb953e7155dab3513dc68b', '已删除', '1', null, null, '1', 'admin', TO_DATE('2025-10-18 21:46:56', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-28 22:23:20', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('0c9532916f5cd722017b46bc4d953e41', '2f0320997ade5dd147c90130f7218c3e', '指定用户', 'USER', null, null, '1', 'admin', TO_DATE('2019-03-17 21:22:19', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-17 21:22:28', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('0ca4beba9efc4f9dd54af0911a946d5c', '72cce0989df68887546746d8f09811aa', '附表', '3', null, '3', '1', 'admin', TO_DATE('2019-03-27 10:13:43', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1030a2652608f5eac3b49d70458b8532', '2e02df51611a4b9632828ab7e5338f00', '禁用', '2', '禁用', '2', '1', 'admin', TO_DATE('2021-03-26 18:27:28', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-26 18:39:11', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1174509082208395266', '1174511106530525185', '岗位', '3', '岗位', '1', '1', 'admin', TO_DATE('2019-09-19 10:31:16', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1174511197735665665', '1174511106530525185', '公司', '1', '公司', '1', '1', 'admin', TO_DATE('2019-09-19 10:31:05', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1174511244036587521', '1174511106530525185', '部门', '2', '部门', '1', '1', 'admin', TO_DATE('2019-09-19 10:31:16', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1199607547704647681', '4f69be5f507accea8d5df5f11346181a', '系统', '4', null, '1', '1', 'admin', TO_DATE('2019-11-27 16:35:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-11-27 19:37:46', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1209733775114702850', '1209733563293962241', 'MySQL5.5', '1', null, '1', '1', 'admin', TO_DATE('2019-12-25 15:13:02', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1209733839933476865', '1209733563293962241', 'Oracle', '2', null, '3', '1', 'admin', TO_DATE('2019-12-25 15:13:18', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1209733903020003330', '1209733563293962241', 'SQLServer', '3', null, '4', '1', 'admin', TO_DATE('2019-12-25 15:13:33', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1232913424813486081', '1232913193820581889', '官方示例', 'demo', null, '1', '1', 'admin', TO_DATE('2020-02-27 14:20:42', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-27 14:21:37', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1232913493717512194', '1232913193820581889', '流程表单', 'bpm', null, '2', '1', 'admin', TO_DATE('2020-02-27 14:20:58', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-27 14:22:20', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1232913605382467585', '1232913193820581889', '测试表单', 'temp', null, '4', '1', 'admin', TO_DATE('2020-02-27 14:21:25', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-27 14:22:16', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1232914232372195330', '1232913193820581889', '导入表单', 'bdfl_include', null, '5', '1', 'admin', TO_DATE('2020-02-27 14:23:54', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1234371726545010689', '4e4602b3e3686f0911384e188dc7efb4', '左模糊', 'LEFT_LIKE', '左模糊', '7', '1', 'admin', TO_DATE('2020-03-02 14:55:27', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1234371809495760898', '4e4602b3e3686f0911384e188dc7efb4', '右模糊', 'RIGHT_LIKE', '右模糊', '7', '1', 'admin', TO_DATE('2020-03-02 14:55:47', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1250688147579228161', '1250687930947620866', '正常', '0', null, '1', '1', 'admin', TO_DATE('2020-04-16 15:31:05', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1250688201064992770', '1250687930947620866', '停止', '-1', null, '1', '1', 'admin', TO_DATE('2020-04-16 15:31:18', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1280401815068295170', '1280401766745718786', '正常', '1', null, '1', '1', 'admin', TO_DATE('2020-07-07 15:22:36', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1280401847607705602', '1280401766745718786', '冻结', '0', null, '1', '1', 'admin', TO_DATE('2020-07-07 15:22:44', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('1334440962954936321', '1209733563293962241', 'MYSQL5.7', '4', null, '1', '1', 'admin', TO_DATE('2020-12-03 18:16:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-12-03 18:16:02', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('222705e11ef0264d4214affff1fb4ff9', '4f69be5f507accea8d5df5f11346181a', '短信', '1', null, '1', '1', 'admin', TO_DATE('2023-02-28 10:50:36', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-28 10:58:11', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('23a5bb76004ed0e39414e928c4cde155', '4e4602b3e3686f0911384e188dc7efb4', '不等于', '!=', '不等于', '3', '1', 'admin', TO_DATE('2019-04-01 16:46:15', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:48:40', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('25847e9cb661a7c711f9998452dc09e6', '4e4602b3e3686f0911384e188dc7efb4', '小于等于', '<=', '小于等于', '6', '1', 'admin', TO_DATE('2019-04-01 16:44:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:10', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('2d51376643f220afdeb6d216a8ac2c01', '68168534ff5065a152bfab275c2136f8', '有效', '1', '有效', '2', '1', 'admin', TO_DATE('2019-04-26 19:22:01', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('308c8aadf0c37ecdde188b97ca9833f5', '8dfe32e2d29ea9430a988b3b558bf233', '已发布', '1', '已发布', '2', '1', 'admin', TO_DATE('2019-04-16 17:41:24', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('333e6b2196e01ef9a5f76d74e86a6e33', '8dfe32e2d29ea9430a988b3b558bf233', '未发布', '0', '未发布', '1', '1', 'admin', TO_DATE('2019-04-16 17:41:12', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('33bc9d9f753cf7dc40e70461e50fdc54', 'a9d9942bd0eccb6e89de92d130ec4c4a', '发送失败', '2', null, '3', '1', 'admin', TO_DATE('2019-04-12 18:20:02', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('3fbc03d6c994ae06d083751248037c0e', '78bda155fe380b1b3f175f1e88c284c6', '已完成', '3', '已完成', '3', '1', 'admin', TO_DATE('2019-05-09 16:33:25', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('41d7aaa40c9b61756ffb1f28da5ead8e', '0b5d19e1fce4b2e6647e6b4a17760c14', '通知公告', '1', null, '1', '1', 'admin', TO_DATE('2019-04-22 18:01:57', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('41fa1e9571505d643aea87aeb83d4d76', '4e4602b3e3686f0911384e188dc7efb4', '等于', '=', '等于', '4', '1', 'admin', TO_DATE('2019-04-01 16:45:24', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:00', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('43d2295b8610adce9510ff196a49c6e9', '845da5006c97754728bf48b6a10f79cc', '正常', '1', null, null, '1', 'admin', TO_DATE('2019-03-18 21:45:51', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('4f05fb5376f4c61502c5105f52e4dd2b', '83bfb33147013cc81640d5fd9eda030c', '操作日志', '2', null, null, '1', 'admin', TO_DATE('2019-03-18 23:22:49', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('51222413e5906cdaf160bb5c86fb827c', 'a7adbcd86c37f7dbc9b66945c82ef9e6', '是', '1', null, '1', '1', 'admin', TO_DATE('2019-05-22 19:29:45', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('538fca35afe004972c5f3947c039e766', '2e02df51611a4b9632828ab7e5338f00', '显示', '1', '显示', '1', '1', 'admin', TO_DATE('2025-03-26 18:27:13', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-26 18:39:07', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('5584c21993bde231bbde2b966f2633ac', '4e4602b3e3686f0911384e188dc7efb4', '自定义SQL表达式', 'USE_SQL_RULES', '自定义SQL表达式', '9', '1', 'admin', TO_DATE('2019-04-01 10:45:24', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:27', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('58b73b344305c99b9d8db0fc056bbc0a', '72cce0989df68887546746d8f09811aa', '主表', '2', null, '2', '1', 'admin', TO_DATE('2019-03-27 10:13:36', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('5b65a88f076b32e8e69d19bbaadb52d5', '2f0320997ade5dd147c90130f7218c3e', '全体用户', 'ALL', null, null, '1', 'admin', TO_DATE('2020-10-17 21:22:43', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-28 22:17:09', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('5d833f69296f691843ccdd0c91212b6b', '880a895c98afeca9d9ac39f29e67c13e', '修改', '3', null, '3', '1', 'admin', TO_DATE('2019-07-22 10:55:07', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-07-22 10:55:41', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('5d84a8634c8fdfe96275385075b105c9', '3d9a351be3436fbefb1307d4cfb49bf2', '女', '2', null, '2', '1', null, TO_DATE('2019-01-04 14:56:56', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2019-01-04 17:38:12', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('66c952ae2c3701a993e7db58f3baf55e', '4e4602b3e3686f0911384e188dc7efb4', '大于', '>', '大于', '1', '1', 'admin', TO_DATE('2019-04-01 10:45:46', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:48:29', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('69cacf64e244100289ddd4aa9fa3b915', 'a9d9942bd0eccb6e89de92d130ec4c4a', '未发送', '0', null, '1', '1', 'admin', TO_DATE('2019-04-12 18:19:23', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('6a7a9e1403a7943aba69e54ebeff9762', '4f69be5f507accea8d5df5f11346181a', '邮件', '2', null, '2', '1', 'admin', TO_DATE('2031-02-28 10:50:44', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-28 10:59:03', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('6c682d78ddf1715baf79a1d52d2aa8c2', '72cce0989df68887546746d8f09811aa', '单表', '1', null, '1', '1', 'admin', TO_DATE('2019-03-27 10:13:29', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('6d404fd2d82311fbc87722cd302a28bc', '4e4602b3e3686f0911384e188dc7efb4', '模糊', 'LIKE', '模糊', '7', '1', 'admin', TO_DATE('2019-04-01 16:46:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:20', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('6d4e26e78e1a09699182e08516c49fc4', '4d7fec1a7799a436d26d02325eff295e', '高', 'H', '高', '1', '1', 'admin', TO_DATE('2019-04-16 17:04:24', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('75b260d7db45a39fc7f21badeabdb0ed', 'c36169beb12de8a71c8683ee7c28a503', '不启用', '0', null, null, '1', 'admin', TO_DATE('2019-03-18 23:29:41', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-18 23:29:54', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('7688469db4a3eba61e6e35578dc7c2e5', 'c36169beb12de8a71c8683ee7c28a503', '启用', '1', null, null, '1', 'admin', TO_DATE('2019-03-18 23:29:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('78ea6cadac457967a4b1c4eb7aaa418c', 'fc6cd58fde2e8481db10d3a1e68ce70c', '正常', '1', null, null, '1', 'admin', TO_DATE('2019-03-18 23:30:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('7ccf7b80c70ee002eceb3116854b75cb', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '按钮权限', '2', null, null, '1', 'admin', TO_DATE('2019-03-18 23:25:40', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('81fb2bb0e838dc68b43f96cc309f8257', 'fc6cd58fde2e8481db10d3a1e68ce70c', '冻结', '2', null, null, '1', 'admin', TO_DATE('2019-03-18 23:30:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('83250269359855501ec4e9c0b7e21596', '4274efc2292239b6f000b153f50823ff', '可见/可访问(授权后可见/可访问)', '1', null, '1', '1', 'admin', TO_DATE('2019-05-10 17:54:51', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('84778d7e928bc843ad4756db1322301f', '4e4602b3e3686f0911384e188dc7efb4', '大于等于', '>=', '大于等于', '5', '1', 'admin', TO_DATE('2019-04-01 10:46:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:05', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('84dfc178dd61b95a72900fcdd624c471', '78bda155fe380b1b3f175f1e88c284c6', '处理中', '2', '处理中', '2', '1', 'admin', TO_DATE('2019-05-09 16:33:01', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('86f19c7e0a73a0bae451021ac05b99dd', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '子菜单', '1', null, null, '1', 'admin', TO_DATE('2019-03-18 23:25:27', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('8bccb963e1cd9e8d42482c54cc609ca2', '4f69be5f507accea8d5df5f11346181a', '微信', '3', null, '3', '1', 'admin', TO_DATE('2021-05-11 14:29:12', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-11 14:29:31', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('8c618902365ca681ebbbe1e28f11a548', '4c753b5293304e7a445fd2741b46529d', '启用', '1', null, '0', '1', 'admin', TO_DATE('2020-07-18 23:19:27', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-17 14:51:18', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('8cdf08045056671efd10677b8456c999', '4274efc2292239b6f000b153f50823ff', '可编辑(未授权时禁用)', '2', null, '2', '1', 'admin', TO_DATE('2019-05-10 17:55:38', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('8ff48e657a7c5090d4f2a59b37d1b878', '4d7fec1a7799a436d26d02325eff295e', '中', 'M', '中', '2', '1', 'admin', TO_DATE('2019-04-16 17:04:40', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('948923658baa330319e59b2213cda97c', '880a895c98afeca9d9ac39f29e67c13e', '添加', '2', null, '2', '1', 'admin', TO_DATE('2019-07-22 10:54:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-07-22 10:55:36', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('9a96c4a4e4c5c9b4e4d0cbf6eb3243cc', '4c753b5293304e7a445fd2741b46529d', '不启用', '0', null, '1', '1', 'admin', TO_DATE('2019-03-18 23:19:53', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('a1e7d1ca507cff4a480c8caba7c1339e', '880a895c98afeca9d9ac39f29e67c13e', '导出', '6', null, '6', '1', 'admin', TO_DATE('2019-07-22 12:06:50', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('a2be752dd4ec980afaec1efd1fb589af', '8dfe32e2d29ea9430a988b3b558bf233', '已撤销', '2', '已撤销', '3', '1', 'admin', TO_DATE('2019-04-16 17:41:39', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('aa0d8a8042a18715a17f0a888d360aa4', 'ac2f7c0c5c5775fcea7e2387bcb22f01', '一级菜单', '0', null, null, '1', 'admin', TO_DATE('2019-03-18 23:24:52', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('adcf2a1fe93bb99a84833043f475fe0b', '4e4602b3e3686f0911384e188dc7efb4', '包含', 'IN', '包含', '8', '1', 'admin', TO_DATE('2019-04-01 16:45:47', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:49:24', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('b029a41a851465332ee4ee69dcf0a4c2', '0b5d19e1fce4b2e6647e6b4a17760c14', '系统消息', '2', null, '1', '1', 'admin', TO_DATE('2019-02-22 18:02:08', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-22 18:02:13', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('b2a8b4bb2c8e66c2c4b1bb086337f393', '3486f32803bb953e7155dab3513dc68b', '正常', '0', null, null, '1', 'admin', TO_DATE('2022-10-18 21:46:48', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-28 22:22:20', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('b5f3bd5f66bb9a83fecd89228c0d93d1', '68168534ff5065a152bfab275c2136f8', '无效', '0', '无效', '1', '1', 'admin', TO_DATE('2019-04-26 19:21:49', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('b9fbe2a3602d4a27b45c100ac5328484', '78bda155fe380b1b3f175f1e88c284c6', '待提交', '1', '待提交', '1', '1', 'admin', TO_DATE('2019-05-09 16:32:35', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('ba27737829c6e0e582e334832703d75e', '236e8a4baff0db8c62c00dd95632834f', '同步', '1', '同步', '1', '1', 'admin', TO_DATE('2019-05-15 15:28:15', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('bcec04526b04307e24a005d6dcd27fd6', '880a895c98afeca9d9ac39f29e67c13e', '导入', '5', null, '5', '1', 'admin', TO_DATE('2019-07-22 12:06:41', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('c53da022b9912e0aed691bbec3c78473', '880a895c98afeca9d9ac39f29e67c13e', '查询', '1', null, '1', '1', 'admin', TO_DATE('2019-07-22 10:54:51', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('c5700a71ad08994d18ad1dacc37a71a9', 'a7adbcd86c37f7dbc9b66945c82ef9e6', '否', '0', null, '1', '1', 'admin', TO_DATE('2019-05-22 19:29:55', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('df168368dcef46cade2aadd80100d8aa', '3d9a351be3436fbefb1307d4cfb49bf2', '男', '1', null, '1', '1', null, TO_DATE('2027-08-04 14:56:49', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-23 22:44:44', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('e6329e3a66a003819e2eb830b0ca2ea0', '4e4602b3e3686f0911384e188dc7efb4', '小于', '<', '小于', '2', '1', 'admin', TO_DATE('2019-04-01 16:44:15', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-01 17:48:34', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('e94eb7af89f1dbfa0d823580a7a6e66a', '236e8a4baff0db8c62c00dd95632834f', '不同步', '0', '不同步', '2', '1', 'admin', TO_DATE('2019-05-15 15:28:28', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('f16c5706f3ae05c57a53850c64ce7c45', 'a9d9942bd0eccb6e89de92d130ec4c4a', '发送成功', '1', null, '2', '1', 'admin', TO_DATE('2019-04-12 18:19:43', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('f2a7920421f3335afdf6ad2b342f6b5d', '845da5006c97754728bf48b6a10f79cc', '冻结', '2', null, null, '1', 'admin', TO_DATE('2019-03-18 21:46:02', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('f37f90c496ec9841c4c326b065e00bb2', '83bfb33147013cc81640d5fd9eda030c', '登录日志', '1', null, null, '1', 'admin', TO_DATE('2019-03-18 23:22:37', 'YYYY-MM-DD HH24:MI:SS'), null, null); +INSERT INTO "SYS_DICT_ITEM" VALUES ('f80a8f6838215753b05e1a5ba3346d22', '880a895c98afeca9d9ac39f29e67c13e', '删除', '4', null, '4', '1', 'admin', TO_DATE('2019-07-22 10:55:14', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-07-22 10:55:30', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_DICT_ITEM" VALUES ('fe50b23ae5e68434def76f67cef35d2d', '78bda155fe380b1b3f175f1e88c284c6', '已作废', '4', '已作废', '4', '1', 'admin', TO_DATE('2021-09-09 16:33:43', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2019-05-09 16:34:40', 'YYYY-MM-DD HH24:MI:SS')); + +-- ---------------------------- +-- Table structure for SYS_FILL_RULE +-- ---------------------------- +DROP TABLE "SYS_FILL_RULE"; +CREATE TABLE "SYS_FILL_RULE" ( +"ID" NVARCHAR2(32) NOT NULL , +"RULE_NAME" NVARCHAR2(100) NULL , +"RULE_CODE" NVARCHAR2(100) NULL , +"RULE_CLASS" NVARCHAR2(100) NULL , +"RULE_PARAMS" NVARCHAR2(200) NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_FILL_RULE"."ID" IS '主键ID'; +COMMENT ON COLUMN "SYS_FILL_RULE"."RULE_NAME" IS '规则名称'; +COMMENT ON COLUMN "SYS_FILL_RULE"."RULE_CODE" IS '规则Code'; +COMMENT ON COLUMN "SYS_FILL_RULE"."RULE_CLASS" IS '规则实现类'; +COMMENT ON COLUMN "SYS_FILL_RULE"."RULE_PARAMS" IS '规则参数'; +COMMENT ON COLUMN "SYS_FILL_RULE"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "SYS_FILL_RULE"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "SYS_FILL_RULE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_FILL_RULE"."CREATE_TIME" IS '创建时间'; + +-- ---------------------------- +-- Records of SYS_FILL_RULE +-- ---------------------------- +INSERT INTO "SYS_FILL_RULE" VALUES ('1202551334738382850', '机构编码生成', 'org_num_role', 'com.jero.modules.system.rule.OrgCodeRule', '{"parentId":"c6d7cb4deeac411cb3384b1b31278596"}', 'admin', TO_DATE('2019-12-09 10:37:06', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-05 19:32:35', 'YYYY-MM-DD HH24:MI:SS')); +INSERT INTO "SYS_FILL_RULE" VALUES ('1202787623203065858', '分类字典编码生成', 'category_code_rule', 'com.jero.modules.system.rule.CategoryCodeRule', '{"pid":""}', 'admin', TO_DATE('2019-12-09 10:36:54', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-06 11:11:31', 'YYYY-MM-DD HH24:MI:SS')); + +-- ---------------------------- +-- Table structure for SYS_GATEWAY_ROUTE +-- ---------------------------- +DROP TABLE "SYS_GATEWAY_ROUTE"; +CREATE TABLE "SYS_GATEWAY_ROUTE" ( +"ID" NVARCHAR2(36) NOT NULL , +"ROUTER_ID" NVARCHAR2(50) NULL , +"NAME" NVARCHAR2(32) NULL , +"URI" NVARCHAR2(32) NULL , +"PREDICATES" NCLOB NULL , +"FILTERS" NCLOB NULL , +"RETRYABLE" NUMBER(11) NULL , +"STRIP_PREFIX" NUMBER(11) NULL , +"PERSISTABLE" NUMBER(11) NULL , +"SHOW_API" NUMBER(11) NULL , +"STATUS" NUMBER(11) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"SYS_ORG_CODE" NVARCHAR2(64) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."ROUTER_ID" IS '路由ID'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."NAME" IS '服务名'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."URI" IS '服务地址'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."PREDICATES" IS '断言'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."FILTERS" IS '过滤器'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."RETRYABLE" IS '是否重试:0-否 1-是'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."STRIP_PREFIX" IS '是否忽略前缀0-否 1-是'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."PERSISTABLE" IS '是否为保留数据:0-否 1-是'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."SHOW_API" IS '是否在接口文档中展示:0-否 1-是'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."STATUS" IS '状态:0-无效 1-有效'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_GATEWAY_ROUTE"."SYS_ORG_CODE" IS '所属部门'; + +-- ---------------------------- +-- Records of SYS_GATEWAY_ROUTE +-- ---------------------------- +INSERT INTO "SYS_GATEWAY_ROUTE" VALUES ('1331051599401857026', 'jero-demo-websocket', 'jero-demo-websocket', 'lb:ws://jero-demo', '[{"args":["/vxeSocket/**"],"name":"Path"}]', '[]', null, null, null, null, '1', 'admin', TO_DATE('2020-11-24 09:46:46', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "SYS_GATEWAY_ROUTE" VALUES ('jero-cloud-websocket', 'jero-system-websocket', 'jero-system-websocket', 'lb:ws://jero-system', '[{"args":["/websocket/**","/eoaSocket/**","/newsWebsocket/**"],"name":"Path"}]', '[]', null, null, null, null, '1', 'admin', TO_DATE('2020-11-16 19:41:51', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "SYS_GATEWAY_ROUTE" VALUES ('jero-demo', 'jero-demo', 'jero-demo', 'lb://jero-demo', '[{"args":["/mock/**","/test/**","/bigscreen/template1/**","/bigscreen/template2/**"],"name":"Path"}]', '[]', null, null, null, null, '1', 'admin', TO_DATE('2020-11-16 19:41:51', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); +INSERT INTO "SYS_GATEWAY_ROUTE" VALUES ('jero-system', 'jero-system', 'jero-system', 'lb://jero-system', '[{"args":["/sys/**","/eoa/**","/joa/**","/online/**","/bigscreen/**","/jmreport/**","/desform/**","/process/**","/act/**","/plug-in/***/","/druid/**","/generic/**"],"name":"Path"}]', '[]', null, null, null, null, '1', 'admin', TO_DATE('2020-11-16 19:41:51', 'YYYY-MM-DD HH24:MI:SS'), null, null, null); + +-- ---------------------------- +-- Table structure for SYS_LOG +-- ---------------------------- +DROP TABLE "SYS_LOG"; +CREATE TABLE "SYS_LOG" ( +"ID" NVARCHAR2(32) NOT NULL , +"LOG_TYPE" NUMBER(11) NULL , +"LOG_CONTENT" NVARCHAR2(1000) NULL , +"OPERATE_TYPE" NUMBER(11) NULL , +"USERID" NVARCHAR2(32) NULL , +"USERNAME" NVARCHAR2(100) NULL , +"IP" NVARCHAR2(100) NULL , +"METHOD" NVARCHAR2(500) NULL , +"REQUEST_URL" NVARCHAR2(255) NULL , +"REQUEST_PARAM" NCLOB NULL , +"REQUEST_TYPE" NVARCHAR2(10) NULL , +"COST_TIME" NUMBER(20) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_LOG" IS '系统日志表'; +COMMENT ON COLUMN "SYS_LOG"."LOG_TYPE" IS '日志类型(1登录日志,2操作日志)'; +COMMENT ON COLUMN "SYS_LOG"."LOG_CONTENT" IS '日志内容'; +COMMENT ON COLUMN "SYS_LOG"."OPERATE_TYPE" IS '操作类型'; +COMMENT ON COLUMN "SYS_LOG"."USERID" IS '操作用户账号'; +COMMENT ON COLUMN "SYS_LOG"."USERNAME" IS '操作用户名称'; +COMMENT ON COLUMN "SYS_LOG"."IP" IS 'IP'; +COMMENT ON COLUMN "SYS_LOG"."METHOD" IS '请求java方法'; +COMMENT ON COLUMN "SYS_LOG"."REQUEST_URL" IS '请求路径'; +COMMENT ON COLUMN "SYS_LOG"."REQUEST_PARAM" IS '请求参数'; +COMMENT ON COLUMN "SYS_LOG"."REQUEST_TYPE" IS '请求类型'; +COMMENT ON COLUMN "SYS_LOG"."COST_TIME" IS '耗时'; +COMMENT ON COLUMN "SYS_LOG"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_LOG"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_LOG"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_LOG"."UPDATE_TIME" IS '更新时间'; + +-- ---------------------------- +-- Records of SYS_LOG +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_PERMISSION +-- ---------------------------- +DROP TABLE "SYS_PERMISSION"; +CREATE TABLE "SYS_PERMISSION" ( +"ID" NVARCHAR2(32) NOT NULL , +"PARENT_ID" NVARCHAR2(32) NULL , +"NAME" NVARCHAR2(100) NULL , +"URL" NVARCHAR2(255) NULL , +"COMPONENT" NVARCHAR2(255) NULL , +"COMPONENT_NAME" NVARCHAR2(100) NULL , +"REDIRECT" NVARCHAR2(255) NULL , +"MENU_TYPE" NUMBER(11) NULL , +"PERMS" NVARCHAR2(255) NULL , +"PERMS_TYPE" NVARCHAR2(10) NULL , +"SORT_NO" NUMBER(8,2) NULL , +"ALWAYS_SHOW" NUMBER(4) NULL , +"ICON" NVARCHAR2(100) NULL , +"IS_ROUTE" NUMBER(4) NULL , +"IS_LEAF" NUMBER(4) NULL , +"KEEP_ALIVE" NUMBER(4) NULL , +"HIDDEN" NUMBER(11) NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"DEL_FLAG" NUMBER(11) NULL , +"RULE_FLAG" NUMBER(11) NULL , +"STATUS" NVARCHAR2(2) NULL , +"INTERNAL_OR_EXTERNAL" NUMBER(4) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_PERMISSION" IS '菜单权限表'; +COMMENT ON COLUMN "SYS_PERMISSION"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_PERMISSION"."PARENT_ID" IS '父id'; +COMMENT ON COLUMN "SYS_PERMISSION"."NAME" IS '菜单标题'; +COMMENT ON COLUMN "SYS_PERMISSION"."URL" IS '路径'; +COMMENT ON COLUMN "SYS_PERMISSION"."COMPONENT" IS '组件'; +COMMENT ON COLUMN "SYS_PERMISSION"."COMPONENT_NAME" IS '组件名字'; +COMMENT ON COLUMN "SYS_PERMISSION"."REDIRECT" IS '一级菜单跳转地址'; +COMMENT ON COLUMN "SYS_PERMISSION"."MENU_TYPE" IS '菜单类型(0:一级菜单; 1:子菜单:2:按钮权限)'; +COMMENT ON COLUMN "SYS_PERMISSION"."PERMS" IS '菜单权限编码'; +COMMENT ON COLUMN "SYS_PERMISSION"."PERMS_TYPE" IS '权限策略1显示2禁用'; +COMMENT ON COLUMN "SYS_PERMISSION"."SORT_NO" IS '菜单排序'; +COMMENT ON COLUMN "SYS_PERMISSION"."ALWAYS_SHOW" IS '聚合子路由: 1是0否'; +COMMENT ON COLUMN "SYS_PERMISSION"."ICON" IS '菜单图标'; +COMMENT ON COLUMN "SYS_PERMISSION"."IS_ROUTE" IS '是否路由菜单: 0:不是 1:是(默认值1)'; +COMMENT ON COLUMN "SYS_PERMISSION"."IS_LEAF" IS '是否叶子节点: 1:是 0:不是'; +COMMENT ON COLUMN "SYS_PERMISSION"."KEEP_ALIVE" IS '是否缓存该页面: 1:是 0:不是'; +COMMENT ON COLUMN "SYS_PERMISSION"."HIDDEN" IS '是否隐藏路由: 0否,1是'; +COMMENT ON COLUMN "SYS_PERMISSION"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_PERMISSION"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_PERMISSION"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_PERMISSION"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_PERMISSION"."UPDATE_TIME" IS '更新时间'; +COMMENT ON COLUMN "SYS_PERMISSION"."DEL_FLAG" IS '删除状态 0正常 1已删除'; +COMMENT ON COLUMN "SYS_PERMISSION"."RULE_FLAG" IS '是否添加数据权限1是0否'; +COMMENT ON COLUMN "SYS_PERMISSION"."STATUS" IS '按钮权限状态(0无效1有效)'; +COMMENT ON COLUMN "SYS_PERMISSION"."INTERNAL_OR_EXTERNAL" IS '外链菜单打开方式 0/内部打开 1/外部打开'; + +-- ---------------------------- +-- Records of SYS_PERMISSION +-- ---------------------------- +INSERT INTO "SYS_PERMISSION" VALUES ('c65321e57b7949b7a975313220de0422', '2a470fc0c3954d9dbb61de6d80846549', '异常页', '/exception', 'layouts/RouteView', null, null, '1', null, null, '22', '0', 'warning', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:19', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('c6cf95444d80435eb37b2f9db3971ae6', '2a470fc0c3954d9dbb61de6d80846549', '数据回执模拟', '/demo/InterfaceTest', 'demo/InterfaceTest', null, null, '1', null, null, '6', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-02-19 16:02:23', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-21 16:25:45', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('cc50656cf9ca528e6f2150eba4714ad2', '4875ebe289344e14844d8e3ea1edd73f', '基础详情页', '/profile/basic', 'demo/profile/basic/Index', null, null, '1', null, null, '1', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('d07a2c87a451434c99ab06296727ec4f', '700b7f95165c46cc7a78bf227aa8fed3', 'JVM信息', '/monitor/JvmInfo', 'modules/monitor/JvmInfo', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-01 23:07:48', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-02 11:37:16', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('d2bbf9ebca5a8fa2e227af97d2da7548', 'c65321e57b7949b7a975313220de0422', '404', '/exception/404', 'exception/404', null, null, '1', null, null, '2', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('d7d6e2e4e2934f2c9385a623fd98c6f3', null, '系统管理', '/isystem', 'layouts/RouteView', null, null, '0', null, null, '15', '0', 'setting', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:31:34', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('d86f58e7ab516d3bc6bfb1fe10585f97', '717f6bee46f44a3897eca9abd6e2ec44', '个人中心', '/account/center', 'account/center/Index', null, null, '1', null, null, '1', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('de13e0f6328c069748de7399fcc1dbbd', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(项目)', '/list/search/project', 'demo/list/TableList', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-02-12 14:01:40', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-12 14:14:18', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('e08cb190ef230d5d4f03824198773950', '5c8042bd6c601270b2bbd9b20bccc68b', '系统通告', '/isystem/annountCement', 'system/SysAnnouncementList', null, null, '1', 'annountCement', null, '1', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2019-01-02 17:23:01', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 18:00:58', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('e1979bb53e9ea51cecc74d86fd9d2f64', '2a470fc0c3954d9dbb61de6d80846549', 'PDF预览', '/demo/jeroPdfView', 'demo/JeroPdfView', null, null, '1', null, null, '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-04-25 10:39:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:18:26', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('e3c13679c73a4f829bcff2aba8fd68b1', '2a470fc0c3954d9dbb61de6d80846549', '表单页', '/form', 'layouts/PageView', null, null, '1', null, null, '25', '0', 'form', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:54', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('e41b69c57a941a3bbcce45032fe57605', null, '开发工具', '/online', 'layouts/RouteView', null, null, '0', null, null, '18', '0', 'cloud', '1', '0', '0', '0', null, 'admin', TO_DATE('2019-03-08 10:43:10', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:31:28', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('e5973686ed495c379d829ea8b2881fc6', 'e3c13679c73a4f829bcff2aba8fd68b1', '高级表单', '/form/advanced-form', 'demo/form/advancedForm/AdvancedForm', null, null, '1', null, null, '3', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('e6bfd1fcabfd7942fdd05f076d1dad38', '2a470fc0c3954d9dbb61de6d80846549', '打印测试', '/demo/PrintDemo', 'demo/PrintDemo', null, null, '1', null, null, '3', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-02-19 15:58:48', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-07 20:14:39', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('ebb9d82ea16ad864071158e0c449d186', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '分类字典', '/isys/category', 'system/SysCategoryList', null, null, '1', 'sys:category:list', '1', '5.20', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-05-29 18:48:07', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-23 22:45:33', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('ec8d607d0156e198b11853760319c646', '6e73eb3c26099c191bf03852ee1310a1', '安全设置', '/account/settings/security', 'account/settings/Security', null, null, '1', 'SecuritySettings', null, null, null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-26 18:59:52', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('f0675b52d89100ee88472b6800754a08', '1371830841603710977', '统计报表', '/report', 'layouts/RouteView', null, null, '1', null, null, '1', '0', 'bar-chart', '1', '0', '0', '0', null, 'admin', TO_DATE('2019-04-03 18:32:02', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:29:03', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('f1cb187abf927c88b89470d08615f5ac', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '数据字典', '/isystem/dict', 'system/DictList', null, null, '1', 'sys:dict:list', null, '5', '0', null, '1', '0', '0', '0', null, null, TO_DATE('2018-12-28 13:54:43', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-23 22:45:25', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('f23d9bfff4d9aa6b68569ba2cff38415', '540a2936940846cb98114ffb0d145cb8', '标准列表', '/list/basic-list', 'demo/list/StandardList', null, null, '1', null, null, '6', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('f780d0d3083d849ccbdb1b1baee4911d', '5c8042bd6c601270b2bbd9b20bccc68b', '模板管理', '/modules/message/sysMessageTemplateList', 'modules/message/SysMessageTemplateList', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-09 11:50:31', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-12 10:16:34', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('fb07ca05a3e13674dbf6d3245956da2e', '540a2936940846cb98114ffb0d145cb8', '搜索列表', '/list/search', 'demo/list/search/SearchLayout', null, '/list/search/article', '1', null, null, '8', '0', null, '1', '0', null, '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-12 15:09:13', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('fb367426764077dcf94640c843733985', '2a470fc0c3954d9dbb61de6d80846549', '一对多示例', '/demo/jeroOrderMainList', 'demo/JeroOrderMainList', null, null, '1', null, null, '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-02-15 16:24:11', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:18:47', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('fc810a2267dd183e4ef7c71cc60f4670', '700b7f95165c46cc7a78bf227aa8fed3', '请求追踪', '/monitor/HttpTrace', 'modules/monitor/HttpTrace', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-02 09:46:19', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-02 11:37:27', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('fedfbf4420536cacc0218557d263dfea', '6e73eb3c26099c191bf03852ee1310a1', '新消息通知', '/account/settings/notification', 'account/settings/Notification', null, null, '1', 'NotificationSettings', null, null, null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-26 19:02:05', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('00a2a0ae65cdca5e93209cdbde97cbe6', '2e42e3835c2b44ec9f7bc26c146ee531', '成功', '/result/success', 'result/Success', null, null, '1', null, null, '1', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('2e42e3835c2b44ec9f7bc26c146ee531', '2a470fc0c3954d9dbb61de6d80846549', '结果页', '/result', 'layouts/PageView', null, null, '1', null, null, '20', '0', 'check-circle-o', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:22:54', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1371831353354936322', null, '日志中心', '/log', 'layouts/RouteView', null, null, '0', null, '1', '10', '0', 'copy', '1', '0', '0', '0', null, 'admin', TO_DATE('2021-03-16 22:30:57', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:37:10', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('3f915b2769fc80648e92d04e84ca059d', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '用户管理', '/isystem/user', 'system/UserList', null, null, '1', 'sys:user:list', null, '1.10', '0', null, '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:36:24', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('3fac0d3c9cd40fa53ab70d4c583821f8', '2a470fc0c3954d9dbb61de6d80846549', '分屏', '/demo/splitPanel', 'demo/SplitPanel', null, null, '1', null, null, '6', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-25 16:27:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('4148ec82b6acd69f470bea75fe41c357', '2a470fc0c3954d9dbb61de6d80846549', '单表模型示例', '/demo/JeroDemoList', 'demo/JeroDemoList', 'DemoList', null, '1', null, null, '1', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2018-12-28 15:57:30', 'YYYY-MM-DD HH24:MI:SS'), 'jero', TO_DATE('2020-05-14 22:09:34', 'YYYY-MM-DD HH24:MI:SS'), '0', '1', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('418964ba087b90a84897b62474496b93', '540a2936940846cb98114ffb0d145cb8', '查询表格', '/list/query-list', 'demo/list/TableList', null, null, '1', null, null, '1', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('4356a1a67b564f0988a484f5531fd4d9', '2a470fc0c3954d9dbb61de6d80846549', '内嵌Table', '/demo/TableExpandeSub', 'demo/TableExpandeSub', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-04 22:48:13', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('45c966826eeff4c99b8f8ebfe74511fc', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '部门管理', '/isystem/depart', 'system/DepartList', null, null, '1', 'sys:depart:list', null, '1.40', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-01-29 18:47:40', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:36:47', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('4875ebe289344e14844d8e3ea1edd73f', '2a470fc0c3954d9dbb61de6d80846549', '详情页', '/profile', 'layouts/RouteView', null, null, '1', null, null, '21', '0', 'profile', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:07', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('4f66409ef3bbd69c1d80469d6e2a885e', '6e73eb3c26099c191bf03852ee1310a1', '账户绑定', '/account/settings/binding', 'account/settings/Binding', null, null, '1', 'BindingSettings', null, null, null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-26 19:01:20', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('4f84f9400e5e92c95f05b554724c2b58', '540a2936940846cb98114ffb0d145cb8', '角色列表', '/list/role-list', 'demo/list/RoleList', null, null, '1', null, null, '4', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('53a9230444d33de28aa11cc108fb1dba', '5c8042bd6c601270b2bbd9b20bccc68b', '我的消息', '/isps/userAnnouncement', 'system/UserAnnouncementList', null, null, '1', null, null, '4', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-04-19 10:16:00', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 18:01:26', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('540a2936940846cb98114ffb0d145cb8', '2a470fc0c3954d9dbb61de6d80846549', '列表页', '/list', 'layouts/PageView', null, '/list/query-list', '1', null, null, '24', '0', 'table', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:31', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('54dd5457a3190740005c1bfec55b1c34', 'e41b69c57a941a3bbcce45032fe57605', '菜单管理', '/isystem/permission', 'system/PermissionList', null, null, '1', null, null, '7', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:32:38', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('58857ff846e61794c69208e9d3a85466', '1371831353354936322', '操作日志', '/isystem/log', 'system/LogList', null, null, '1', null, null, '1', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2018-12-26 10:11:18', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:33:27', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('58b9204feaf07e47284ddb36cd2d8468', '2a470fc0c3954d9dbb61de6d80846549', '图片翻页', '/demo/imgTurnPage', 'demo/ImgTurnPage', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-25 11:36:42', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('5c2f42277948043026b7a14692456828', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '我的部门', '/isystem/departUserList', 'system/DepartUserList', null, null, '1', null, null, '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-04-17 15:12:24', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:35:26', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('5c8042bd6c601270b2bbd9b20bccc68b', null, '消息中心', '/message', 'layouts/RouteView', null, null, '0', null, null, '9', '0', 'message', '1', '0', '0', '0', null, 'admin', TO_DATE('2019-04-09 11:05:04', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:32:06', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('6531cf3421b1265aeeeabaab5e176e6d', 'e3c13679c73a4f829bcff2aba8fd68b1', '分步表单', '/form/step-form', 'demo/form/stepForm/StepForm', null, null, '1', null, null, '2', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('655563cd64b75dcf52ef7bcdd4836953', '2a470fc0c3954d9dbb61de6d80846549', '图片预览', '/demo/ImagPreview', 'demo/ImagPreview', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-17 11:18:45', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('65a8f489f25a345836b7f44b1181197a', 'c65321e57b7949b7a975313220de0422', '403', '/exception/403', 'exception/403', null, null, '1', null, null, '1', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('6ad53fd1b220989a8b71ff482d683a5a', '2a470fc0c3954d9dbb61de6d80846549', '一对多Tab示例', '/demo/tablist/jeroOrderDMainList', 'demo/tablist/JeroOrderDMainList', null, null, '1', null, null, '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-02-20 14:45:09', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:18:38', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('6e73eb3c26099c191bf03852ee1310a1', '717f6bee46f44a3897eca9abd6e2ec44', '个人设置', '/account/settings/BaseSetting', 'account/settings/Index', null, null, '1', null, null, '2', '1', null, '1', '0', null, '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-19 09:41:05', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('700b7f95165c46cc7a78bf227aa8fed3', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '性能监控', '/monitor', 'layouts/RouteView', null, null, '1', null, null, '3', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-04-02 11:34:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-09-09 14:48:51', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('717f6bee46f44a3897eca9abd6e2ec44', '2a470fc0c3954d9dbb61de6d80846549', '个人页', '/account', 'layouts/RouteView', null, null, '1', null, null, '25', '0', 'user', '1', '0', '0', '1', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:23:42', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('73678f9daa45ed17a3674131b03432fb', '540a2936940846cb98114ffb0d145cb8', '权限列表', '/list/permission-list', 'demo/list/PermissionList', null, null, '1', null, null, '5', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('7960961b0063228937da5fa8dd73d371', '2a470fc0c3954d9dbb61de6d80846549', 'JEditableTable示例', '/demo/JEditableTable', 'demo/JeroEditableTableExample', null, null, '1', null, null, '0.20', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-03-22 15:22:18', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:21:32', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('7ac9eb9ccbde2f7a033cd4944272bf1e', '540a2936940846cb98114ffb0d145cb8', '卡片列表', '/list/card', 'demo/list/CardList', null, null, '1', null, null, '7', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('841057b8a1bef8f6b4b20f9a618a7fa6', '1371831353354936322', '数据日志', '/sys/dataLog-list', 'system/DataLogList', null, null, '1', null, null, '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-03-11 19:26:49', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:33:07', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('882a73768cfd7f78f3a37584f7299656', '6e73eb3c26099c191bf03852ee1310a1', '个性化设置', '/account/settings/custom', 'account/settings/Custom', null, null, '1', 'CustomSettings', null, null, null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-26 19:00:46', 'YYYY-MM-DD HH24:MI:SS'), null, TO_DATE('2018-12-26 21:13:25', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('8b3bff2eee6f1939147f5c68292a1642', '700b7f95165c46cc7a78bf227aa8fed3', '服务器信息', '/monitor/SystemInfo', 'modules/monitor/SystemInfo', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-02 11:39:19', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-02 15:40:02', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('8d1ebd663688965f1fd86a2f0ead3416', '700b7f95165c46cc7a78bf227aa8fed3', 'Redis监控', '/monitor/redis/info', 'modules/monitor/RedisInfo', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-02 13:11:33', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-07 15:18:54', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('8d4683aacaa997ab86b966b464360338', 'e41b69c57a941a3bbcce45032fe57605', 'Online表单开发', '/online/cgform', 'modules/online/cgform/OnlCgformHeadList', null, null, '1', null, null, '1', '0', null, '1', '0', null, '0', null, 'admin', TO_DATE('2019-03-12 15:48:14', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-06-11 14:19:17', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('8fb8172747a78756c11916216b8b8066', '717f6bee46f44a3897eca9abd6e2ec44', '工作台', '/dashboard/workplace', 'dashboard/Workplace', null, null, '1', null, null, '3', '0', null, '1', '1', null, '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-02 11:45:02', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('944abf0a8fc22fe1f1154a389a574154', '5c8042bd6c601270b2bbd9b20bccc68b', '消息管理', '/modules/message/sysMessageList', 'modules/message/SysMessageList', null, null, '1', null, null, '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-04-09 11:27:53', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 18:01:20', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('9502685863ab87f0ad1134142788a385', null, '首页', '/dashboard/analysis', 'dashboard/Analysis', null, null, '0', null, null, '0', '0', 'home', '1', '1', null, '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-29 11:04:13', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('97c8629abc7848eccdb6d77c24bb3ebb', '700b7f95165c46cc7a78bf227aa8fed3', '磁盘监控', '/monitor/Disk', 'modules/monitor/DiskMonitoring', null, null, '1', null, null, '6', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-25 14:30:06', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-05 14:37:14', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('9a90363f216a6a08f32eecb3f0bf12a3', '2a470fc0c3954d9dbb61de6d80846549', 'Jero组件示例', '/demo/SelectDemo', 'demo/SelectDemo', null, null, '1', null, null, '0', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-03-19 11:19:05', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:15:28', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('ae4fed059f67086fd52a73d913cf473d', '540a2936940846cb98114ffb0d145cb8', '内联编辑表格', '/list/edit-table', 'demo/list/TableInnerEditList', null, null, '1', null, null, '2', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('aedbf679b5773c1f25e9f7b10111da73', '08e6b9dc3c04489c8e1ff2ce6f105aa4', 'SQL监控', '{{ window._CONFIG[''domianURL''] }}/druid/', 'layouts/IframePageView', null, null, '1', null, null, '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-01-30 09:43:22', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-09-09 14:48:38', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('b1cb0a3fedf7ed0e4653cb5a229837ee', 'e41b69c57a941a3bbcce45032fe57605', '定时任务', '/isystem/QuartzJobList', 'system/QuartzJobList', null, null, '1', null, null, '10', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2019-01-03 09:38:52', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:42:39', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('b3c824fc22bd953e2eb16ae6914ac8f9', '4875ebe289344e14844d8e3ea1edd73f', '高级详情页', '/profile/advanced', 'demo/profile/advanced/Advanced', null, null, '1', null, null, '2', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('b4dfc7d5dd9e8d5b6dd6d4579b1aa559', 'c65321e57b7949b7a975313220de0422', '500', '/exception/500', 'exception/500', null, null, '1', null, null, '3', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('c431130c0bc0ec71b0a5be37747bb36a', '2a470fc0c3954d9dbb61de6d80846549', '一对多JEditable', '/demo/JeroOrderMainListForJEditableTable', 'demo/JeroOrderMainListForJEditableTable', null, null, '1', null, null, '3', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-03-29 10:51:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-04 20:09:39', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('020b06793e4de2eee0007f603000c769', 'f0675b52d89100ee88472b6800754a08', 'ViserChartDemo', '/report/ViserChartDemo', 'demo/report/ViserChartDemo', null, null, '1', null, null, '3', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-03 19:08:53', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-03 19:08:53', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('024f1fd1283dc632458976463d8984e1', '700b7f95165c46cc7a78bf227aa8fed3', 'Tomcat信息', '/monitor/TomcatInfo', 'modules/monitor/TomcatInfo', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-02 09:44:29', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-07 15:19:10', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('043780fa095ff1b2bec4dc406d76f023', '2a470fc0c3954d9dbb61de6d80846549', '表格合计', '/demo/tableTotal', 'demo/TableTotal', null, null, '1', null, '1', '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-08-14 10:28:46', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', null); +INSERT INTO "SYS_PERMISSION" VALUES ('05b3c82ddb2536a4a5ee1a4c46b5abef', '540a2936940846cb98114ffb0d145cb8', '用户列表', '/list/user-list', 'demo/list/UserList', null, null, '1', null, null, '3', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('0620e402857b8c5b605e1ad9f4b89350', '2a470fc0c3954d9dbb61de6d80846549', '异步树列表Demo', '/demo/jeroTreeTable', 'demo/JeroTreeTable', null, null, '1', null, '0', '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-05-13 17:30:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:19:21', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('078f9558cdeab239aecb2bda1a8ed0d1', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(文章)', '/list/search/article', 'demo/list/TableList', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-02-12 14:00:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-12 14:17:54', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('08e6b9dc3c04489c8e1ff2ce6f105aa4', null, '系统监控', '/dashboard3', 'layouts/RouteView', null, null, '0', null, null, '16', '0', 'dashboard', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:31:58', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('0ac2ad938963b6c6d1af25477d5b8b51', '8d4683aacaa997ab86b966b464360338', '代码生成按钮', null, null, null, null, '2', 'online:goGenerateCode', '1', '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-06-11 14:20:09', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', null); +INSERT INTO "SYS_PERMISSION" VALUES ('109c78a583d4693ce2f16551b7786786', 'e41b69c57a941a3bbcce45032fe57605', 'Online报表配置', '/online/cgreport', 'modules/online/cgreport/OnlCgreportHeadList', null, null, '1', null, null, '2', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-03-08 10:51:07', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-30 19:04:28', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('1166535831146504193', '2a470fc0c3954d9dbb61de6d80846549', '文件上传示例', '/oss/file', 'modules/oss/OSSFileList', null, null, '1', null, '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-08-28 02:19:50', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 20:48:53', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1371830841603710977', null, '图表/报表示例', '/charts', 'layouts/RouteView', null, null, '0', null, '1', '19', '0', 'line-chart', '1', '0', '0', '0', null, 'admin', TO_DATE('2021-03-16 22:28:55', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:31:24', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1192318987661234177', 'e41b69c57a941a3bbcce45032fe57605', '系统编码规则', '/isystem/fillRule', 'system/SysFillRuleList', null, null, '1', null, '1', '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-11-07 13:52:53', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-10 16:55:03', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1205097455226462210', '1371830841603710977', '报表设计', '/big/screen', 'layouts/RouteView', null, null, '1', null, '1', '2', '0', 'area-chart', '1', '0', '0', '0', null, 'admin', TO_DATE('2019-12-12 20:09:58', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:29:22', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1205098241075453953', '1205097455226462210', '生产销售监控', '{{ window._CONFIG[''domianURL''] }}/test/bigScreen/templat/index1', 'layouts/IframePageView', null, null, '1', null, '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-12-12 20:13:05', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-12 20:15:27', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '1'); +INSERT INTO "SYS_PERMISSION" VALUES ('1205306106780364802', '1205097455226462210', '智慧物流监控', '{{ window._CONFIG[''domianURL''] }}/test/bigScreen/templat/index2', 'layouts/IframePageView', null, null, '1', null, '1', '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-12-13 09:59:04', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:28:03', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1209731624921534465', 'e41b69c57a941a3bbcce45032fe57605', '多数据源管理', '/isystem/dataSource', 'system/SysDataSourceList', null, null, '1', null, '1', '6', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-12-25 15:04:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-02-23 22:43:37', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1224641973866467330', 'e41b69c57a941a3bbcce45032fe57605', '系统校验规则', '/isystem/checkRule', 'system/SysCheckRuleList', null, null, '1', null, '1', '5', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-11-07 13:52:53', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-10 16:55:12', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1260928341675982849', '3f915b2769fc80648e92d04e84ca059d', '添加按钮', null, null, null, null, '2', 'user:add', '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 21:41:58', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1260929666434318338', '3f915b2769fc80648e92d04e84ca059d', '用户编辑', null, null, null, null, '2', 'user:edit', '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 21:47:14', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1260931366557696001', '3f915b2769fc80648e92d04e84ca059d', '表单性别可见', null, null, null, null, '2', 'user:sex', '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 21:53:59', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-14 21:57:00', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1260933542969458689', '3f915b2769fc80648e92d04e84ca059d', '禁用生日字段', null, null, null, null, '2', 'user:form:birthday', '2', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-05-14 22:02:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1265162119913824258', '08e6b9dc3c04489c8e1ff2ce6f105aa4', '路由网关', '/isystem/gatewayroute', 'system/SysGatewayRouteList', null, null, '1', null, '1', '0', '0', null, '1', '1', '0', '0', null, null, TO_DATE('2020-05-26 14:05:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-09-09 14:47:52', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1280350452934307841', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '租户管理', '/isys/tenant', 'system/TenantList', null, null, '1', null, '1', '10', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-07 11:58:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-10 15:46:35', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1280464606292099074', '2a470fc0c3954d9dbb61de6d80846549', '图片裁剪', '/demo/ImagCropper', 'demo/ImagCropper', null, null, '1', null, '1', '9', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-07 19:32:06', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287715272999944193', '2a470fc0c3954d9dbb61de6d80846549', 'JVXETable示例', '/demo/j-vxe-table-demo', 'layouts/RouteView', null, null, '1', null, '1', '0.10', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:43:40', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-09-09 14:52:06', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287715783966834689', '1287715272999944193', '普通示例', '/demo/j-vxe-table-demo/normal', 'demo/JVXETableDemo', null, null, '1', null, '1', '1', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:45:42', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287716451494510593', '1287715272999944193', '布局模板', '/demo/j-vxe-table-demo/layout', 'demo/JVxeDemo/layout-demo/Index', null, null, '1', null, '1', '2', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:48:21', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287718919049691137', '1287715272999944193', '即时保存', '/demo/j-vxe-table-demo/jsbc', 'demo/JVxeDemo/demo/JSBCDemo', null, null, '1', null, '1', '3', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:57:36', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-27 20:03:37', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287718938179911682', '1287715272999944193', '弹出子表', '/demo/j-vxe-table-demo/tczb', 'demo/JVxeDemo/demo/PopupSubTable', null, null, '1', null, '1', '4', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:57:41', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-27 20:03:47', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1287718956957810689', '1287715272999944193', '无痕刷新', '/demo/j-vxe-table-demo/whsx', 'demo/JVxeDemo/demo/SocketReload', null, null, '1', null, '1', '5', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-07-27 19:57:44', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-07-27 20:03:57', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('13212d3416eb690c2e1d5033166ff47a', '2e42e3835c2b44ec9f7bc26c146ee531', '失败', '/result/fail', 'result/Error', null, null, '1', null, null, '2', null, null, '1', '1', null, null, null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('1335960713267093506', '1205097455226462210', '积木报表设计', '{{ window._CONFIG[''domianURL''] }}/jmreport/list?token=${token}', 'layouts/IframePageView', null, null, '1', null, '1', '0', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2020-12-07 22:53:50', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-12-08 09:28:06', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '1'); +INSERT INTO "SYS_PERMISSION" VALUES ('1367a93f2c410b169faa7abcbad2f77c', '6e73eb3c26099c191bf03852ee1310a1', '基本设置', '/account/settings/BaseSetting', 'account/settings/BaseSetting', 'account-settings-base', null, '1', 'BaseSettings', null, null, '0', null, '1', '1', null, '1', null, null, TO_DATE('2018-12-26 18:58:35', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-03-20 12:57:31', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('190c2b43bec6a5f7a4194a85db67d96a', 'd7d6e2e4e2934f2c9385a623fd98c6f3', '角色管理', '/isystem/roleUserList', 'system/RoleUserList', null, null, '1', 'sys:role:list', null, '1.20', '0', null, '1', '0', '0', '0', null, 'admin', TO_DATE('2019-04-17 15:13:56', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-12-25 09:36:31', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('1a0811914300741f4e11838ff37a1d3a', '3f915b2769fc80648e92d04e84ca059d', '手机号禁用', null, null, null, null, '2', 'user:form:phone', '2', '1', '0', null, '0', '1', null, '0', null, 'admin', TO_DATE('2019-05-11 17:19:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-05-11 18:00:22', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', '1', null); +INSERT INTO "SYS_PERMISSION" VALUES ('200006f0edf145a2b50eacca07585451', 'fb07ca05a3e13674dbf6d3245956da2e', '搜索列表(应用)', '/list/search/application', 'demo/list/TableList', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-02-12 14:02:51', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-12 14:14:01', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('265de841c58907954b8877fb85212622', '2a470fc0c3954d9dbb61de6d80846549', '图片拖拽排序', '/demo/imgDragSort', 'demo/ImgDragSort', null, null, '1', null, null, '4', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-25 10:43:08', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-04-25 10:46:26', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('277bfabef7d76e89b33062b16a9a5020', 'e3c13679c73a4f829bcff2aba8fd68b1', '基础表单', '/form/base-form', 'demo/form/BasicForm', null, null, '1', null, null, '1', '0', null, '1', '0', null, '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-02-26 17:02:08', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('2a470fc0c3954d9dbb61de6d80846549', null, '开发示例Demo', '/jero', 'layouts/RouteView', null, null, '0', null, null, '20', '0', 'qrcode', '1', '0', '0', '0', null, null, TO_DATE('2018-12-25 20:34:38', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:31:20', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); +INSERT INTO "SYS_PERMISSION" VALUES ('2aeddae571695cd6380f6d6d334d6e7d', 'f0675b52d89100ee88472b6800754a08', '布局统计报表', '/report/ArchivesStatisticst', 'demo/report/ArchivesStatisticst', null, null, '1', null, null, '1', '0', null, '1', '1', null, '0', null, 'admin', TO_DATE('2019-04-03 18:32:48', 'YYYY-MM-DD HH24:MI:SS'), null, null, '0', '0', null, null); +INSERT INTO "SYS_PERMISSION" VALUES ('2dbbafa22cda07fa5d169d741b81fe12', 'e41b69c57a941a3bbcce45032fe57605', '在线文档', '{{ window._CONFIG[''domianURL''] }}/doc.html', 'layouts/IframePageView', null, null, '1', null, null, '8', '0', null, '1', '1', '0', '0', null, 'admin', TO_DATE('2019-01-30 10:00:01', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 22:33:43', 'YYYY-MM-DD HH24:MI:SS'), '0', '0', null, '0'); + +INSERT INTO "SYS_PERMISSION" VALUES ('1383952003393466369', '190c2b43bec6a5f7a4194a85db67d96a', '角色添加', NULL, NULL, NULL, NULL, 2, 'sys:role:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383952499906785282', '190c2b43bec6a5f7a4194a85db67d96a', '角色编辑', NULL, NULL, NULL, NULL, 2, 'sys:role:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383952680177971201', '190c2b43bec6a5f7a4194a85db67d96a', '角色删除', NULL, NULL, NULL, NULL, 2, 'sys:role:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383952988471898113', '45c966826eeff4c99b8f8ebfe74511fc', '部门添加', NULL, NULL, NULL, NULL, 2, 'sys:depart:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953084483710977', '45c966826eeff4c99b8f8ebfe74511fc', '部门编辑', NULL, NULL, NULL, NULL, 2, 'sys:depart:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953171704262657', '45c966826eeff4c99b8f8ebfe74511fc', '部门删除', NULL, NULL, NULL, NULL, 2, 'sys:depart:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953340499832833', 'f1cb187abf927c88b89470d08615f5ac', '数据字典添加', NULL, NULL, NULL, NULL, 2, 'sys:dict:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953594972450818', 'f1cb187abf927c88b89470d08615f5ac', '数据字典编辑', NULL, NULL, NULL, NULL, 2, 'sys:dict:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953732851806210', 'f1cb187abf927c88b89470d08615f5ac', '数据字典删除', NULL, NULL, NULL, NULL, 2, 'sys:dict:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383953875781103617', 'ebb9d82ea16ad864071158e0c449d186', '分类字典添加', NULL, NULL, NULL, NULL, 2, 'sys:category:add', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383954065124569090', 'ebb9d82ea16ad864071158e0c449d186', '分类字典编辑', NULL, NULL, NULL, NULL, 2, 'sys:category:edit', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383954151342682114', 'ebb9d82ea16ad864071158e0c449d186', '分类字典删除', NULL, NULL, NULL, NULL, 2, 'sys:category:del', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383956546739056641', '3f915b2769fc80648e92d04e84ca059d', '用户删除', NULL, NULL, NULL, NULL, 2, 'sys:user:sel', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383956678637334529', '3f915b2769fc80648e92d04e84ca059d', '用户导入', NULL, NULL, NULL, NULL, 2, 'sys:user:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383956779212550146', '3f915b2769fc80648e92d04e84ca059d', '用户导出', NULL, NULL, NULL, NULL, 2, 'sys:user:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383956904978755586', '190c2b43bec6a5f7a4194a85db67d96a', '角色导入', NULL, NULL, NULL, NULL, 2, 'sys:role:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957016807288833', '190c2b43bec6a5f7a4194a85db67d96a', '角色导出', NULL, NULL, NULL, NULL, 2, 'sys:role:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957130082856962', '45c966826eeff4c99b8f8ebfe74511fc', '部门导入', NULL, NULL, NULL, NULL, 2, 'sys:depart:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957217370517506', '45c966826eeff4c99b8f8ebfe74511fc', '部门导出', NULL, NULL, NULL, NULL, 2, 'sys:depart:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957378981244930', 'f1cb187abf927c88b89470d08615f5ac', '数据字典导入', NULL, NULL, NULL, NULL, 2, 'sys:dict:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957508945948674', 'f1cb187abf927c88b89470d08615f5ac', '数据字典导出', NULL, NULL, NULL, NULL, 2, 'sys:dict:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957660913971202', 'ebb9d82ea16ad864071158e0c449d186', '分类字典导入', NULL, NULL, NULL, NULL, 2, 'sys:category:import', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), NULL, NULL, 0, 0, '1', 0); +INSERT INTO "SYS_PERMISSION" VALUES ('1383957793466560514', 'ebb9d82ea16ad864071158e0c449d186', '分类字典导出', NULL, NULL, NULL, NULL, 2, 'sys:category:export', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', TO_DATE('2021-04-19 09:14:05', 'YYYY-MM-DD HH24:MI:SS'), 'admin', '2021-04-19 10:04:58', 0, 0, '1', 0); + + +-- ---------------------------- +-- Table structure for SYS_PERMISSION_DATA_RULE +-- ---------------------------- +DROP TABLE "SYS_PERMISSION_DATA_RULE"; +CREATE TABLE "SYS_PERMISSION_DATA_RULE" ( +"ID" NVARCHAR2(32) NOT NULL , +"PERMISSION_ID" NVARCHAR2(32) NULL , +"RULE_NAME" NVARCHAR2(50) NULL , +"RULE_COLUMN" NVARCHAR2(50) NULL , +"RULE_CONDITIONS" NVARCHAR2(50) NULL , +"RULE_VALUE" NVARCHAR2(300) NULL , +"STATUS" NVARCHAR2(3) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."ID" IS 'ID'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."PERMISSION_ID" IS '菜单ID'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."RULE_NAME" IS '规则名称'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."RULE_COLUMN" IS '字段'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."RULE_CONDITIONS" IS '条件'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."RULE_VALUE" IS '规则值'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."STATUS" IS '权限有效状态1有0否'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "SYS_PERMISSION_DATA_RULE"."UPDATE_BY" IS '修改人'; + +-- ---------------------------- +-- Records of SYS_PERMISSION_DATA_RULE +-- ---------------------------- +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('1260935285157511170', '4148ec82b6acd69f470bea75fe41c357', 'createBy', 'createBy', '=', '#{sys_user_code}', '0', TO_DATE('2020-05-14 22:09:34', 'YYYY-MM-DD HH24:MI:SS'), 'jero', TO_DATE('2020-05-14 22:13:52', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('1260936345293012993', '4148ec82b6acd69f470bea75fe41c357', '年龄', 'age', '>', '20', '1', TO_DATE('2020-05-14 22:13:46', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('1260937192290762754', '4148ec82b6acd69f470bea75fe41c357', 'sysOrgCode', 'sysOrgCode', 'RIGHT_LIKE', '#{sys_org_code}', '1', TO_DATE('2020-05-14 22:17:08', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('32b62cb04d6c788d9d92e3ff5e66854e', '8d4683aacaa997ab86b966b464360338', '000', '00', '!=', '00', '1', TO_DATE('2019-04-02 18:36:08', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('40283181614231d401614234fe670003', '40283181614231d401614232cd1c0001', 'createBy', 'createBy', '=', '#{sys_user_code}', '1', TO_DATE('2018-01-29 21:57:04', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('4028318161424e730161424fca6f0004', '4028318161424e730161424f61510002', 'createBy', 'createBy', '=', '#{sys_user_code}', '1', TO_DATE('2018-01-29 22:26:20', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402880e6487e661a01487e732c020005', '402889fb486e848101486e93a7c80014', 'SYS_ORG_CODE', 'SYS_ORG_CODE', 'LIKE', '010201%', '1', TO_DATE('2014-09-16 20:32:30', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402880e6487e661a01487e8153ee0007', '402889fb486e848101486e93a7c80014', 'create_by', 'create_by', null, '#{SYS_USER_CODE}', '1', TO_DATE('2014-09-16 20:47:57', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402880ec5ddec439015ddf9225060038', '40288088481d019401481d2fcebf000d', '复杂关系', null, 'USE_SQL_RULES', 'name like ''%张%'' or age > 10', '1', null, null, TO_DATE('2017-08-14 15:10:25', 'YYYY-MM-DD HH24:MI:SS'), 'demo'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402880ec5ddfdd26015ddfe3e0570011', '4028ab775dca0d1b015dca3fccb60016', '复杂sql配置', null, 'USE_SQL_RULES', 'table_name like ''%test%'' or is_tree = ''Y''', '1', null, null, TO_DATE('2017-08-14 16:38:55', 'YYYY-MM-DD HH24:MI:SS'), 'demo'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402880f25b1e2ac7015b1e5fdebc0012', '402880f25b1e2ac7015b1e5cdc340010', '只能看自己数据', 'create_by', '=', '#{sys_user_code}', '1', TO_DATE('2017-03-30 16:40:51', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881875b19f141015b19f8125e0014', '40288088481d019401481d2fcebf000d', '可看下属业务数据', 'sys_org_code', 'LIKE', '#{sys_org_code}', '1', null, null, TO_DATE('2017-08-14 15:04:32', 'YYYY-MM-DD HH24:MI:SS'), 'demo'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881e45394d66901539500a4450001', '402881e54df73c73014df75ab670000f', 'sysCompanyCode', 'sysCompanyCode', '=', '#{SYS_COMPANY_CODE}', '1', TO_DATE('2016-03-21 01:09:21', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881e45394d6690153950177cb0003', '402881e54df73c73014df75ab670000f', 'sysOrgCode', 'sysOrgCode', '=', '#{SYS_ORG_CODE}', '1', TO_DATE('2016-03-21 01:10:15', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881e56266f43101626727aff60067', '402881e56266f43101626724eb730065', '销售自己看自己的数据', 'createBy', '=', '#{sys_user_code}', '1', TO_DATE('2018-03-27 19:11:16', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881e56266f4310162672fb1a70082', '402881e56266f43101626724eb730065', '销售经理看所有下级数据', 'sysOrgCode', 'LIKE', '#{sys_org_code}', '1', TO_DATE('2018-03-27 19:20:01', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881e56266f431016267387c9f0088', '402881e56266f43101626724eb730065', '只看金额大于1000的数据', 'money', '>=', '1000', '1', TO_DATE('2018-03-27 19:29:37', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402881f3650de25101650dfb5a3a0010', '402881e56266f4310162671d62050044', '22', null, 'USE_SQL_RULES', '22', '1', TO_DATE('2018-08-06 14:45:01', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402889fb486e848101486e913cd6000b', '402889fb486e848101486e8e2e8b0007', 'userName', 'userName', '=', 'admin', '1', TO_DATE('2014-09-13 18:31:25', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402889fb486e848101486e98d20d0016', '402889fb486e848101486e93a7c80014', 'title', 'title', '=', '12', '1', null, null, TO_DATE('2014-09-13 22:18:22', 'YYYY-MM-DD HH24:MI:SS'), 'scott'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('402889fe47fcb29c0147fcb6b6220001', '8a8ab0b246dc81120146dc8180fe002b', '12', '12', '>', '12', '1', TO_DATE('2014-08-22 15:55:38', 'YYYY-MM-DD HH24:MI:SS'), '8a8ab0b246dc81120146dc8181950052', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('4028ab775dca0d1b015dca4183530018', '4028ab775dca0d1b015dca3fccb60016', '表名限制', 'isDbSynch', '=', 'Y', '1', null, null, TO_DATE('2017-08-14 16:43:45', 'YYYY-MM-DD HH24:MI:SS'), 'demo'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('4028ef815595a881015595b0ccb60001', '40288088481d019401481d2fcebf000d', '限只能看自己', 'create_by', '=', '#{sys_user_code}', '1', null, null, TO_DATE('2017-08-14 15:03:56', 'YYYY-MM-DD HH24:MI:SS'), 'demo'); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('4028ef81574ae99701574aed26530005', '4028ef81574ae99701574aeb97bd0003', '用户名', 'userName', '!=', 'admin', '1', TO_DATE('2016-09-21 12:07:18', 'YYYY-MM-DD HH24:MI:SS'), 'admin', null, null); +INSERT INTO "SYS_PERMISSION_DATA_RULE" VALUES ('f852d85d47f224990147f2284c0c0005', null, '小于', 'test', '<=', '11', '1', TO_DATE('2014-08-20 14:43:52', 'YYYY-MM-DD HH24:MI:SS'), '8a8ab0b246dc81120146dc8181950052', null, null); + +-- ---------------------------- +-- Table structure for SYS_QUARTZ_JOB +-- ---------------------------- +DROP TABLE "SYS_QUARTZ_JOB"; +CREATE TABLE "SYS_QUARTZ_JOB" ( +"ID" NVARCHAR2(32) NOT NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"DEL_FLAG" NUMBER(11) NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"JOB_CLASS_NAME" NVARCHAR2(255) NULL , +"CRON_EXPRESSION" NVARCHAR2(255) NULL , +"PARAMETER" NVARCHAR2(255) NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"STATUS" NUMBER(11) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."DEL_FLAG" IS '删除状态'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."UPDATE_BY" IS '修改人'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."UPDATE_TIME" IS '修改时间'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."JOB_CLASS_NAME" IS '任务类名'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."CRON_EXPRESSION" IS 'cron表达式'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."PARAMETER" IS '参数'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_QUARTZ_JOB"."STATUS" IS '状态 0正常 -1停止'; + +-- ---------------------------- +-- Records of SYS_QUARTZ_JOB +-- ---------------------------- +INSERT INTO "SYS_QUARTZ_JOB" VALUES ('df26ecacf0f75d219d746750fe84bbee', null, null, '0', 'admin', TO_DATE('2020-05-02 15:40:35', 'YYYY-MM-DD HH24:MI:SS'), 'com.jero.modules.quartz.job.SampleParamJob', '0/1 * * * * ?', 'scott', 'Demo-带参测试,后台将每隔1秒执行输出日志', '-1'); +INSERT INTO "SYS_QUARTZ_JOB" VALUES ('a253cdfc811d69fa0efc70d052bc8128', 'admin', TO_DATE('2019-03-30 12:44:48', 'YYYY-MM-DD HH24:MI:SS'), '0', 'admin', TO_DATE('2020-05-02 15:48:49', 'YYYY-MM-DD HH24:MI:SS'), 'com.jero.modules.quartz.job.SampleJob', '0/1 * * * * ?', null, 'Demo', '-1'); + +-- ---------------------------- +-- Table structure for SYS_ROLE +-- ---------------------------- +DROP TABLE "SYS_ROLE"; +CREATE TABLE "SYS_ROLE" ( +"ID" NVARCHAR2(32) NOT NULL , +"ROLE_NAME" NVARCHAR2(200) NULL , +"ROLE_CODE" NVARCHAR2(100) NOT NULL , +"DESCRIPTION" NVARCHAR2(255) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_ROLE" IS '角色表'; +COMMENT ON COLUMN "SYS_ROLE"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_ROLE"."ROLE_NAME" IS '角色名称'; +COMMENT ON COLUMN "SYS_ROLE"."ROLE_CODE" IS '角色编码'; +COMMENT ON COLUMN "SYS_ROLE"."DESCRIPTION" IS '描述'; +COMMENT ON COLUMN "SYS_ROLE"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_ROLE"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_ROLE"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_ROLE"."UPDATE_TIME" IS '更新时间'; + +-- ---------------------------- +-- Records of SYS_ROLE +-- ---------------------------- +INSERT INTO "SYS_ROLE" VALUES ('f6817f48af4fb3af11b9e8bf182f618b', '开发管理员', 'admin', '开发人员使用的最高管理员', null, TO_DATE('2018-12-21 18:03:39', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 13:55:05', 'YYYY-MM-DD HH24:MI:SS')); + +-- ---------------------------- +-- Table structure for SYS_ROLE_PERMISSION +-- ---------------------------- +DROP TABLE "SYS_ROLE_PERMISSION"; +CREATE TABLE "SYS_ROLE_PERMISSION" ( +"ID" NVARCHAR2(32) NOT NULL , +"ROLE_ID" NVARCHAR2(32) NULL , +"PERMISSION_ID" NVARCHAR2(32) NULL , +"DATA_RULE_IDS" NVARCHAR2(1000) NULL , +"OPERATE_DATE" DATE NULL , +"OPERATE_IP" NVARCHAR2(20) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_ROLE_PERMISSION" IS '角色权限表'; +COMMENT ON COLUMN "SYS_ROLE_PERMISSION"."ROLE_ID" IS '角色id'; +COMMENT ON COLUMN "SYS_ROLE_PERMISSION"."PERMISSION_ID" IS '权限id'; +COMMENT ON COLUMN "SYS_ROLE_PERMISSION"."DATA_RULE_IDS" IS '数据权限ids'; +COMMENT ON COLUMN "SYS_ROLE_PERMISSION"."OPERATE_DATE" IS '操作时间'; +COMMENT ON COLUMN "SYS_ROLE_PERMISSION"."OPERATE_IP" IS '操作ip'; + +-- ---------------------------- +-- Records of SYS_ROLE_PERMISSION +-- ---------------------------- +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624661061633', 'f6817f48af4fb3af11b9e8bf182f618b', '1371831353354936322', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624677838849', 'f6817f48af4fb3af11b9e8bf182f618b', '1260929666434318338', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624677838850', 'f6817f48af4fb3af11b9e8bf182f618b', '1260931366557696001', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624677838851', 'f6817f48af4fb3af11b9e8bf182f618b', '1260933542969458689', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624677838852', 'f6817f48af4fb3af11b9e8bf182f618b', '1a0811914300741f4e11838ff37a1d3a', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624677838853', 'f6817f48af4fb3af11b9e8bf182f618b', '1371830841603710977', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1371832624686227457', 'f6817f48af4fb3af11b9e8bf182f618b', '277bfabef7d76e89b33062b16a9a5020', null, TO_DATE('2021-03-16 22:36:00', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('38a2e55db0960262800576e34b3af44c', 'f6817f48af4fb3af11b9e8bf182f618b', '5c2f42277948043026b7a14692456828', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('3b1886f727ac503c93fecdd06dcb9622', 'f6817f48af4fb3af11b9e8bf182f618b', 'c431130c0bc0ec71b0a5be37747bb36a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('3de2a60c7e42a521fecf6fcc5cb54978', 'f6817f48af4fb3af11b9e8bf182f618b', '2d83d62bd2544b8994c8f38cf17b0ddf', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('3e4e38f748b8d87178dd62082e5b7b60', 'f6817f48af4fb3af11b9e8bf182f618b', '7960961b0063228937da5fa8dd73d371', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('3f1d04075e3c3254666a4138106a4e51', 'f6817f48af4fb3af11b9e8bf182f618b', '3fac0d3c9cd40fa53ab70d4c583821f8', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('4204f91fb61911ba8ce40afa7c02369f', 'f6817f48af4fb3af11b9e8bf182f618b', '3f915b2769fc80648e92d04e84ca059d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('444126230885d5d38b8fa6072c9f43f8', 'f6817f48af4fb3af11b9e8bf182f618b', 'f780d0d3083d849ccbdb1b1baee4911d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('445656dd187bd8a71605f4bbab1938a3', 'f6817f48af4fb3af11b9e8bf182f618b', '020b06793e4de2eee0007f603000c769', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('455cdb482457f529b79b479a2ff74427', 'f6817f48af4fb3af11b9e8bf182f618b', 'e1979bb53e9ea51cecc74d86fd9d2f64', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('45a358bb738782d1a0edbf7485e81459', 'f6817f48af4fb3af11b9e8bf182f618b', '0ac2ad938963b6c6d1af25477d5b8b51', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('4dab5a06acc8ef3297889872caa74747', 'f6817f48af4fb3af11b9e8bf182f618b', 'ffb423d25cc59dcd0532213c4a518261', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('4e0a37ed49524df5f08fc6593aee875c', 'f6817f48af4fb3af11b9e8bf182f618b', 'f23d9bfff4d9aa6b68569ba2cff38415', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('4ea403fc1d19feb871c8bdd9f94a4ecc', 'f6817f48af4fb3af11b9e8bf182f618b', '2e42e3835c2b44ec9f7bc26c146ee531', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('4f254549d9498f06f4cc9b23f3e2c070', 'f6817f48af4fb3af11b9e8bf182f618b', '93d5cfb4448f11e9916698e7f462b4b6', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('504e326de3f03562cdd186748b48a8c7', 'f6817f48af4fb3af11b9e8bf182f618b', '027aee69baee98a0ed2e01806e89c891', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('520b5989e6fe4a302a573d4fee12a40a', 'f6817f48af4fb3af11b9e8bf182f618b', '6531cf3421b1265aeeeabaab5e176e6d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('54fdf85e52807bdb32ce450814abc256', 'f6817f48af4fb3af11b9e8bf182f618b', 'cc50656cf9ca528e6f2150eba4714ad2', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('5d230e6cd2935c4117f6cb9a7a749e39', 'f6817f48af4fb3af11b9e8bf182f618b', 'fc810a2267dd183e4ef7c71cc60f4670', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('5de6871fadb4fe1cdd28989da0126b07', 'f6817f48af4fb3af11b9e8bf182f618b', 'a400e4f4d54f79bf5ce160a3432231af', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('5e4015a9a641cbf3fb5d28d9f885d81a', 'f6817f48af4fb3af11b9e8bf182f618b', '2dbbafa22cda07fa5d169d741b81fe12', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('60eda4b4db138bdb47edbe8e10e71675', 'f6817f48af4fb3af11b9e8bf182f618b', 'fb07ca05a3e13674dbf6d3245956da2e', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('61835e48f3e675f7d3f5c9dd3a10dcf3', 'f6817f48af4fb3af11b9e8bf182f618b', 'f0675b52d89100ee88472b6800754a08', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('660fbc40bcb1044738f7cabdf1708c28', 'f6817f48af4fb3af11b9e8bf182f618b', 'b3c824fc22bd953e2eb16ae6914ac8f9', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('66b202f8f84fe766176b3f51071836ef', 'f6817f48af4fb3af11b9e8bf182f618b', '1367a93f2c410b169faa7abcbad2f77c', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('6c74518eb6bb9a353f6a6c459c77e64b', 'f6817f48af4fb3af11b9e8bf182f618b', 'b4dfc7d5dd9e8d5b6dd6d4579b1aa559', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('6daddafacd7eccb91309530c17c5855d', 'f6817f48af4fb3af11b9e8bf182f618b', 'edfa74d66e8ea63ea432c2910837b150', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('6fb4c2142498dd6d5b6c014ef985cb66', 'f6817f48af4fb3af11b9e8bf182f618b', '6e73eb3c26099c191bf03852ee1310a1', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('7413acf23b56c906aedb5a36fb75bd3a', 'f6817f48af4fb3af11b9e8bf182f618b', 'a4fc7b64b01a224da066bb16230f9c5a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('76a54a8cc609754360bf9f57e7dbb2db', 'f6817f48af4fb3af11b9e8bf182f618b', 'c65321e57b7949b7a975313220de0422', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('00b82058779cca5106fbb84783534c9b', 'f6817f48af4fb3af11b9e8bf182f618b', '4148ec82b6acd69f470bea75fe41c357', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0254c0b25694ad5479e6d6935bbc176e', 'f6817f48af4fb3af11b9e8bf182f618b', '944abf0a8fc22fe1f1154a389a574154', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('09bd4fc30ffe88c4a44ed3868f442719', 'f6817f48af4fb3af11b9e8bf182f618b', 'e6bfd1fcabfd7942fdd05f076d1dad38', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0c2d2db76ee3aa81a4fe0925b0f31365', 'f6817f48af4fb3af11b9e8bf182f618b', '024f1fd1283dc632458976463d8984e1', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0c6b8facbb1cc874964c87a8cf01e4b1', 'f6817f48af4fb3af11b9e8bf182f618b', '841057b8a1bef8f6b4b20f9a618a7fa6', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0c6e1075e422972083c3e854d9af7851', 'f6817f48af4fb3af11b9e8bf182f618b', '08e6b9dc3c04489c8e1ff2ce6f105aa4', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0e1469997af2d3b97fff56a59ee29eeb', 'f6817f48af4fb3af11b9e8bf182f618b', 'e41b69c57a941a3bbcce45032fe57605', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('0f861cb988fdc639bb1ab943471f3a72', 'f6817f48af4fb3af11b9e8bf182f618b', '97c8629abc7848eccdb6d77c24bb3ebb', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1185039870537576450', 'f6817f48af4fb3af11b9e8bf182f618b', '1166535831146504193', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1197431682208206850', 'f6817f48af4fb3af11b9e8bf182f618b', '1192318987661234177', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1197795315916271617', 'f6817f48af4fb3af11b9e8bf182f618b', '109c78a583d4693ce2f16551b7786786', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1209423530518761473', 'f6817f48af4fb3af11b9e8bf182f618b', '1205097455226462210', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1209423530594258945', 'f6817f48af4fb3af11b9e8bf182f618b', '1205098241075453953', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1209423530606841858', 'f6817f48af4fb3af11b9e8bf182f618b', '1205306106780364802', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1209423580355481602', 'f6817f48af4fb3af11b9e8bf182f618b', '190c2b43bec6a5f7a4194a85db67d96a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1231590078632955905', 'f6817f48af4fb3af11b9e8bf182f618b', '1224641973866467330', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1231590078658121729', 'f6817f48af4fb3af11b9e8bf182f618b', '1209731624921534465', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1260928399955836929', 'f6817f48af4fb3af11b9e8bf182f618b', '1260928341675982849', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1269526122208522241', 'f6817f48af4fb3af11b9e8bf182f618b', '1267412134208319489', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('126ea9faebeec2b914d6d9bef957afb6', 'f6817f48af4fb3af11b9e8bf182f618b', 'f1cb187abf927c88b89470d08615f5ac', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1281494164924653569', 'f6817f48af4fb3af11b9e8bf182f618b', '1280350452934307841', null, TO_DATE('2020-07-10 15:43:13', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1281494164945625089', 'f6817f48af4fb3af11b9e8bf182f618b', '1280464606292099074', null, TO_DATE('2020-07-10 15:43:13', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1281494684632473602', 'f6817f48af4fb3af11b9e8bf182f618b', '1265162119913824258', null, TO_DATE('2020-07-10 15:45:16', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080082485250', 'f6817f48af4fb3af11b9e8bf182f618b', '1287715272999944193', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080103456769', 'f6817f48af4fb3af11b9e8bf182f618b', '1287715783966834689', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080116039682', 'f6817f48af4fb3af11b9e8bf182f618b', '1287716451494510593', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080124428290', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718919049691137', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080128622593', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718938179911682', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1303585080141205506', 'f6817f48af4fb3af11b9e8bf182f618b', '1287718956957810689', null, TO_DATE('2020-09-09 14:44:37', 'YYYY-MM-DD HH24:MI:SS'), '127.0.0.1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1335960787783098369', 'f6817f48af4fb3af11b9e8bf182f618b', '1335960713267093506', null, TO_DATE('2020-12-07 22:54:07', 'YYYY-MM-DD HH24:MI:SS'), '0:0:0:0:0:0:0:1'); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('154edd0599bd1dc2c7de220b489cd1e2', 'f6817f48af4fb3af11b9e8bf182f618b', '7ac9eb9ccbde2f7a033cd4944272bf1e', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('165acd6046a0eaf975099f46a3c898ea', 'f6817f48af4fb3af11b9e8bf182f618b', '4f66409ef3bbd69c1d80469d6e2a885e', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1664b92dff13e1575e3a929caa2fa14d', 'f6817f48af4fb3af11b9e8bf182f618b', 'd2bbf9ebca5a8fa2e227af97d2da7548', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1c1dbba68ef1817e7fb19c822d2854e8', 'f6817f48af4fb3af11b9e8bf182f618b', 'fb367426764077dcf94640c843733985', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('1e47db875601fd97723254046b5bba90', 'f6817f48af4fb3af11b9e8bf182f618b', 'baf16b7174bd821b6bab23fa9abb200d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('20e53c87a785688bdc0a5bb6de394ef1', 'f6817f48af4fb3af11b9e8bf182f618b', '540a2936940846cb98114ffb0d145cb8', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('25491ecbd5a9b34f09c8bc447a10ede1', 'f6817f48af4fb3af11b9e8bf182f618b', 'd07a2c87a451434c99ab06296727ec4f', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('2779cdea8367fff37db26a42c1a1f531', 'f6817f48af4fb3af11b9e8bf182f618b', 'fef097f3903caf3a3c3a6efa8de43fbb', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('29fb6b0ad59a7e911c8d27e0bdc42d23', 'f6817f48af4fb3af11b9e8bf182f618b', '9a90363f216a6a08f32eecb3f0bf12a3', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('2ad37346c1b83ddeebc008f6987b2227', 'f6817f48af4fb3af11b9e8bf182f618b', '8d1ebd663688965f1fd86a2f0ead3416', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('e7467726ee72235baaeb47df04a35e73', 'f6817f48af4fb3af11b9e8bf182f618b', 'e08cb190ef230d5d4f03824198773950', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('eaef4486f1c9b0408580bbfa2037eb66', 'f6817f48af4fb3af11b9e8bf182f618b', '2a470fc0c3954d9dbb61de6d80846549', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ec4bc97829ab56afd83f428b6dc37ff6', 'f6817f48af4fb3af11b9e8bf182f618b', '200006f0edf145a2b50eacca07585451', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ec846a3f85fdb6813e515be71f11b331', 'f6817f48af4fb3af11b9e8bf182f618b', '732d48f8e0abe99fe6a23d18a3171cd1', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ec93bb06f5be4c1f19522ca78180e2ef', 'f6817f48af4fb3af11b9e8bf182f618b', '265de841c58907954b8877fb85212622', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ecdd72fe694e6bba9c1d9fc925ee79de', 'f6817f48af4fb3af11b9e8bf182f618b', '45c966826eeff4c99b8f8ebfe74511fc', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('edefd8d468f5727db465cf1b860af474', 'f6817f48af4fb3af11b9e8bf182f618b', '6ad53fd1b220989a8b71ff482d683a5a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ef8bdd20d29447681ec91d3603e80c7b', 'f6817f48af4fb3af11b9e8bf182f618b', 'ae4fed059f67086fd52a73d913cf473d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('f177acac0276329dc66af0c9ad30558a', 'f6817f48af4fb3af11b9e8bf182f618b', 'c2c356bf4ddd29975347a7047a062440', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('f99f99cc3bc27220cdd4f5aced33b7d7', 'f6817f48af4fb3af11b9e8bf182f618b', '655563cd64b75dcf52ef7bcdd4836953', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('fafe73c4448b977fe42880a6750c3ee8', 'f6817f48af4fb3af11b9e8bf182f618b', '9cb91b8851db0cf7b19d7ecc2a8193dd', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('fced905c7598973b970d42d833f73474', 'f6817f48af4fb3af11b9e8bf182f618b', '4875ebe289344e14844d8e3ea1edd73f', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('fd97963dc5f144d3aecfc7045a883427', 'f6817f48af4fb3af11b9e8bf182f618b', '043780fa095ff1b2bec4dc406d76f023', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('7ca833caa5eac837b7200d8b6de8b2e3', 'f6817f48af4fb3af11b9e8bf182f618b', 'fedfbf4420536cacc0218557d263dfea', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('84eac2f113c23737128fb099d1d1da89', 'f6817f48af4fb3af11b9e8bf182f618b', '03dc3d93261dda19fc86dd7ca486c6cf', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('86060e2867a5049d8a80d9fe5d8bc28b', 'f6817f48af4fb3af11b9e8bf182f618b', '765dd244f37b804e3d00f475fd56149b', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('884f147c20e003cc80ed5b7efa598cbe', 'f6817f48af4fb3af11b9e8bf182f618b', 'e5973686ed495c379d829ea8b2881fc6', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('cf43895aef7fc684669483ab00ef2257', 'f6817f48af4fb3af11b9e8bf182f618b', '700b7f95165c46cc7a78bf227aa8fed3', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('8b09925bdc194ab7f3559cd3a7ea0507', 'f6817f48af4fb3af11b9e8bf182f618b', 'ebb9d82ea16ad864071158e0c449d186', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('8d154c2382a8ae5c8d1b84bd38df2a93', 'f6817f48af4fb3af11b9e8bf182f618b', 'd86f58e7ab516d3bc6bfb1fe10585f97', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('8dd64f65a1014196078d0882f767cd85', 'f6817f48af4fb3af11b9e8bf182f618b', 'e3c13679c73a4f829bcff2aba8fd68b1', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('8e3dc1671abad4f3c83883b194d2e05a', 'f6817f48af4fb3af11b9e8bf182f618b', 'b1cb0a3fedf7ed0e4653cb5a229837ee', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('905bf419332ebcb83863603b3ebe30f0', 'f6817f48af4fb3af11b9e8bf182f618b', '8fb8172747a78756c11916216b8b8066', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('9380121ca9cfee4b372194630fce150e', 'f6817f48af4fb3af11b9e8bf182f618b', '65a8f489f25a345836b7f44b1181197a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('94911fef73a590f6824105ebf9b6cab3', 'f6817f48af4fb3af11b9e8bf182f618b', '8b3bff2eee6f1939147f5c68292a1642', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('9700d20dbc1ae3cbf7de1c810b521fe6', 'f6817f48af4fb3af11b9e8bf182f618b', 'ec8d607d0156e198b11853760319c646', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('980171fda43adfe24840959b1d048d4d', 'f6817f48af4fb3af11b9e8bf182f618b', 'd7d6e2e4e2934f2c9385a623fd98c6f3', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('987c23b70873bd1d6dca52f30aafd8c2', 'f6817f48af4fb3af11b9e8bf182f618b', '00a2a0ae65cdca5e93209cdbde97cbe6', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('9b2ad767f9861e64a20b097538feafd3', 'f6817f48af4fb3af11b9e8bf182f618b', '73678f9daa45ed17a3674131b03432fb', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('9d980ec0489040e631a9c24a6af42934', 'f6817f48af4fb3af11b9e8bf182f618b', '05b3c82ddb2536a4a5ee1a4c46b5abef', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('a034ed7c38c996b880d3e78f586fe0ae', 'f6817f48af4fb3af11b9e8bf182f618b', 'c89018ea6286e852b424466fd92a2ffc', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('a307a9349ad64a2eff8ab69582fa9be4', 'f6817f48af4fb3af11b9e8bf182f618b', '0620e402857b8c5b605e1ad9f4b89350', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('a5d25fdb3c62904a8474182706ce11a0', 'f6817f48af4fb3af11b9e8bf182f618b', '418964ba087b90a84897b62474496b93', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('acacce4417e5d7f96a9c3be2ded5b4be', 'f6817f48af4fb3af11b9e8bf182f618b', 'f9d3f4f27653a71c52faa9fb8070fbe7', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('ae1852fb349d8513eb3fdc173da3ee56', 'f6817f48af4fb3af11b9e8bf182f618b', '8d4683aacaa997ab86b966b464360338', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('af60ac8fafd807ed6b6b354613b9ccbc', 'f6817f48af4fb3af11b9e8bf182f618b', '58857ff846e61794c69208e9d3a85466', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('b0c8a20800b8bf1ebdd7be473bceb44f', 'f6817f48af4fb3af11b9e8bf182f618b', '58b9204feaf07e47284ddb36cd2d8468', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('b128ebe78fa5abb54a3a82c6689bdca3', 'f6817f48af4fb3af11b9e8bf182f618b', 'aedbf679b5773c1f25e9f7b10111da73', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('b21b07951bb547b09cc85624a841aea0', 'f6817f48af4fb3af11b9e8bf182f618b', '4356a1a67b564f0988a484f5531fd4d9', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('b64c4ab9cd9a2ea8ac1e9db5fb7cf522', 'f6817f48af4fb3af11b9e8bf182f618b', '2aeddae571695cd6380f6d6d334d6e7d', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('bbec16ad016efec9ea2def38f4d3d9dc', 'f6817f48af4fb3af11b9e8bf182f618b', '13212d3416eb690c2e1d5033166ff47a', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('bea2986432079d89203da888d99b3f16', 'f6817f48af4fb3af11b9e8bf182f618b', '54dd5457a3190740005c1bfec55b1c34', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c56fb1658ee5f7476380786bf5905399', 'f6817f48af4fb3af11b9e8bf182f618b', 'de13e0f6328c069748de7399fcc1dbbd', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c6fee38d293b9d0596436a0cbd205070', 'f6817f48af4fb3af11b9e8bf182f618b', '4f84f9400e5e92c95f05b554724c2b58', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('c90b0b01c7ca454d2a1cb7408563e696', 'f6817f48af4fb3af11b9e8bf182f618b', '882a73768cfd7f78f3a37584f7299656', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('cf1feb1bf69eafc982295ad6c9c8d698', 'f6817f48af4fb3af11b9e8bf182f618b', 'a2b11669e98c5fe54a53c3e3c4f35d14', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('cf2ef620217673e4042f695743294f01', 'f6817f48af4fb3af11b9e8bf182f618b', '717f6bee46f44a3897eca9abd6e2ec44', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('d281a95b8f293d0fa2a136f46c4e0b10', 'f6817f48af4fb3af11b9e8bf182f618b', '5c8042bd6c601270b2bbd9b20bccc68b', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('d37ad568e26f46ed0feca227aa9c2ffa', 'f6817f48af4fb3af11b9e8bf182f618b', '9502685863ab87f0ad1134142788a385', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('d3ddcacee1acdfaa0810618b74e38ef2', 'f6817f48af4fb3af11b9e8bf182f618b', 'c6cf95444d80435eb37b2f9db3971ae6', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('d83282192a69514cfe6161b3087ff962', 'f6817f48af4fb3af11b9e8bf182f618b', '53a9230444d33de28aa11cc108fb1dba', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('d8a5c9079df12090e108e21be94b4fd7', 'f6817f48af4fb3af11b9e8bf182f618b', '078f9558cdeab239aecb2bda1a8ed0d1', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('dc83bb13c0e8c930e79d28b2db26f01f', 'f6817f48af4fb3af11b9e8bf182f618b', '63b551e81c5956d5c861593d366d8c57', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('dc8fd3f79bd85bd832608b42167a1c71', 'f6817f48af4fb3af11b9e8bf182f618b', '91c23960fab49335831cf43d820b0a61', null, null, null); +INSERT INTO "SYS_ROLE_PERMISSION" VALUES ('de82e89b8b60a3ea99be5348f565c240', 'f6817f48af4fb3af11b9e8bf182f618b', '56ca78fe0f22d815fabc793461af67b8', null, null, null); + +-- ---------------------------- +-- Table structure for SYS_SMS +-- ---------------------------- +DROP TABLE "SYS_SMS"; +CREATE TABLE "SYS_SMS" ( +"ID" NVARCHAR2(32) NOT NULL , +"ES_TITLE" NVARCHAR2(100) NULL , +"ES_TYPE" NVARCHAR2(1) NULL , +"ES_RECEIVER" NVARCHAR2(50) NULL , +"ES_PARAM" NVARCHAR2(1000) NULL , +"ES_CONTENT" NCLOB NULL , +"ES_SEND_TIME" DATE NULL , +"ES_SEND_STATUS" NVARCHAR2(1) NULL , +"ES_SEND_NUM" NUMBER(11) NULL , +"ES_RESULT" NVARCHAR2(255) NULL , +"REMARK" NVARCHAR2(500) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_SMS"."ID" IS 'ID'; +COMMENT ON COLUMN "SYS_SMS"."ES_TITLE" IS '消息标题'; +COMMENT ON COLUMN "SYS_SMS"."ES_TYPE" IS '发送方式:1短信 2邮件 3微信'; +COMMENT ON COLUMN "SYS_SMS"."ES_RECEIVER" IS '接收人'; +COMMENT ON COLUMN "SYS_SMS"."ES_PARAM" IS '发送所需参数Json格式'; +COMMENT ON COLUMN "SYS_SMS"."ES_CONTENT" IS '推送内容'; +COMMENT ON COLUMN "SYS_SMS"."ES_SEND_TIME" IS '推送时间'; +COMMENT ON COLUMN "SYS_SMS"."ES_SEND_STATUS" IS '推送状态 0未推送 1推送成功 2推送失败 -1失败不再发送'; +COMMENT ON COLUMN "SYS_SMS"."ES_SEND_NUM" IS '发送次数 超过5次不再发送'; +COMMENT ON COLUMN "SYS_SMS"."ES_RESULT" IS '推送失败原因'; +COMMENT ON COLUMN "SYS_SMS"."REMARK" IS '备注'; +COMMENT ON COLUMN "SYS_SMS"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "SYS_SMS"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_SMS"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "SYS_SMS"."UPDATE_TIME" IS '更新日期'; + +-- ---------------------------- +-- Records of SYS_SMS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_SMS_TEMPLATE +-- ---------------------------- +DROP TABLE "SYS_SMS_TEMPLATE"; +CREATE TABLE "SYS_SMS_TEMPLATE" ( +"ID" NVARCHAR2(32) NOT NULL , +"TEMPLATE_NAME" NVARCHAR2(50) NULL , +"TEMPLATE_CODE" NVARCHAR2(32) NOT NULL , +"TEMPLATE_TYPE" NVARCHAR2(1) NOT NULL , +"TEMPLATE_CONTENT" NVARCHAR2(1000) NOT NULL , +"TEMPLATE_TEST_JSON" NVARCHAR2(1000) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."ID" IS '主键'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."TEMPLATE_NAME" IS '模板标题'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."TEMPLATE_CODE" IS '模板CODE'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."TEMPLATE_TYPE" IS '模板类型:1短信 2邮件 3微信'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."TEMPLATE_CONTENT" IS '模板内容'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."TEMPLATE_TEST_JSON" IS '模板测试json'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_SMS_TEMPLATE"."UPDATE_BY" IS '更新人登录名称'; + +-- ---------------------------- +-- Records of SYS_SMS_TEMPLATE +-- ---------------------------- +INSERT INTO "SYS_SMS_TEMPLATE" VALUES ('1199606397416775681', '系统消息通知-Demo', 'sys_ts_note', '4', '

    系统通知

+
    +
  • 通知时间:  ${ts_date}
  • +
  • 通知内容:  ${ts_content}
  • +
', null, TO_DATE('2019-11-27 16:30:27', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-11-27 19:36:50', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "SYS_SMS_TEMPLATE" VALUES ('1199648914107625473', '流程办理超时提醒-Demo', 'bpm_chaoshi_tip', '4', '

   流程办理超时提醒

+
    +
  •    超时提醒信息:    您有待处理的超时任务,请尽快处理!
  • +
  •    超时任务标题:    ${title}
  • +
  •    超时任务节点:    ${task}
  • +
  •    任务处理人:       ${user}
  • +
  •    任务开始时间:    ${time}
  • +
', null, TO_DATE('2019-11-27 19:19:24', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-11-27 19:36:37', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); +INSERT INTO "SYS_SMS_TEMPLATE" VALUES ('4028608164691b000164693108140003', '催办:${taskName}-Demo', 'SYS001', '3', '${userName},您好! +请前待办任务办理事项!${taskName} + + +=========================== +此消息由系统发出', '{ +"taskName":"HR审批", +"userName":"admin" +}', TO_DATE('2018-07-05 14:46:18', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2018-07-05 18:31:34', 'YYYY-MM-DD HH24:MI:SS'), 'admin'); + +-- ---------------------------- +-- Table structure for SYS_TENANT +-- ---------------------------- +DROP TABLE "SYS_TENANT"; +CREATE TABLE "SYS_TENANT" ( +"ID" NUMBER(11) NOT NULL , +"NAME" NVARCHAR2(100) NULL , +"CREATE_TIME" DATE NULL , +"CREATE_BY" NVARCHAR2(100) NULL , +"BEGIN_DATE" DATE NULL , +"END_DATE" DATE NULL , +"STATUS" NUMBER(11) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_TENANT" IS '多租户信息表'; +COMMENT ON COLUMN "SYS_TENANT"."ID" IS '租户编码'; +COMMENT ON COLUMN "SYS_TENANT"."NAME" IS '租户名称'; +COMMENT ON COLUMN "SYS_TENANT"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_TENANT"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_TENANT"."BEGIN_DATE" IS '开始时间'; +COMMENT ON COLUMN "SYS_TENANT"."END_DATE" IS '结束时间'; +COMMENT ON COLUMN "SYS_TENANT"."STATUS" IS '状态 1正常 0冻结'; + +-- ---------------------------- +-- Records of SYS_TENANT +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_THIRD_ACCOUNT +-- ---------------------------- +DROP TABLE "SYS_THIRD_ACCOUNT"; +CREATE TABLE "SYS_THIRD_ACCOUNT" ( +"ID" NVARCHAR2(32) NOT NULL , +"SYS_USER_ID" NVARCHAR2(32) NULL , +"THIRD_TYPE" NVARCHAR2(255) NULL , +"AVATAR" NVARCHAR2(255) NULL , +"STATUS" NUMBER(4) NULL , +"DEL_FLAG" NUMBER(4) NULL , +"REALNAME" NVARCHAR2(100) NULL , +"THIRD_USER_UUID" NVARCHAR2(100) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."ID" IS '编号'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."SYS_USER_ID" IS '第三方登录id'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."THIRD_TYPE" IS '登录来源'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."AVATAR" IS '头像'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."STATUS" IS '状态(1-正常,2-冻结)'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."DEL_FLAG" IS '删除状态(0-正常,1-已删除)'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."REALNAME" IS '真实姓名'; +COMMENT ON COLUMN "SYS_THIRD_ACCOUNT"."THIRD_USER_UUID" IS '第三方账号'; + +-- ---------------------------- +-- Records of SYS_THIRD_ACCOUNT +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_USER +-- ---------------------------- +DROP TABLE "SYS_USER"; +CREATE TABLE "SYS_USER" ( +"ID" NVARCHAR2(32) NOT NULL , +"USERNAME" NVARCHAR2(100) NULL , +"REALNAME" NVARCHAR2(100) NULL , +"PASSWORD" NVARCHAR2(255) NULL , +"SALT" NVARCHAR2(45) NULL , +"AVATAR" NVARCHAR2(255) NULL , +"BIRTHDAY" DATE NULL , +"SEX" NUMBER(4) NULL , +"EMAIL" NVARCHAR2(45) NULL , +"PHONE" NVARCHAR2(45) NULL , +"ORG_CODE" NVARCHAR2(64) NULL , +"STATUS" NUMBER(4) NULL , +"DEL_FLAG" NUMBER(4) NULL , +"THIRD_ID" NVARCHAR2(100) NULL , +"THIRD_TYPE" NVARCHAR2(100) NULL , +"ACTIVITI_SYNC" NUMBER(4) NULL , +"WORK_NO" NVARCHAR2(100) NULL , +"TELEPHONE" NVARCHAR2(45) NULL , +"CREATE_BY" NVARCHAR2(32) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(32) NULL , +"UPDATE_TIME" DATE NULL , +"USER_IDENTITY" NUMBER(4) NULL , +"DEPART_IDS" NCLOB NULL , +"REL_TENANT_IDS" NVARCHAR2(100) NULL , +"CLIENT_ID" NVARCHAR2(64) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_USER" IS '用户表'; +COMMENT ON COLUMN "SYS_USER"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_USER"."USERNAME" IS '登录账号'; +COMMENT ON COLUMN "SYS_USER"."REALNAME" IS '真实姓名'; +COMMENT ON COLUMN "SYS_USER"."PASSWORD" IS '密码'; +COMMENT ON COLUMN "SYS_USER"."SALT" IS 'md5密码盐'; +COMMENT ON COLUMN "SYS_USER"."AVATAR" IS '头像'; +COMMENT ON COLUMN "SYS_USER"."BIRTHDAY" IS '生日'; +COMMENT ON COLUMN "SYS_USER"."SEX" IS '性别(0-默认未知,1-男,2-女)'; +COMMENT ON COLUMN "SYS_USER"."EMAIL" IS '电子邮件'; +COMMENT ON COLUMN "SYS_USER"."PHONE" IS '电话'; +COMMENT ON COLUMN "SYS_USER"."ORG_CODE" IS '机构编码'; +COMMENT ON COLUMN "SYS_USER"."STATUS" IS '性别(1-正常,2-冻结)'; +COMMENT ON COLUMN "SYS_USER"."DEL_FLAG" IS '删除状态(0-正常,1-已删除)'; +COMMENT ON COLUMN "SYS_USER"."THIRD_ID" IS '第三方登录的唯一标识'; +COMMENT ON COLUMN "SYS_USER"."THIRD_TYPE" IS '第三方类型'; +COMMENT ON COLUMN "SYS_USER"."ACTIVITI_SYNC" IS '同步工作流引擎(1-同步,0-不同步)'; +COMMENT ON COLUMN "SYS_USER"."WORK_NO" IS '工号,唯一键'; +COMMENT ON COLUMN "SYS_USER"."TELEPHONE" IS '座机号'; +COMMENT ON COLUMN "SYS_USER"."CREATE_BY" IS '创建人'; +COMMENT ON COLUMN "SYS_USER"."CREATE_TIME" IS '创建时间'; +COMMENT ON COLUMN "SYS_USER"."UPDATE_BY" IS '更新人'; +COMMENT ON COLUMN "SYS_USER"."UPDATE_TIME" IS '更新时间'; +COMMENT ON COLUMN "SYS_USER"."USER_IDENTITY" IS '身份(1普通成员 2上级)'; +COMMENT ON COLUMN "SYS_USER"."DEPART_IDS" IS '负责部门'; +COMMENT ON COLUMN "SYS_USER"."REL_TENANT_IDS" IS '多租户标识'; +COMMENT ON COLUMN "SYS_USER"."CLIENT_ID" IS '设备ID'; + +-- ---------------------------- +-- Records of SYS_USER +-- ---------------------------- +INSERT INTO "SYS_USER" VALUES ('e9ca23d68d884d4ebb19d07889727dae', 'admin', '开发管理员', 'cb362cfeefbf3d8d', 'RCGTeGiH', null, TO_DATE('2018-12-05 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), '1', 'lixuetao@syxysoft.com', '18608732661', 'A01', '1', '0', null, null, '1', '00001', null, null, TO_DATE('2019-06-21 17:54:10', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2021-03-16 18:00:16', 'YYYY-MM-DD HH24:MI:SS'), '2', 'c6d7cb4deeac411cb3384b1b31278596', null, null); + +-- ---------------------------- +-- Table structure for SYS_USER_AGENT +-- ---------------------------- +DROP TABLE "SYS_USER_AGENT"; +CREATE TABLE "SYS_USER_AGENT" ( +"ID" NVARCHAR2(32) NOT NULL , +"USER_NAME" NVARCHAR2(100) NULL , +"AGENT_USER_NAME" NVARCHAR2(100) NULL , +"START_TIME" DATE NULL , +"END_TIME" DATE NULL , +"STATUS" NVARCHAR2(2) NULL , +"CREATE_NAME" NVARCHAR2(50) NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_NAME" NVARCHAR2(50) NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"SYS_ORG_CODE" NVARCHAR2(50) NULL , +"SYS_COMPANY_CODE" NVARCHAR2(50) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_USER_AGENT" IS '用户代理人设置'; +COMMENT ON COLUMN "SYS_USER_AGENT"."ID" IS '序号'; +COMMENT ON COLUMN "SYS_USER_AGENT"."USER_NAME" IS '用户名'; +COMMENT ON COLUMN "SYS_USER_AGENT"."AGENT_USER_NAME" IS '代理人用户名'; +COMMENT ON COLUMN "SYS_USER_AGENT"."START_TIME" IS '代理开始时间'; +COMMENT ON COLUMN "SYS_USER_AGENT"."END_TIME" IS '代理结束时间'; +COMMENT ON COLUMN "SYS_USER_AGENT"."STATUS" IS '状态0无效1有效'; +COMMENT ON COLUMN "SYS_USER_AGENT"."CREATE_NAME" IS '创建人名称'; +COMMENT ON COLUMN "SYS_USER_AGENT"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "SYS_USER_AGENT"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "SYS_USER_AGENT"."UPDATE_NAME" IS '更新人名称'; +COMMENT ON COLUMN "SYS_USER_AGENT"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "SYS_USER_AGENT"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "SYS_USER_AGENT"."SYS_ORG_CODE" IS '所属部门'; +COMMENT ON COLUMN "SYS_USER_AGENT"."SYS_COMPANY_CODE" IS '所属公司'; + +-- ---------------------------- +-- Records of SYS_USER_AGENT +-- ---------------------------- + +-- ---------------------------- +-- Table structure for SYS_USER_DEPART +-- ---------------------------- +DROP TABLE "SYS_USER_DEPART"; +CREATE TABLE "SYS_USER_DEPART" ( +"ID" NVARCHAR2(32) NOT NULL , +"USER_ID" NVARCHAR2(32) NULL , +"DEP_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "SYS_USER_DEPART"."ID" IS 'id'; +COMMENT ON COLUMN "SYS_USER_DEPART"."USER_ID" IS '用户id'; +COMMENT ON COLUMN "SYS_USER_DEPART"."DEP_ID" IS '部门id'; + +-- ---------------------------- +-- Records of SYS_USER_DEPART +-- ---------------------------- +INSERT INTO "SYS_USER_DEPART" VALUES ('1371763232992583682', 'e9ca23d68d884d4ebb19d07889727dae', 'c6d7cb4deeac411cb3384b1b31278596'); + +-- ---------------------------- +-- Table structure for SYS_USER_ROLE +-- ---------------------------- +DROP TABLE "SYS_USER_ROLE"; +CREATE TABLE "SYS_USER_ROLE" ( +"ID" NVARCHAR2(32) NOT NULL , +"USER_ID" NVARCHAR2(32) NULL , +"ROLE_ID" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON TABLE "SYS_USER_ROLE" IS '用户角色表'; +COMMENT ON COLUMN "SYS_USER_ROLE"."ID" IS '主键id'; +COMMENT ON COLUMN "SYS_USER_ROLE"."USER_ID" IS '用户id'; +COMMENT ON COLUMN "SYS_USER_ROLE"."ROLE_ID" IS '角色id'; + +-- ---------------------------- +-- Records of SYS_USER_ROLE +-- ---------------------------- +INSERT INTO "SYS_USER_ROLE" VALUES ('1371763232468295682', 'e9ca23d68d884d4ebb19d07889727dae', 'f6817f48af4fb3af11b9e8bf182f618b'); + +-- ---------------------------- +-- Table structure for TEST_DEMO +-- ---------------------------- +DROP TABLE "TEST_DEMO"; +CREATE TABLE "TEST_DEMO" ( +"ID" NVARCHAR2(36) NOT NULL , +"CREATE_BY" NVARCHAR2(50) NULL , +"CREATE_TIME" DATE NULL , +"UPDATE_BY" NVARCHAR2(50) NULL , +"UPDATE_TIME" DATE NULL , +"NAME" NVARCHAR2(200) NULL , +"SEX" NVARCHAR2(32) NULL , +"AGE" NUMBER(11) NULL , +"DESCC" NVARCHAR2(500) NULL , +"BIRTHDAY" DATE NULL , +"USER_CODE" NVARCHAR2(32) NULL , +"FILE_KK" NVARCHAR2(500) NULL , +"TOP_PIC" NVARCHAR2(500) NULL , +"CHEGNSHI" NVARCHAR2(300) NULL , +"CECK" NVARCHAR2(32) NULL , +"XIAMUTI" NVARCHAR2(100) NULL , +"SEARCH_SEL" NVARCHAR2(100) NULL , +"POP" NVARCHAR2(32) NULL +) +LOGGING +NOCOMPRESS +NOCACHE + +; +COMMENT ON COLUMN "TEST_DEMO"."ID" IS '主键'; +COMMENT ON COLUMN "TEST_DEMO"."CREATE_BY" IS '创建人登录名称'; +COMMENT ON COLUMN "TEST_DEMO"."CREATE_TIME" IS '创建日期'; +COMMENT ON COLUMN "TEST_DEMO"."UPDATE_BY" IS '更新人登录名称'; +COMMENT ON COLUMN "TEST_DEMO"."UPDATE_TIME" IS '更新日期'; +COMMENT ON COLUMN "TEST_DEMO"."NAME" IS '用户名'; +COMMENT ON COLUMN "TEST_DEMO"."SEX" IS '性别'; +COMMENT ON COLUMN "TEST_DEMO"."AGE" IS '年龄'; +COMMENT ON COLUMN "TEST_DEMO"."DESCC" IS '描述'; +COMMENT ON COLUMN "TEST_DEMO"."BIRTHDAY" IS '生日'; +COMMENT ON COLUMN "TEST_DEMO"."USER_CODE" IS '用户编码'; +COMMENT ON COLUMN "TEST_DEMO"."FILE_KK" IS '附件'; +COMMENT ON COLUMN "TEST_DEMO"."TOP_PIC" IS '头像'; +COMMENT ON COLUMN "TEST_DEMO"."CHEGNSHI" IS '城市'; +COMMENT ON COLUMN "TEST_DEMO"."CECK" IS 'checkbox'; +COMMENT ON COLUMN "TEST_DEMO"."XIAMUTI" IS '下拉多选'; +COMMENT ON COLUMN "TEST_DEMO"."SEARCH_SEL" IS '搜索下拉'; +COMMENT ON COLUMN "TEST_DEMO"."POP" IS '弹窗'; + +-- ---------------------------- +-- Records of TEST_DEMO +-- ---------------------------- +INSERT INTO "TEST_DEMO" VALUES ('1331884149004910593', 'admin', TO_DATE('2020-11-26 16:55:01', 'YYYY-MM-DD HH24:MI:SS'), null, null, '张三', '1', null, null, null, null, null, null, '130304', null, null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('1331901553776869377', 'admin', TO_DATE('2020-11-26 18:04:10', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-11-26 18:04:24', 'YYYY-MM-DD HH24:MI:SS'), '张三', '2', null, null, null, null, null, null, null, '1', '1,2', 'hr', null); +INSERT INTO "TEST_DEMO" VALUES ('1335522992002248706', 'admin', TO_DATE('2020-12-06 17:54:28', 'YYYY-MM-DD HH24:MI:SS'), null, null, '333', null, null, null, null, null, 'Javagongzuoliuxuqiu-20200703_1607248465493.docx', 'jerocloudweifuwujiagoutu-fuben_1607248465493.png', null, null, null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('1335523137875947522', 'admin', TO_DATE('2020-12-06 17:55:03', 'YYYY-MM-DD HH24:MI:SS'), null, null, '张三66778888', null, null, null, null, null, 'Javagongzuoliuxuqiu-20200703_1607248489440.docx', 'jerocloudweifuwujiagoutu-fuben_1607248485629.png,jero_cloud_project_ref_1607248495491.png', null, '2', null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('4028810c6aed99e1016aed9b31b40002', null, null, 'admin', TO_DATE('2019-10-19 15:37:27', 'YYYY-MM-DD HH24:MI:SS'), 'jero', '2', '55', '5', TO_DATE('2019-05-15 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, null, null, null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('4028810c6b02cba2016b02cba21f0000', 'admin', TO_DATE('2019-05-29 16:53:48', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2019-08-23 23:45:21', 'YYYY-MM-DD HH24:MI:SS'), '张小红', '1', '8222', '8', TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, null, null, null, null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('4028810c6b40244b016b4030a0e40001', 'admin', TO_DATE('2019-06-10 15:00:57', 'YYYY-MM-DD HH24:MI:SS'), 'admin', TO_DATE('2020-05-03 01:28:34', 'YYYY-MM-DD HH24:MI:SS'), '小芳', '2', '0', null, TO_DATE('2019-04-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), null, null, '11_1582482670686.jpg', null, null, null, null, null); +INSERT INTO "TEST_DEMO" VALUES ('fa1d1c249461498d90f405b94f60aae0', null, null, 'admin', TO_DATE('2019-05-15 12:30:28', 'YYYY-MM-DD HH24:MI:SS'), '战三', '2', '222', null, null, null, null, null, null, null, null, null, null); + +-- ---------------------------- +-- Indexes structure for table DEMO +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table DEMO +-- ---------------------------- +ALTER TABLE "DEMO" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "DEMO" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table DEMO +-- ---------------------------- +ALTER TABLE "DEMO" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table JERO_ORDER_CUSTOMER +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table JERO_ORDER_CUSTOMER +-- ---------------------------- +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("ORDER_ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD CHECK ("ORDER_ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table JERO_ORDER_CUSTOMER +-- ---------------------------- +ALTER TABLE "JERO_ORDER_CUSTOMER" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table JERO_ORDER_MAIN +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table JERO_ORDER_MAIN +-- ---------------------------- +ALTER TABLE "JERO_ORDER_MAIN" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_MAIN" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table JERO_ORDER_MAIN +-- ---------------------------- +ALTER TABLE "JERO_ORDER_MAIN" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table JERO_ORDER_TICKET +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table JERO_ORDER_TICKET +-- ---------------------------- +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("TICKET_CODE" IS NOT NULL); +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("ORDER_ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("TICKET_CODE" IS NOT NULL); +ALTER TABLE "JERO_ORDER_TICKET" ADD CHECK ("ORDER_ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table JERO_ORDER_TICKET +-- ---------------------------- +ALTER TABLE "JERO_ORDER_TICKET" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_AUTH_DATA +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table ONL_AUTH_DATA +-- ---------------------------- +ALTER TABLE "ONL_AUTH_DATA" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_AUTH_DATA" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_AUTH_DATA +-- ---------------------------- +ALTER TABLE "ONL_AUTH_DATA" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_AUTH_PAGE +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table ONL_AUTH_PAGE +-- ---------------------------- +ALTER TABLE "ONL_AUTH_PAGE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_AUTH_PAGE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_AUTH_PAGE +-- ---------------------------- +ALTER TABLE "ONL_AUTH_PAGE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_AUTH_RELATION +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table ONL_AUTH_RELATION +-- ---------------------------- +ALTER TABLE "ONL_AUTH_RELATION" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_AUTH_RELATION" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_AUTH_RELATION +-- ---------------------------- +ALTER TABLE "ONL_AUTH_RELATION" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_BUTTON +-- ---------------------------- +CREATE INDEX "IDX_OCB_BUTTON_CODE" +ON "ONL_CGFORM_BUTTON" ("BUTTON_CODE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCB_BUTTON_STATUS" +ON "ONL_CGFORM_BUTTON" ("BUTTON_STATUS" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCB_CGFORM_HEAD_ID" +ON "ONL_CGFORM_BUTTON" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCB_ORDER_NUM" +ON "ONL_CGFORM_BUTTON" ("ORDER_NUM" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_BUTTON +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_BUTTON" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_BUTTON" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_BUTTON +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_BUTTON" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_ENHANCE_JAVA +-- ---------------------------- +CREATE INDEX "IDX_EJAVA_CGFORM_HEAD_ID" +ON "ONL_CGFORM_ENHANCE_JAVA" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCEJ_ACTIVE_STATUS" +ON "ONL_CGFORM_ENHANCE_JAVA" ("ACTIVE_STATUS" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCEJ_BUTTON_CODE" +ON "ONL_CGFORM_ENHANCE_JAVA" ("BUTTON_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_ENHANCE_JAVA +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CG_JAVA_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CG_JAVA_VALUE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CGFORM_HEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("EVENT" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CG_JAVA_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CG_JAVA_VALUE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("CGFORM_HEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD CHECK ("EVENT" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_ENHANCE_JAVA +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_JAVA" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_ENHANCE_JS +-- ---------------------------- +CREATE INDEX "IDX_EJS_CGFORM_HEAD_ID" +ON "ONL_CGFORM_ENHANCE_JS" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_EJS_CG_JS_TYPE" +ON "ONL_CGFORM_ENHANCE_JS" ("CG_JS_TYPE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_ENHANCE_JS +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_JS" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_JS" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_ENHANCE_JS +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_JS" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_ENHANCE_SQL +-- ---------------------------- +CREATE INDEX "IDX_OCES_CGFORM_HEAD_ID" +ON "ONL_CGFORM_ENHANCE_SQL" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_ENHANCE_SQL +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_SQL" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_ENHANCE_SQL" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_ENHANCE_SQL +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_ENHANCE_SQL" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_FIELD +-- ---------------------------- +CREATE INDEX "IDX_OCF_CGFORM_HEAD_ID" +ON "ONL_CGFORM_FIELD" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_FIELD +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("CGFORM_HEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_FIELD_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_LENGTH" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("CGFORM_HEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_FIELD_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_FIELD" ADD CHECK ("DB_LENGTH" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_FIELD +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_FIELD" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_HEAD +-- ---------------------------- +CREATE INDEX "IDX_OCH_FORM_TEMPLATE" +ON "ONL_CGFORM_HEAD" ("FORM_TEMPLATE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCH_FORM_TEMPLATE_MOBILE" +ON "ONL_CGFORM_HEAD" ("FORM_TEMPLATE_MOBILE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCH_TABLE_VERSION" +ON "ONL_CGFORM_HEAD" ("TABLE_VERSION" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_CGFORM_TABLENAME" +ON "ONL_CGFORM_HEAD" ("TABLE_NAME" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_HEAD +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_TXT" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_CHECKBOX" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_DB_SYNCH" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_PAGE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_TREE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("QUERY_MODE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("FORM_CATEGORY" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_TYPE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("TABLE_TXT" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_CHECKBOX" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_DB_SYNCH" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_PAGE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("IS_TREE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("QUERY_MODE" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_HEAD" ADD CHECK ("FORM_CATEGORY" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_HEAD +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_HEAD" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGFORM_INDEX +-- ---------------------------- +CREATE INDEX "IDX_OCI_CGFORM_HEAD_ID" +ON "ONL_CGFORM_INDEX" ("CGFORM_HEAD_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGFORM_INDEX +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_INDEX" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGFORM_INDEX" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGFORM_INDEX +-- ---------------------------- +ALTER TABLE "ONL_CGFORM_INDEX" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGREPORT_HEAD +-- ---------------------------- +CREATE UNIQUE INDEX "UNIQ_OLREPORT_CODE" +ON "ONL_CGREPORT_HEAD" ("CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGREPORT_HEAD +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("CODE" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("CGR_SQL" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("CODE" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("NAME" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_HEAD" ADD CHECK ("CGR_SQL" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGREPORT_HEAD +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_HEAD" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGREPORT_ITEM +-- ---------------------------- +CREATE INDEX "IDX_OCI_CGRHEAD_ID" +ON "ONL_CGREPORT_ITEM" ("CGRHEAD_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCI_IS_SHOW" +ON "ONL_CGREPORT_ITEM" ("IS_SHOW" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_OCI_ORDER_NUM" +ON "ONL_CGREPORT_ITEM" ("ORDER_NUM" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGREPORT_ITEM +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("CGRHEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("FIELD_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("CGRHEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_ITEM" ADD CHECK ("FIELD_NAME" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGREPORT_ITEM +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_ITEM" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table ONL_CGREPORT_PARAM +-- ---------------------------- +CREATE INDEX "IDX_OCP_CGRHEAD_ID" +ON "ONL_CGREPORT_PARAM" ("CGRHEAD_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table ONL_CGREPORT_PARAM +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("CGRHEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("PARAM_NAME" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("CGRHEAD_ID" IS NOT NULL); +ALTER TABLE "ONL_CGREPORT_PARAM" ADD CHECK ("PARAM_NAME" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table ONL_CGREPORT_PARAM +-- ---------------------------- +ALTER TABLE "ONL_CGREPORT_PARAM" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table OSS_FILE +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table OSS_FILE +-- ---------------------------- +ALTER TABLE "OSS_FILE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "OSS_FILE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table OSS_FILE +-- ---------------------------- +ALTER TABLE "OSS_FILE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_BLOB_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_BLOB_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_BLOB_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_CALENDARS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_CALENDARS +-- ---------------------------- +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("CALENDAR_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("CALENDAR" IS NOT NULL); +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("CALENDAR_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CALENDARS" ADD CHECK ("CALENDAR" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_CALENDARS +-- ---------------------------- +ALTER TABLE "QRTZ_CALENDARS" ADD PRIMARY KEY ("SCHED_NAME", "CALENDAR_NAME"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_CRON_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_CRON_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("CRON_EXPRESSION" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD CHECK ("CRON_EXPRESSION" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_CRON_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_FIRED_TRIGGERS +-- ---------------------------- +CREATE INDEX "IDX_QRTZ_FT_INST_JOB_REQ_RCVRY" +ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "INSTANCE_NAME" ASC, "REQUESTS_RECOVERY" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_FT_JG" +ON "QRTZ_FIRED_TRIGGERS" ("JOB_GROUP" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_FT_J_G" +ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "JOB_NAME" ASC, "JOB_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_FT_TG" +ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_FT_TRIG_INST_NAME" +ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "INSTANCE_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_FT_T_G" +ON "QRTZ_FIRED_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_NAME" ASC, "TRIGGER_GROUP" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table QRTZ_FIRED_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("ENTRY_ID" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("INSTANCE_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("FIRED_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("SCHED_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("PRIORITY" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("STATE" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("ENTRY_ID" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("INSTANCE_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("FIRED_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("SCHED_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("PRIORITY" IS NOT NULL); +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD CHECK ("STATE" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_FIRED_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_FIRED_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "ENTRY_ID"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_JOB_DETAILS +-- ---------------------------- +CREATE INDEX "IDX_QRTZ_J_GRP" +ON "QRTZ_JOB_DETAILS" ("SCHED_NAME" ASC, "JOB_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_J_REQ_RECOVERY" +ON "QRTZ_JOB_DETAILS" ("SCHED_NAME" ASC, "REQUESTS_RECOVERY" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table QRTZ_JOB_DETAILS +-- ---------------------------- +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_CLASS_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_DURABLE" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_NONCONCURRENT" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_UPDATE_DATA" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("REQUESTS_RECOVERY" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("JOB_CLASS_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_DURABLE" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_NONCONCURRENT" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("IS_UPDATE_DATA" IS NOT NULL); +ALTER TABLE "QRTZ_JOB_DETAILS" ADD CHECK ("REQUESTS_RECOVERY" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_JOB_DETAILS +-- ---------------------------- +ALTER TABLE "QRTZ_JOB_DETAILS" ADD PRIMARY KEY ("SCHED_NAME", "JOB_NAME", "JOB_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_LOCKS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_LOCKS +-- ---------------------------- +ALTER TABLE "QRTZ_LOCKS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_LOCKS" ADD CHECK ("LOCK_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_LOCKS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_LOCKS" ADD CHECK ("LOCK_NAME" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_LOCKS +-- ---------------------------- +ALTER TABLE "QRTZ_LOCKS" ADD PRIMARY KEY ("SCHED_NAME", "LOCK_NAME"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +ALTER TABLE "QRTZ_PAUSED_TRIGGER_GRPS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_SCHEDULER_STATE +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_SCHEDULER_STATE +-- ---------------------------- +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("INSTANCE_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("LAST_CHECKIN_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("CHECKIN_INTERVAL" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("INSTANCE_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("LAST_CHECKIN_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD CHECK ("CHECKIN_INTERVAL" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SCHEDULER_STATE +-- ---------------------------- +ALTER TABLE "QRTZ_SCHEDULER_STATE" ADD PRIMARY KEY ("SCHED_NAME", "INSTANCE_NAME"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("REPEAT_COUNT" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("REPEAT_INTERVAL" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TIMES_TRIGGERED" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("REPEAT_COUNT" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("REPEAT_INTERVAL" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD CHECK ("TIMES_TRIGGERED" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table QRTZ_TRIGGERS +-- ---------------------------- +CREATE INDEX "IDX_QRTZ_T_C" +ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "CALENDAR_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_G" +ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "TRIGGER_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_J" +ON "QRTZ_TRIGGERS" ("JOB_NAME" ASC, "JOB_GROUP" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_JG" +ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "JOB_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_NEXT_FIRE_TIME" +ON "QRTZ_TRIGGERS" ("NEXT_FIRE_TIME" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_NFT_MISFIRE" +ON "QRTZ_TRIGGERS" ("SCHED_NAME" ASC, "MISFIRE_INSTR" ASC, "NEXT_FIRE_TIME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_NFT_ST" +ON "QRTZ_TRIGGERS" ("NEXT_FIRE_TIME" ASC, "TRIGGER_STATE" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE" +ON "QRTZ_TRIGGERS" ("NEXT_FIRE_TIME" ASC, "TRIGGER_STATE" ASC, "SCHED_NAME" ASC, "MISFIRE_INSTR" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_NFT_ST_MISFIRE_GRP" +ON "QRTZ_TRIGGERS" ("TRIGGER_GROUP" ASC, "TRIGGER_STATE" ASC, "NEXT_FIRE_TIME" ASC, "MISFIRE_INSTR" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_N_G_STATE" +ON "QRTZ_TRIGGERS" ("TRIGGER_GROUP" ASC, "TRIGGER_STATE" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_N_STATE" +ON "QRTZ_TRIGGERS" ("TRIGGER_STATE" ASC, "SCHED_NAME" ASC, "TRIGGER_NAME" ASC, "TRIGGER_GROUP" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_QRTZ_T_STATE" +ON "QRTZ_TRIGGERS" ("TRIGGER_STATE" ASC, "SCHED_NAME" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table QRTZ_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("JOB_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("JOB_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_STATE" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_TYPE" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("START_TIME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("SCHED_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("JOB_NAME" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("JOB_GROUP" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_STATE" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("TRIGGER_TYPE" IS NOT NULL); +ALTER TABLE "QRTZ_TRIGGERS" ADD CHECK ("START_TIME" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table QRTZ_TRIGGERS +-- ---------------------------- +ALTER TABLE "QRTZ_TRIGGERS" ADD PRIMARY KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Indexes structure for table SYS_ANNOUNCEMENT +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_ANNOUNCEMENT +-- ---------------------------- +ALTER TABLE "SYS_ANNOUNCEMENT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_ANNOUNCEMENT" ADD CHECK ("MSG_CATEGORY" IS NOT NULL); +ALTER TABLE "SYS_ANNOUNCEMENT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_ANNOUNCEMENT" ADD CHECK ("MSG_CATEGORY" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_ANNOUNCEMENT +-- ---------------------------- +ALTER TABLE "SYS_ANNOUNCEMENT" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_CATEGORY +-- ---------------------------- +CREATE UNIQUE INDEX "IDX_SC_CODE" +ON "SYS_CATEGORY" ("CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_CATEGORY +-- ---------------------------- +ALTER TABLE "SYS_CATEGORY" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_CATEGORY" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_CATEGORY +-- ---------------------------- +ALTER TABLE "SYS_CATEGORY" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_CHECK_RULE +-- ---------------------------- +CREATE UNIQUE INDEX "UK_SCR_RULE_CODE" +ON "SYS_CHECK_RULE" ("RULE_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_CHECK_RULE +-- ---------------------------- +ALTER TABLE "SYS_CHECK_RULE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_CHECK_RULE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_CHECK_RULE +-- ---------------------------- +ALTER TABLE "SYS_CHECK_RULE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DATA_LOG +-- ---------------------------- +CREATE INDEX "IDX_SDL_DATA_TABLE_ID" +ON "SYS_DATA_LOG" ("DATA_ID" ASC, "DATA_TABLE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DATA_LOG +-- ---------------------------- +ALTER TABLE "SYS_DATA_LOG" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DATA_LOG" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DATA_LOG +-- ---------------------------- +ALTER TABLE "SYS_DATA_LOG" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DATA_SOURCE +-- ---------------------------- +CREATE UNIQUE INDEX "UK_SDC_RULE_CODE" +ON "SYS_DATA_SOURCE" ("CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DATA_SOURCE +-- ---------------------------- +ALTER TABLE "SYS_DATA_SOURCE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DATA_SOURCE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DATA_SOURCE +-- ---------------------------- +ALTER TABLE "SYS_DATA_SOURCE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DEPART +-- ---------------------------- +CREATE INDEX "IDX_SD_DEPART_ORDER" +ON "SYS_DEPART" ("DEPART_ORDER" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SD_PARENT_ID" +ON "SYS_DEPART" ("PARENT_ID" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_DEPART_ORG_CODE" +ON "SYS_DEPART" ("ORG_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DEPART +-- ---------------------------- +ALTER TABLE "SYS_DEPART" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("DEPART_NAME" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("ORG_CATEGORY" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("ORG_CODE" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("DEPART_NAME" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("ORG_CATEGORY" IS NOT NULL); +ALTER TABLE "SYS_DEPART" ADD CHECK ("ORG_CODE" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DEPART +-- ---------------------------- +ALTER TABLE "SYS_DEPART" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DEPART_PERMISSION +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_DEPART_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_DEPART_PERMISSION" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART_PERMISSION" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DEPART_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_DEPART_PERMISSION" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DEPART_ROLE +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_DEPART_ROLE +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART_ROLE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DEPART_ROLE +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DEPART_ROLE_PERMISSION +-- ---------------------------- +CREATE INDEX "IDX_SDRP_PER_ID" +ON "SYS_DEPART_ROLE_PERMISSION" ("PERMISSION_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SDRP_ROLE_ID" +ON "SYS_DEPART_ROLE_PERMISSION" ("ROLE_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SDRP_ROLE_PER_ID" +ON "SYS_DEPART_ROLE_PERMISSION" ("ROLE_ID" ASC, "PERMISSION_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DEPART_ROLE_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE_PERMISSION" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART_ROLE_PERMISSION" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DEPART_ROLE_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE_PERMISSION" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DEPART_ROLE_USER +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_DEPART_ROLE_USER +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE_USER" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DEPART_ROLE_USER" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DEPART_ROLE_USER +-- ---------------------------- +ALTER TABLE "SYS_DEPART_ROLE_USER" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DICT +-- ---------------------------- +CREATE UNIQUE INDEX "UK_SD_DICT_CODE" +ON "SYS_DICT" ("DICT_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DICT +-- ---------------------------- +ALTER TABLE "SYS_DICT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DICT" ADD CHECK ("DICT_NAME" IS NOT NULL); +ALTER TABLE "SYS_DICT" ADD CHECK ("DICT_CODE" IS NOT NULL); +ALTER TABLE "SYS_DICT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DICT" ADD CHECK ("DICT_NAME" IS NOT NULL); +ALTER TABLE "SYS_DICT" ADD CHECK ("DICT_CODE" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DICT +-- ---------------------------- +ALTER TABLE "SYS_DICT" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_DICT_ITEM +-- ---------------------------- +CREATE INDEX "IDX_SDI_DICT_VAL" +ON "SYS_DICT_ITEM" ("ITEM_VALUE" ASC, "DICT_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SDI_ROLE_DICT_ID" +ON "SYS_DICT_ITEM" ("DICT_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SDI_ROLE_SORT_ORDER" +ON "SYS_DICT_ITEM" ("SORT_ORDER" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SDI_STATUS" +ON "SYS_DICT_ITEM" ("STATUS" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_DICT_ITEM +-- ---------------------------- +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ITEM_TEXT" IS NOT NULL); +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ITEM_VALUE" IS NOT NULL); +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ITEM_TEXT" IS NOT NULL); +ALTER TABLE "SYS_DICT_ITEM" ADD CHECK ("ITEM_VALUE" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_DICT_ITEM +-- ---------------------------- +ALTER TABLE "SYS_DICT_ITEM" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_FILL_RULE +-- ---------------------------- +CREATE UNIQUE INDEX "UK_SFR_RULE_CODE" +ON "SYS_FILL_RULE" ("RULE_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_FILL_RULE +-- ---------------------------- +ALTER TABLE "SYS_FILL_RULE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_FILL_RULE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_FILL_RULE +-- ---------------------------- +ALTER TABLE "SYS_FILL_RULE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_GATEWAY_ROUTE +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_GATEWAY_ROUTE +-- ---------------------------- +ALTER TABLE "SYS_GATEWAY_ROUTE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_GATEWAY_ROUTE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_GATEWAY_ROUTE +-- ---------------------------- +ALTER TABLE "SYS_GATEWAY_ROUTE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_LOG +-- ---------------------------- +CREATE INDEX "IDX_SL_CREATE_TIME" +ON "SYS_LOG" ("CREATE_TIME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SL_LOG_TYPE" +ON "SYS_LOG" ("LOG_TYPE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SL_OPERATE_TYPE" +ON "SYS_LOG" ("OPERATE_TYPE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SL_USERID" +ON "SYS_LOG" ("USERID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_LOG +-- ---------------------------- +ALTER TABLE "SYS_LOG" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_LOG" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_LOG +-- ---------------------------- +ALTER TABLE "SYS_LOG" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_PERMISSION +-- ---------------------------- +CREATE INDEX "IDX_SP_DEL_FLAG" +ON "SYS_PERMISSION" ("DEL_FLAG" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_HIDDEN" +ON "SYS_PERMISSION" ("HIDDEN" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_IS_LEAF" +ON "SYS_PERMISSION" ("IS_LEAF" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_IS_ROUTE" +ON "SYS_PERMISSION" ("IS_ROUTE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_MENU_TYPE" +ON "SYS_PERMISSION" ("MENU_TYPE" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_PARENT_ID" +ON "SYS_PERMISSION" ("PARENT_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_SORT_NO" +ON "SYS_PERMISSION" ("SORT_NO" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SP_STATUS" +ON "SYS_PERMISSION" ("STATUS" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_PERMISSION" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_PERMISSION" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_PERMISSION" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_PERMISSION_DATA_RULE +-- ---------------------------- +CREATE INDEX "IDX_SPDR_PERMISSION_ID" +ON "SYS_PERMISSION_DATA_RULE" ("PERMISSION_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_PERMISSION_DATA_RULE +-- ---------------------------- +ALTER TABLE "SYS_PERMISSION_DATA_RULE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_PERMISSION_DATA_RULE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_PERMISSION_DATA_RULE +-- ---------------------------- +ALTER TABLE "SYS_PERMISSION_DATA_RULE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_QUARTZ_JOB +-- ---------------------------- +CREATE UNIQUE INDEX "UNIQ_JOB_CLASS_NAME" +ON "SYS_QUARTZ_JOB" ("JOB_CLASS_NAME" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_QUARTZ_JOB +-- ---------------------------- +ALTER TABLE "SYS_QUARTZ_JOB" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_QUARTZ_JOB" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_QUARTZ_JOB +-- ---------------------------- +ALTER TABLE "SYS_QUARTZ_JOB" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_ROLE +-- ---------------------------- +CREATE UNIQUE INDEX "UNIQ_SYS_ROLE_ROLE_CODE" +ON "SYS_ROLE" ("ROLE_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_ROLE +-- ---------------------------- +ALTER TABLE "SYS_ROLE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_ROLE" ADD CHECK ("ROLE_CODE" IS NOT NULL); +ALTER TABLE "SYS_ROLE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_ROLE" ADD CHECK ("ROLE_CODE" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_ROLE +-- ---------------------------- +ALTER TABLE "SYS_ROLE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_ROLE_PERMISSION +-- ---------------------------- +CREATE INDEX "IDX_SRP_PERMISSION_ID" +ON "SYS_ROLE_PERMISSION" ("PERMISSION_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SRP_ROLE_ID" +ON "SYS_ROLE_PERMISSION" ("ROLE_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SRP_ROLE_PER_ID" +ON "SYS_ROLE_PERMISSION" ("ROLE_ID" ASC, "PERMISSION_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_ROLE_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_ROLE_PERMISSION" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_ROLE_PERMISSION" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_ROLE_PERMISSION +-- ---------------------------- +ALTER TABLE "SYS_ROLE_PERMISSION" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_SMS +-- ---------------------------- +CREATE INDEX "IDX_SS_ES_RECEIVER" +ON "SYS_SMS" ("ES_RECEIVER" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SS_ES_SEND_STATUS" +ON "SYS_SMS" ("ES_SEND_STATUS" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SS_ES_SEND_TIME" +ON "SYS_SMS" ("ES_SEND_TIME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SS_ES_TYPE" +ON "SYS_SMS" ("ES_TYPE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_SMS +-- ---------------------------- +ALTER TABLE "SYS_SMS" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_SMS" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_SMS +-- ---------------------------- +ALTER TABLE "SYS_SMS" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_SMS_TEMPLATE +-- ---------------------------- +CREATE UNIQUE INDEX "UK_SST_TEMPLATE_CODE" +ON "SYS_SMS_TEMPLATE" ("TEMPLATE_CODE" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_SMS_TEMPLATE +-- ---------------------------- +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_CODE" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_TYPE" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_CONTENT" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_CODE" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_TYPE" IS NOT NULL); +ALTER TABLE "SYS_SMS_TEMPLATE" ADD CHECK ("TEMPLATE_CONTENT" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_SMS_TEMPLATE +-- ---------------------------- +ALTER TABLE "SYS_SMS_TEMPLATE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_TENANT +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_TENANT +-- ---------------------------- +ALTER TABLE "SYS_TENANT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_TENANT" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_TENANT +-- ---------------------------- +ALTER TABLE "SYS_TENANT" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_THIRD_ACCOUNT +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table SYS_THIRD_ACCOUNT +-- ---------------------------- +ALTER TABLE "SYS_THIRD_ACCOUNT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_THIRD_ACCOUNT" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_THIRD_ACCOUNT +-- ---------------------------- +ALTER TABLE "SYS_THIRD_ACCOUNT" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_USER +-- ---------------------------- +CREATE INDEX "IDX_SU_DEL_FLAG" +ON "SYS_USER" ("DEL_FLAG" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SU_STATUS" +ON "SYS_USER" ("STATUS" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_SYS_USER_EMAIL" +ON "SYS_USER" ("EMAIL" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_SYS_USER_PHONE" +ON "SYS_USER" ("PHONE" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_SYS_USER_USERNAME" +ON "SYS_USER" ("USERNAME" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UNIQ_SYS_USER_WORK_NO" +ON "SYS_USER" ("WORK_NO" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_USER +-- ---------------------------- +ALTER TABLE "SYS_USER" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_USER" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_USER +-- ---------------------------- +ALTER TABLE "SYS_USER" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_USER_AGENT +-- ---------------------------- +CREATE INDEX "IDX_SUG_END_TIME" +ON "SYS_USER_AGENT" ("END_TIME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUG_START_TIME" +ON "SYS_USER_AGENT" ("START_TIME" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUG_STATUS" +ON "SYS_USER_AGENT" ("STATUS" ASC) +LOGGING +VISIBLE; +CREATE UNIQUE INDEX "UK_SUG_USER_NAME" +ON "SYS_USER_AGENT" ("USER_NAME" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_USER_AGENT +-- ---------------------------- +ALTER TABLE "SYS_USER_AGENT" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_USER_AGENT" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_USER_AGENT +-- ---------------------------- +ALTER TABLE "SYS_USER_AGENT" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_USER_DEPART +-- ---------------------------- +CREATE INDEX "IDX_SUD_DEP_ID" +ON "SYS_USER_DEPART" ("DEP_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUD_USER_DEP_ID" +ON "SYS_USER_DEPART" ("DEP_ID" ASC, "USER_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUD_USER_ID" +ON "SYS_USER_DEPART" ("USER_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_USER_DEPART +-- ---------------------------- +ALTER TABLE "SYS_USER_DEPART" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_USER_DEPART" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_USER_DEPART +-- ---------------------------- +ALTER TABLE "SYS_USER_DEPART" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table SYS_USER_ROLE +-- ---------------------------- +CREATE INDEX "IDX_SUR_ROLE_ID" +ON "SYS_USER_ROLE" ("ROLE_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUR_USER_ID" +ON "SYS_USER_ROLE" ("USER_ID" ASC) +LOGGING +VISIBLE; +CREATE INDEX "IDX_SUR_USER_ROLE_ID" +ON "SYS_USER_ROLE" ("ROLE_ID" ASC, "USER_ID" ASC) +LOGGING +VISIBLE; + +-- ---------------------------- +-- Checks structure for table SYS_USER_ROLE +-- ---------------------------- +ALTER TABLE "SYS_USER_ROLE" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "SYS_USER_ROLE" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table SYS_USER_ROLE +-- ---------------------------- +ALTER TABLE "SYS_USER_ROLE" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Indexes structure for table TEST_DEMO +-- ---------------------------- + +-- ---------------------------- +-- Checks structure for table TEST_DEMO +-- ---------------------------- +ALTER TABLE "TEST_DEMO" ADD CHECK ("ID" IS NOT NULL); +ALTER TABLE "TEST_DEMO" ADD CHECK ("ID" IS NOT NULL); + +-- ---------------------------- +-- Primary Key structure for table TEST_DEMO +-- ---------------------------- +ALTER TABLE "TEST_DEMO" ADD PRIMARY KEY ("ID"); + +-- ---------------------------- +-- Foreign Key structure for table "QRTZ_BLOB_TRIGGERS" +-- ---------------------------- +ALTER TABLE "QRTZ_BLOB_TRIGGERS" ADD FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Foreign Key structure for table "QRTZ_CRON_TRIGGERS" +-- ---------------------------- +ALTER TABLE "QRTZ_CRON_TRIGGERS" ADD FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Foreign Key structure for table "QRTZ_SIMPLE_TRIGGERS" +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPLE_TRIGGERS" ADD FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Foreign Key structure for table "QRTZ_SIMPROP_TRIGGERS" +-- ---------------------------- +ALTER TABLE "QRTZ_SIMPROP_TRIGGERS" ADD FOREIGN KEY ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP") REFERENCES "QRTZ_TRIGGERS" ("SCHED_NAME", "TRIGGER_NAME", "TRIGGER_GROUP"); + +-- ---------------------------- +-- Foreign Key structure for table "QRTZ_TRIGGERS" +-- ---------------------------- +ALTER TABLE "QRTZ_TRIGGERS" ADD FOREIGN KEY ("SCHED_NAME", "JOB_NAME", "JOB_GROUP") REFERENCES "QRTZ_JOB_DETAILS" ("SCHED_NAME", "JOB_NAME", "JOB_GROUP"); diff --git a/db/jeroboot-sqlserver2017.sql b/db/jeroboot-sqlserver2017.sql new file mode 100644 index 00000000..4e7a1e95 --- /dev/null +++ b/db/jeroboot-sqlserver2017.sql @@ -0,0 +1,9349 @@ +/* + Navicat Premium Data Transfer + + Source Server : sqlserver_ma + Source Server Type : SQL Server + Source Server Version : 11003000 + Source Host : MMMMMM:1433 + Source Catalog : ma + Source Schema : dbo + + Target Server Type : SQL Server + Target Server Version : 11003000 + File Encoding : 65001 + + Date: 22/03/2021 17:19:04 +*/ + + +-- ---------------------------- +-- Table structure for demo +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[demo]') AND type IN ('U')) + DROP TABLE [dbo].[demo] +GO + +CREATE TABLE [dbo].[demo] ( + [id] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [name] nvarchar(30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [key_word] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [punch_time] datetime2(7) NULL, + [salary_money] decimal(10,3) NULL, + [bonus_money] float(53) NULL, + [sex] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [age] int NULL, + [birthday] date NULL, + [email] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [content] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [sys_org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[demo] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'姓名', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'关键词', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'key_word' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'打卡时间', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'punch_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'工资', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'salary_money' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'奖金', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'bonus_money' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'性别 {男:1,女:2}', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'年龄', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'age' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'生日', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'birthday' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'邮箱', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'email' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'个人简介', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属部门编码', +'SCHEMA', N'dbo', +'TABLE', N'demo', +'COLUMN', N'sys_org_code' +GO + + +-- ---------------------------- +-- Records of demo +-- ---------------------------- +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'1353563050407936002', N'小红帽', NULL, N'2021-01-26 12:39:04.0000000', NULL, NULL, N'2', N'22', N'2021-01-25', NULL, NULL, N'admin', N'2021-01-25 12:39:14.0000000', NULL, NULL, N'A01') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'1dc29e80be14d1400f165b5c6b30c707', N'zhang daihao', NULL, NULL, NULL, NULL, N'2', NULL, NULL, N'zhangdaiscott@163.com', NULL, NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'304e651dc769d5c9b6e08fb30457a602', N'小白兔', NULL, NULL, NULL, NULL, N'2', N'28', NULL, NULL, NULL, N'scott', N'2019-01-19 13:12:53.0000000', N'qinfeng', N'2019-01-19 13:13:12.0000000', NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'4', N'Sandy', N'开源,很好', N'2018-12-15 00:00:00.0000000', NULL, NULL, N'2', N'21', N'2018-12-15', N'test4@baomidou.com', N'聪明00', NULL, NULL, N'admin', N'2019-02-25 16:29:27.0000000', NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'4981637bf71b0c1ed1365241dfcfa0ea', N'小虎', NULL, NULL, NULL, NULL, N'2', N'28', NULL, NULL, NULL, N'scott5', N'2019-01-19 13:12:53.0000000', N'qinfeng', N'2019-01-19 13:13:12.0000000', N'A02') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'7', N'zhangdaiscott', NULL, NULL, NULL, NULL, N'1', NULL, N'2019-01-03', NULL, NULL, NULL, NULL, NULL, NULL, N'A02A01A01') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'73bc58611012617ca446d8999379e4ac', N'郭靖', N'777', N'2018-12-07 00:00:00.0000000', NULL, NULL, N'1', NULL, NULL, NULL, NULL, N'jero-boot', N'2019-03-28 18:16:39.0000000', N'admin', N'2020-05-02 18:14:14.0000000', N'A02A01A02') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'917e240eaa0b1b2d198ae869b64a81c3', N'zhang daihao', NULL, NULL, NULL, NULL, N'2', N'0', N'2018-11-29', N'zhangdaiscott@163.com', NULL, NULL, NULL, NULL, NULL, N'A02') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'94420c5d8fc4420dde1e7196154b3a24', N'秦风', NULL, NULL, NULL, NULL, N'2', NULL, NULL, NULL, NULL, N'scott', N'2019-01-19 12:54:58.0000000', N'admin', N'2020-05-02 18:14:33.0000000', NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'b86897900c770503771c7bb88e5d1e9b', N'scott1', N'开源、很好、hello', NULL, NULL, NULL, N'1', NULL, NULL, N'zhangdaiscott@163.com', NULL, N'scott', N'2019-01-19 12:22:34.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'c28fa8391ef81d6fabd8bd894a7615aa', N'小麦', NULL, NULL, NULL, NULL, N'2', NULL, NULL, N'zhangdaiscott@163.com', NULL, N'jero-boot', N'2019-04-04 17:18:09.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'c2c0d49e3c01913067cf8d1fb3c971d2', N'zhang daihao', N'', NULL, NULL, NULL, N'2', NULL, NULL, N'zhangdaiscott@163.com', N'', N'admin', N'2019-01-19 23:37:18.0000000', N'admin', N'2019-01-21 16:49:06.0000000', N'') +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'c96279c666b4b82e3ef1e4e2978701ce', N'报名时间', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'jero-boot', N'2019-03-28 18:00:52.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'd24668721446e8478eeeafe4db66dcff', N'zhang daihao999', NULL, NULL, NULL, NULL, N'1', NULL, NULL, N'zhangdaiscott@163.com', NULL, NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[demo] ([id], [name], [key_word], [punch_time], [salary_money], [bonus_money], [sex], [age], [birthday], [email], [content], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'eaa6c1116b41dc10a94eae34cf990133', N'zhang daihao', NULL, NULL, NULL, NULL, NULL, NULL, NULL, N'zhangdaiscott@163.com', NULL, NULL, NULL, NULL, NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for jero_order_customer +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[jero_order_customer]') AND type IN ('U')) + DROP TABLE [dbo].[jero_order_customer] +GO + +CREATE TABLE [dbo].[jero_order_customer] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [sex] nvarchar(4) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [idcard] nvarchar(18) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [idcard_pic] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [telphone] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [order_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[jero_order_customer] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'客户名', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'性别', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'身份证号码', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'idcard' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'身份证扫描件', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'idcard_pic' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'电话1', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'telphone' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'外键', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'order_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_customer', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of jero_order_customer +-- ---------------------------- +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256527640480821249', N'scott', N'2', NULL, NULL, NULL, N'b190737bd04cca8360e6f87c9ef9ec4e', N'admin', N'2020-05-02 18:15:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256527640531152898', N'x秦风', N'1', NULL, NULL, NULL, N'b190737bd04cca8360e6f87c9ef9ec4e', N'admin', N'2020-05-02 18:15:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256527874216800257', N'小王1', N'1', N'', NULL, N'', N'9a57c850e4f68cf94ef7d8585dbaf7e6', N'admin', N'2020-05-02 18:17:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15538561502720', N'3333', N'1', N'', NULL, N'', N'0d4a2e67b538ee1bc881e5ed34f670f0', N'jero-boot', N'2019-03-29 18:42:55.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15538561512681', N'3332333', N'2', N'', NULL, N'', N'0d4a2e67b538ee1bc881e5ed34f670f0', N'jero-boot', N'2019-03-29 18:42:55.0000000', N'admin', N'2019-03-29 18:43:12.0000000') +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15538561550142', N'4442', N'2', N'', NULL, N'', N'0d4a2e67b538ee1bc881e5ed34f670f0', N'jero-boot', N'2019-03-29 18:42:55.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15541168497342', N'444', N'', N'', N'', N'', N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15541168499553', N'5555', N'', N'', N'', N'', N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'18dc5eb1068ccdfe90e358951ca1a3d6', N'dr2', N'', N'', N'', N'', N'8ab1186410a65118c4d746eb085d3bed', N'admin', N'2019-04-04 17:25:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'195d280490fe88ca1475512ddcaf2af9', N'12', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'217a2bf83709775d2cd85bf598392327', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'22bc052ae53ed09913b946abba93fa89', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'23bafeae88126c3bf3322a29a04f0d5e', N'x秦风', NULL, NULL, NULL, NULL, N'163e2efcbc6d7d54eb3f8a137da8a75a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'25c4a552c6843f36fad6303bfa99a382', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'2d32144e2bee63264f3f16215c258381', N'33333', N'2', NULL, NULL, NULL, N'd908bfee3377e946e59220c4a4eb414a', N'admin', N'2019-04-01 16:27:03.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'2d43170d6327f941bd1a017999495e25', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'2e5f62a8b6e0a0ce19b52a6feae23d48', N'3', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'34a1c5cf6cee360ed610ed0bed70e0f9', N'导入秦风', NULL, NULL, NULL, NULL, N'a2cce75872cc8fcc47f78de9ffd378c2', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'3c87400f8109b4cf43c5598f0d40e34d', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'40964bcbbecb38e5ac15e6d08cf3cd43', N'233', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'41e3dee0b0b6e6530eccb7fbb22fd7a3', N'4555', N'1', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'4808ae8344c7679a4a2f461db5dc3a70', N'44', N'1', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'4b6cef12f195fad94d57279b2241770d', N'dr12', N'', N'', N'', N'', N'8ab1186410a65118c4d746eb085d3bed', N'admin', N'2019-04-04 17:25:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'524e695283f8e8c256cc24f39d6d8542', N'小王', N'2', N'370285198604033222', NULL, N'18611788674', N'eb13ab35d2946a2b0cfe3452bca1e73f', N'admin', N'2019-02-25 16:29:41.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'57c2a8367db34016114cbc9fa368dba0', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5df36a1608b8c7ac99ad9bc408fe54bf', N'4', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6c6fd2716c2dcd044ed03c2c95d261f8', N'李四', N'2', N'370285198602058833', N'', N'18611788676', N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'742d008214dee0afff2145555692973e', N'秦风', N'1', N'370285198602058822', NULL, N'18611788676', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'7469c3e5d371767ff90a739d297689b5', N'导入秦风', N'2', NULL, NULL, NULL, N'3a867ebf2cebce9bae3f79676d8d86f3', N'jero-boot', N'2019-03-29 18:43:59.0000000', N'admin', N'2019-04-08 17:35:02.0000000') +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'7a96e2c7b24847d4a29940dbc0eda6e5', N'drscott', NULL, NULL, NULL, NULL, N'e73434dad84ebdce2d4e0c2a2f06d8ea', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'7f5a40818e225ee18bda6da7932ac5f9', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8011575abfd7c8085e71ff66df1124b9', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8404f31d7196221a573c9bd6c8f15003', N'小张', N'1', N'370285198602058211', NULL, N'18611788676', N'eb13ab35d2946a2b0cfe3452bca1e73f', N'admin', N'2019-02-25 16:29:41.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'859020e10a2f721f201cdbff78cf7b9f', N'scott', NULL, NULL, NULL, NULL, N'163e2efcbc6d7d54eb3f8a137da8a75a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8cc3c4d26e3060975df3a2adb781eeb4', N'dr33', NULL, NULL, NULL, NULL, N'b2feb454e43c46b2038768899061e464', N'jero-boot', N'2019-04-04 17:23:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8d1725c23a6a50685ff0dedfd437030d', N'4', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'933cae3a79f60a93922d59aace5346ce', N'小王', NULL, N'370285198604033222', NULL, N'18611788674', N'6a719071a29927a14f19482f8693d69a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'9bdb5400b709ba4eaf3444de475880d7', N'dr22', NULL, NULL, NULL, NULL, N'22c17790dcd04b296c4a2a089f71895f', N'jero-boot', N'2019-04-04 17:23:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'9f87677f70e5f864679314389443a3eb', N'33', N'2', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a2c2b7101f75c02deb328ba777137897', N'44', N'2', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ab4d002dc552c326147e318c87d3bed4', N'小红1', N'1', N'370285198604033222', NULL, N'18611755848', N'9a57c850e4f68cf94ef7d8585dbaf7e6', N'admin', N'2020-05-02 18:17:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ad116f722a438e5f23095a0b5fcc8e89', N'dr秦风', NULL, NULL, NULL, NULL, N'e73434dad84ebdce2d4e0c2a2f06d8ea', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b1ba147b75f5eaa48212586097fc3fd1', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b43bf432c251f0e6b206e403b8ec29bc', N'lisi', NULL, NULL, NULL, NULL, N'f8889aaef6d1bccffd98d2889c0aafb5', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'bcdd300a7d44c45a66bdaac14903c801', N'33', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'beb983293e47e2dc1a9b3d649aa3eb34', N'ddd3', NULL, NULL, NULL, NULL, N'd908bfee3377e946e59220c4a4eb414a', N'admin', N'2019-04-01 16:27:03.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c219808196406f1b8c7f1062589de4b5', N'44', N'1', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c8ed061d4b27c0c7a64e100f2b1c8ab5', N'张经理', N'2', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'cc5de4af7f06cd6d250965ebe92a0395', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'cf8817bd703bf7c7c77a2118edc26cc7', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'd72b26fae42e71270fce2097a88da58a', N'导入scott', NULL, N'www', NULL, NULL, N'3a867ebf2cebce9bae3f79676d8d86f3', N'jero-boot', N'2019-03-29 18:43:59.0000000', N'admin', N'2019-04-08 17:35:05.0000000') +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'dbdc60a6ac1a8c43f24afee384039b68', N'xiaowang', NULL, NULL, NULL, NULL, N'f8889aaef6d1bccffd98d2889c0aafb5', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'dc5883b50466de94d900919ed96d97af', N'33', N'1', N'370285198602058823', NULL, N'18611788674', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'deeb73e553ad8dc0a0b3cfd5a338de8e', N'3333', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e2570278bf189ac05df3673231326f47', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e39cb23bb950b2bdedfc284686c6128a', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e46fe9111a9100844af582a18a2aa402', N'1', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ee7af0acb9beb9bf8d8b3819a8a7fdc3', N'2', NULL, NULL, NULL, NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f5d2605e844192d9e548f9bd240ac908', N'小张', NULL, N'370285198602058211', NULL, N'18611788676', N'6a719071a29927a14f19482f8693d69a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_customer] ([id], [name], [sex], [idcard], [idcard_pic], [telphone], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f6db6547382126613a3e46e7cd58a5f2', N'导入scott', NULL, NULL, NULL, NULL, N'a2cce75872cc8fcc47f78de9ffd378c2', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for jero_order_main +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[jero_order_main]') AND type IN ('U')) + DROP TABLE [dbo].[jero_order_main] +GO + +CREATE TABLE [dbo].[jero_order_main] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [order_code] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [ctype] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [order_date] datetime2(7) NULL, + [order_money] float(53) NULL, + [content] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[jero_order_main] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'订单号', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'order_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'订单类型', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'ctype' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'订单日期', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'order_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'订单金额', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'order_money' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'订单备注', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_main', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of jero_order_main +-- ---------------------------- +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'163e2efcbc6d7d54eb3f8a137da8a75a', N'B100', NULL, NULL, N'3000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'3a867ebf2cebce9bae3f79676d8d86f3', N'导入B100', N'2222', NULL, N'3000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', N'admin', N'2019-04-08 17:35:13.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'4cba137333127e8e31df7ad168cc3732', N'青岛订单A0001', N'2', N'2019-04-03 10:56:07.0000000', NULL, NULL, N'admin', N'2019-04-03 10:56:11.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'54e739bef5b67569c963c38da52581ec', N'NC911', N'1', N'2019-02-18 09:58:51.0000000', N'40', NULL, N'admin', N'2019-02-18 09:58:47.0000000', N'admin', N'2019-02-18 09:58:59.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6a719071a29927a14f19482f8693d69a', N'c100', NULL, NULL, N'5000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8ab1186410a65118c4d746eb085d3bed', N'导入400', N'1', N'2019-02-18 09:58:51.0000000', N'40', NULL, N'admin', N'2019-02-18 09:58:47.0000000', N'admin', N'2019-02-18 09:58:59.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'9a57c850e4f68cf94ef7d8585dbaf7e6', N'halou001', N'1', N'2019-04-04 17:30:32.0000000', N'500', NULL, N'admin', N'2019-04-04 17:30:41.0000000', N'admin', N'2020-05-02 18:17:36.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a2cce75872cc8fcc47f78de9ffd378c2', N'导入B100', NULL, NULL, N'3000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b190737bd04cca8360e6f87c9ef9ec4e', N'B0018888', N'1', NULL, NULL, NULL, N'admin', N'2019-02-15 18:39:29.0000000', N'admin', N'2020-05-02 18:15:09.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'd908bfee3377e946e59220c4a4eb414a', N'SSSS001', NULL, NULL, N'599', NULL, N'admin', N'2019-04-01 15:43:03.0000000', N'admin', N'2019-04-01 16:26:52.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e73434dad84ebdce2d4e0c2a2f06d8ea', N'导入200', NULL, NULL, N'3000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'eb13ab35d2946a2b0cfe3452bca1e73f', N'BJ9980', N'1', NULL, N'90', NULL, N'admin', N'2019-02-16 17:36:42.0000000', N'admin', N'2019-02-16 17:46:16.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f71f7f8930b5b6b1703d9948d189982b', N'BY911', NULL, N'2019-04-06 19:08:39.0000000', NULL, NULL, N'admin', N'2019-04-01 16:36:02.0000000', N'admin', N'2019-04-01 16:36:08.0000000') +GO + +INSERT INTO [dbo].[jero_order_main] ([id], [order_code], [ctype], [order_date], [order_money], [content], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f8889aaef6d1bccffd98d2889c0aafb5', N'A100', NULL, N'2018-10-10 00:00:00.0000000', N'6000', NULL, N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for jero_order_ticket +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[jero_order_ticket]') AND type IN ('U')) + DROP TABLE [dbo].[jero_order_ticket] +GO + +CREATE TABLE [dbo].[jero_order_ticket] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [ticket_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [tickect_date] datetime2(7) NULL, + [order_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[jero_order_ticket] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'航班号', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'ticket_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'航班时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'tickect_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'外键', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'order_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'jero_order_ticket', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of jero_order_ticket +-- ---------------------------- +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'0f0e3a40a215958f807eea08a6e1ac0a', N'88', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'0fa3bd0bbcf53650c0bb3c0cac6d8cb7', N'ffff', N'2019-02-21 00:00:00.0000000', N'eb13ab35d2946a2b0cfe3452bca1e73f', N'admin', N'2019-02-25 16:29:41.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256527640543735810', N'222', N'2019-02-23 00:00:00.0000000', N'b190737bd04cca8360e6f87c9ef9ec4e', N'admin', N'2020-05-02 18:15:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256527640560513025', N'111', N'2019-02-01 00:00:00.0000000', N'b190737bd04cca8360e6f87c9ef9ec4e', N'admin', N'2020-05-02 18:15:09.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'14221afb4f5f749c1deef26ac56fdac3', N'33', N'2019-03-09 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15538561502730', N'222', NULL, N'0d4a2e67b538ee1bc881e5ed34f670f0', N'jero-boot', N'2019-03-29 18:42:55.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15538561526461', N'2244', N'2019-03-29 00:00:00.0000000', N'0d4a2e67b538ee1bc881e5ed34f670f0', N'jero-boot', N'2019-03-29 18:42:55.0000000', N'admin', N'2019-03-29 18:43:26.0000000') +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15541168478913', N'hhhhh', NULL, N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'18905bc89ee3851805aab38ed3b505ec', N'44', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1f809cbd26f4e574697e1c10de575d72', N'A100', NULL, N'e73434dad84ebdce2d4e0c2a2f06d8ea', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'21051adb51529bdaa8798b5a3dd7f7f7', N'C10029', N'2019-02-20 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'269576e766b917f8b6509a2bb0c4d4bd', N'A100', NULL, N'163e2efcbc6d7d54eb3f8a137da8a75a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'2d473ffc79e5b38a17919e15f8b7078e', N'66', N'2019-03-29 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'3655b66fca5fef9c6aac6d70182ffda2', N'AA123', N'2019-04-01 00:00:00.0000000', N'd908bfee3377e946e59220c4a4eb414a', N'admin', N'2019-04-01 16:27:03.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'365d5919155473ade45840fd626c51a9', N'dddd', N'2019-04-04 17:25:29.0000000', N'8ab1186410a65118c4d746eb085d3bed', N'admin', N'2019-04-04 17:25:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'4889a782e78706ab4306a925cfb163a5', N'C34', N'2019-04-01 00:00:00.0000000', N'd908bfee3377e946e59220c4a4eb414a', N'admin', N'2019-04-01 16:35:00.0000000', N'admin', N'2019-04-01 16:35:07.0000000') +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'48d385796382cf87fa4bdf13b42d9a28', N'导入A100', NULL, N'3a867ebf2cebce9bae3f79676d8d86f3', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'541faed56efbeb4be9df581bd8264d3a', N'88', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'57a27a7dfd6a48e7d981f300c181b355', N'6', N'2019-03-30 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5ce4dc439c874266e42e6c0ff8dc8b5c', N'导入A100', NULL, N'a2cce75872cc8fcc47f78de9ffd378c2', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'645a06152998a576c051474157625c41', N'88', N'2019-04-04 17:25:31.0000000', N'8ab1186410a65118c4d746eb085d3bed', N'admin', N'2019-04-04 17:25:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6e3562f2571ea9e96b2d24497b5f5eec', N'55', N'2019-03-23 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8fd2b389151568738b1cc4d8e27a6110', N'导入A100', NULL, N'a2cce75872cc8fcc47f78de9ffd378c2', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'93f1a84053e546f59137432ff5564cac', N'55', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'969ddc5d2e198d50903686917f996470', N'A10029', N'2019-04-01 00:00:00.0000000', N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'96e7303a8d22a5c384e08d7bcf7ac2bf', N'A100', NULL, N'e73434dad84ebdce2d4e0c2a2f06d8ea', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'9e8a3336f6c63f558f2b68ce2e1e666e', N'深圳1001', N'2020-05-02 00:00:00.0000000', N'9a57c850e4f68cf94ef7d8585dbaf7e6', N'admin', N'2020-05-02 18:17:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a28db02c810c65660015095cb81ed434', N'A100', NULL, N'f8889aaef6d1bccffd98d2889c0aafb5', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b217bb0e4ec6a45b6cbf6db880060c0f', N'A100', NULL, N'6a719071a29927a14f19482f8693d69a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ba708df70bb2652ed1051a394cfa0bb3', N'333', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'beabbfcb195d39bedeeafe8318794562', N'A1345', N'2019-04-01 00:00:00.0000000', N'd908bfee3377e946e59220c4a4eb414a', N'admin', N'2019-04-01 16:27:04.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'bf450223cb505f89078a311ef7b6ed16', N'777', N'2019-03-30 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c06165b6603e3e1335db187b3c841eef', N'北京2001', N'2020-05-23 00:00:00.0000000', N'9a57c850e4f68cf94ef7d8585dbaf7e6', N'admin', N'2020-05-02 18:17:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c113136abc26ace3a6da4e41d7dc1c7e', N'44', N'2019-03-15 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c1abdc2e30aeb25de13ad6ee3488ac24', N'77', N'2019-03-22 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c23751a7deb44f553ce50a94948c042a', N'33', N'2019-03-09 00:00:00.0000000', N'8ab1186410a65118c4d746eb085d3bed', N'admin', N'2019-04-04 17:25:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c64547666b634b3d6a0feedcf05f25ce', N'C10019', N'2019-04-01 00:00:00.0000000', N'f71f7f8930b5b6b1703d9948d189982b', N'admin', N'2019-04-01 19:08:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c8b8d3217f37da78dddf711a1f7da485', N'A100', NULL, N'163e2efcbc6d7d54eb3f8a137da8a75a', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'cab691c1c1ff7a6dfd7248421917fd3c', N'A100', NULL, N'f8889aaef6d1bccffd98d2889c0aafb5', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'cca10a9a850b456d9b72be87da7b0883', N'77', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'd2fbba11f4814d9b1d3cb1a3f342234a', N'C10019', N'2019-02-18 00:00:00.0000000', N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'dbdb07a16826808e4276e84b2aa4731a', N'导入A100', NULL, N'3a867ebf2cebce9bae3f79676d8d86f3', N'jero-boot', N'2019-03-29 18:43:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e7075639c37513afc0bbc4bf7b5d98b9', N'88', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'fa759dc104d0371f8aa28665b323dab6', N'888', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[jero_order_ticket] ([id], [ticket_code], [tickect_date], [order_id], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ff197da84a9a3af53878eddc91afbb2e', N'33', NULL, N'54e739bef5b67569c963c38da52581ec', N'admin', N'2019-03-15 16:50:15.0000000', NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for joa_demo +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[joa_demo]') AND type IN ('U')) + DROP TABLE [dbo].[joa_demo] +GO + +CREATE TABLE [dbo].[joa_demo] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [days] int NULL, + [begin_date] datetime2(7) NULL, + [end_date] datetime2(7) NULL, + [reason] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [bpm_status] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[joa_demo] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'ID', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请假人', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请假天数', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'days' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'开始时间', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'begin_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请假结束时间', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'end_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请假原因', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'reason' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'流程状态', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'bpm_status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人id', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人id', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'流程测试', +'SCHEMA', N'dbo', +'TABLE', N'joa_demo' +GO + + +-- ---------------------------- +-- Records of joa_demo +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_auth_data +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_auth_data]') AND type IN ('U')) + DROP TABLE [dbo].[onl_auth_data] +GO + +CREATE TABLE [dbo].[onl_auth_data] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgform_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_column] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_operator] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_value] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] int NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[onl_auth_data] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'online表ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'cgform_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则名', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'rule_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则列', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'rule_column' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则条件 大于小于like', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'rule_operator' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则值', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'rule_value' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'1有效 0无效', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_data', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of onl_auth_data +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_auth_page +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_auth_page]') AND type IN ('U')) + DROP TABLE [dbo].[onl_auth_page] +GO + +CREATE TABLE [dbo].[onl_auth_page] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgform_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [code] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [type] int NULL, + [control] int NULL, + [page] int NULL, + [status] int NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[onl_auth_page] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N' 主键', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'online表id', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'cgform_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段名/按钮编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'1字段 2按钮', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'3可编辑 5可见(仅支持两种状态值3,5)', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'control' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'3列表 5表单(仅支持两种状态值3,5)', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'page' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'1有效 0无效', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_page', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of onl_auth_page +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_auth_relation +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_auth_relation]') AND type IN ('U')) + DROP TABLE [dbo].[onl_auth_relation] +GO + +CREATE TABLE [dbo].[onl_auth_relation] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [role_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [auth_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [type] int NULL, + [cgform_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_auth_relation] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色id', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_relation', +'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限id', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_relation', +'COLUMN', N'auth_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'1字段 2按钮 3数据权限', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_relation', +'COLUMN', N'type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'online表单ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_auth_relation', +'COLUMN', N'cgform_id' +GO + + +-- ---------------------------- +-- Records of onl_auth_relation +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_cgform_button +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_button]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_button] +GO + +CREATE TABLE [dbo].[onl_cgform_button] ( + [ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [BUTTON_CODE] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BUTTON_ICON] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BUTTON_NAME] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BUTTON_STATUS] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BUTTON_STYLE] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [EXP] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CGFORM_HEAD_ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [OPT_TYPE] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [ORDER_NUM] int NULL, + [OPT_POSITION] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_button] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'BUTTON_CODE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮图标', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'BUTTON_ICON' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'BUTTON_NAME' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮状态', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'BUTTON_STATUS' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮样式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'BUTTON_STYLE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表达式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'EXP' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'CGFORM_HEAD_ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'OPT_TYPE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'ORDER_NUM' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮位置1侧面 2底部', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button', +'COLUMN', N'OPT_POSITION' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'Online表单自定义按钮', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_button' +GO + + +-- ---------------------------- +-- Records of onl_cgform_button +-- ---------------------------- +INSERT INTO [dbo].[onl_cgform_button] ([ID], [BUTTON_CODE], [BUTTON_ICON], [BUTTON_NAME], [BUTTON_STATUS], [BUTTON_STYLE], [EXP], [CGFORM_HEAD_ID], [OPT_TYPE], [ORDER_NUM], [OPT_POSITION]) VALUES (N'cc1d12de57a1a41d3986ed6d13e3ac11', N'链接按钮测试', N'icon-edit', N'自定义link', N'1', N'link', NULL, N'd35109c3632c4952a19ecc094943dd71', N'js', NULL, N'2') +GO + +INSERT INTO [dbo].[onl_cgform_button] ([ID], [BUTTON_CODE], [BUTTON_ICON], [BUTTON_NAME], [BUTTON_STATUS], [BUTTON_STYLE], [EXP], [CGFORM_HEAD_ID], [OPT_TYPE], [ORDER_NUM], [OPT_POSITION]) VALUES (N'ebcc48ef0bde4433a6faf940a5e170c1', N'button按钮测试', N'icon-edit', N'自定义button', N'1', N'button', NULL, N'd35109c3632c4952a19ecc094943dd71', N'js', NULL, N'2') +GO + + +-- ---------------------------- +-- Table structure for onl_cgform_enhance_java +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_enhance_java]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_enhance_java] +GO + +CREATE TABLE [dbo].[onl_cgform_enhance_java] ( + [ID] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [BUTTON_CODE] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CG_JAVA_TYPE] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CG_JAVA_VALUE] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CGFORM_HEAD_ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [ACTIVE_STATUS] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [EVENT] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_enhance_java] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'BUTTON_CODE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'CG_JAVA_TYPE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数值', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'CG_JAVA_VALUE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'CGFORM_HEAD_ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'生效状态', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'ACTIVE_STATUS' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'事件状态(end:结束,start:开始)', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_java', +'COLUMN', N'EVENT' +GO + + +-- ---------------------------- +-- Records of onl_cgform_enhance_java +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_cgform_enhance_js +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_enhance_js]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_enhance_js] +GO + +CREATE TABLE [dbo].[onl_cgform_enhance_js] ( + [ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CG_JS] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CG_JS_TYPE] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CONTENT] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CGFORM_HEAD_ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_enhance_js] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_js', +'COLUMN', N'ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'JS增强内容', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_js', +'COLUMN', N'CG_JS' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_js', +'COLUMN', N'CG_JS_TYPE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'备注', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_js', +'COLUMN', N'CONTENT' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_js', +'COLUMN', N'CGFORM_HEAD_ID' +GO + + +-- ---------------------------- +-- Records of onl_cgform_enhance_js +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_cgform_enhance_sql +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_enhance_sql]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_enhance_sql] +GO + +CREATE TABLE [dbo].[onl_cgform_enhance_sql] ( + [ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [BUTTON_CODE] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CGB_SQL] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CGB_SQL_NAME] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CONTENT] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [CGFORM_HEAD_ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_enhance_sql] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'BUTTON_CODE' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'SQL内容', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'CGB_SQL' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'Sql名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'CGB_SQL_NAME' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'备注', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'CONTENT' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_enhance_sql', +'COLUMN', N'CGFORM_HEAD_ID' +GO + + +-- ---------------------------- +-- Records of onl_cgform_enhance_sql +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_cgform_field +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_field]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_field] +GO + +CREATE TABLE [dbo].[onl_cgform_field] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgform_head_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [db_field_name] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [db_field_txt] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_field_name_old] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_is_key] tinyint NULL, + [db_is_null] tinyint NULL, + [db_type] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [db_length] int NOT NULL, + [db_point_length] int NULL, + [db_default_val] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [dict_field] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [dict_table] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [dict_text] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_show_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_href] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_length] int NULL, + [field_valid_type] nvarchar(300) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_must_input] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_extend_json] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_default_value] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_query] tinyint NULL, + [is_show_form] tinyint NULL, + [is_show_list] tinyint NULL, + [is_read_only] tinyint NULL, + [query_mode] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [main_table] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [main_field] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [order_num] int NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [converter] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_def_val] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_dict_text] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_dict_field] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_dict_table] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_show_type] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_config_flag] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_valid_type] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_must_input] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [sort_flag] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_field] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'cgform_head_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段名字', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_field_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段备注', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_field_txt' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'原字段名', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_field_name_old' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否主键 0否 1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_is_key' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否允许为空0否 1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_is_null' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据库字段类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据库字段长度', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_length' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'小数点', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_point_length' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表字段默认值', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'db_default_val' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典code', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'dict_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典表', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'dict_table' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典Text', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'dict_text' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单控件类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_show_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'跳转URL', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_href' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单控件长度', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_length' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单字段校验规则', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_valid_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段是否必填', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_must_input' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'扩展参数JSON', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_extend_json' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'控件默认值,不同的表达式展示不同的结果。 +1. 纯字符串直接赋给默认值; +2. #{普通变量}; +3. {{ 动态JS表达式 }}; +4. ${填值规则编码}; +填值规则表达式只允许存在一个,且不能和其他规则混用。', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'field_default_value' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否查询条件0否 1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'is_query' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单是否显示0否 1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'is_show_form' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'列表是否显示0否 1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'is_show_list' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否是只读(1是 0否)', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'is_read_only' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询模式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_mode' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'外键主表名', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'main_table' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'外键主键字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'main_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'order_num' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'自定义值转换器', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'converter' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询默认值', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_def_val' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询配置字典text', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_dict_text' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询配置字典code', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_dict_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询配置字典table', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_dict_table' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询显示控件', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_show_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否启用查询配置1是0否', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_config_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询字段校验类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_valid_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询字段是否必填1是0否', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'query_must_input' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否支持排序1是0否', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_field', +'COLUMN', N'sort_flag' +GO + + +-- ---------------------------- +-- Records of onl_cgform_field +-- ---------------------------- +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'04e4185a503e6aaaa31c243829ff4ac7', N'd35109c3632c4952a19ecc094943dd71', N'birthday', N'生日', NULL, N'0', N'1', N'Date', N'32', N'0', N'', N'', N'', N'', N'date', N'', N'120', N'', N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'10', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'191705159cea35e8cbacb326f172be94', N'd35109c3632c4952a19ecc094943dd71', N'search_sel', N'搜索下拉', NULL, N'0', N'1', N'string', N'100', N'0', N'', N'role_code', N'sys_role', N'role_name', N'sel_search', N'', N'120', NULL, N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'18', N'admin', N'2021-03-16 17:09:22.0000000', N'2020-11-26 18:02:20.0000000', N'admin', N'', N'', N'', N'', N'', N'text', N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'20ff34fb0466089cb633d73d5a6f08d6', N'd35109c3632c4952a19ecc094943dd71', N'update_time', N'更新日期', NULL, N'0', N'1', N'Date', N'20', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'', N'0', N'', N'', N'0', N'0', N'0', N'0', N'single', N'', N'', N'5', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'242cc59b23965a92161eca69ffdbf018', N'd35109c3632c4952a19ecc094943dd71', N'age', N'年龄', NULL, N'0', N'1', N'int', N'32', N'0', N'', N'', N'', N'', N'text', N'http://www.baidu.com', N'120', N'', N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'8', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'3acd1b022fd8cb6b99534161fa3d6a24', N'd35109c3632c4952a19ecc094943dd71', N'ceck', N'checkbox', NULL, N'0', N'1', N'string', N'32', N'0', N'', N'sex', N'', N'', N'checkbox', N'', N'120', NULL, N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'16', N'admin', N'2021-03-16 17:09:22.0000000', N'2020-11-26 18:02:20.0000000', N'admin', N'', N'', N'', N'', N'', N'text', N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'3cd2061ea15ce9eeb4b7cf2e544ccb6b', N'd35109c3632c4952a19ecc094943dd71', N'file_kk', N'附件', NULL, N'0', N'1', N'String', N'500', N'0', N'', N'', N'', N'', N'file', N'', N'120', NULL, N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'13', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-06-10 20:06:57.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'47fa05530f3537a1be8f9e7a9e98be82', N'd35109c3632c4952a19ecc094943dd71', N'sex', N'性别', NULL, N'0', N'1', N'string', N'32', N'0', N'', N'sex', N'', N'', N'list', N'', N'120', N'', N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'7', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'1') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'509a4f63f02e784bc04499a6a9be8528', N'd35109c3632c4952a19ecc094943dd71', N'update_by', N'更新人登录名称', NULL, N'0', N'1', N'string', N'50', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'', N'0', N'', N'', N'0', N'0', N'0', N'0', N'single', N'', N'', N'4', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'5b17ba693745c258f6b66380ac851e5f', N'd35109c3632c4952a19ecc094943dd71', N'id', N'主键', NULL, N'1', N'0', N'string', N'36', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'', N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'1', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'6a30c2e6f01ddd24349da55a37025cc0', N'd35109c3632c4952a19ecc094943dd71', N'top_pic', N'头像', NULL, N'0', N'1', N'String', N'500', N'0', N'', N'', N'', N'', N'image', N'', N'120', NULL, N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'12', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-06-10 20:06:56.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'88de72456c03410c364c80095aaa96eb', N'd35109c3632c4952a19ecc094943dd71', N'pop', N'弹窗', NULL, N'0', N'1', N'string', N'32', N'0', N'', N'', N'', N'', N'text', N'', N'120', NULL, N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'15', N'admin', N'2021-03-16 17:09:22.0000000', N'2020-11-26 18:02:20.0000000', N'admin', N'', N'', N'', N'', N'', N'text', N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'90a822b8a63bbbc1e9575c9f4e21e021', N'd35109c3632c4952a19ecc094943dd71', N'descc', N'描述', NULL, N'0', N'1', N'string', N'500', N'0', N'', N'', N'', N'', N'umeditor', N'', N'120', N'', N'0', N'', N'', N'0', N'1', N'1', N'0', N'single', N'', N'', N'9', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'ba17414716b12b51c85f9d1f6f1e5787', N'd35109c3632c4952a19ecc094943dd71', N'chegnshi', N'城市', NULL, N'0', N'1', N'string', N'300', N'0', N'', N'', N'', N'', N'pca', N'', N'120', NULL, N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'14', N'admin', N'2021-03-16 17:09:22.0000000', N'2020-11-26 16:54:45.0000000', N'admin', N'', N'', N'', N'', N'', N'text', N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'be868eed386da3cfcf49ea9afcdadf11', N'd35109c3632c4952a19ecc094943dd71', N'create_time', N'创建日期', NULL, N'0', N'1', N'Date', N'20', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'', N'0', N'', N'', N'0', N'0', N'0', N'0', N'single', N'', N'', N'3', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'cb7da49a981a1b0acc5f7e8a0130bdcd', N'd35109c3632c4952a19ecc094943dd71', N'user_code', N'用户编码', NULL, N'0', N'1', N'String', N'32', N'0', N'', N'', N'', N'', N'text', N'', N'120', NULL, N'0', N'', N'', N'1', N'1', N'0', N'0', N'single', N'', N'', N'11', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-05-11 16:26:37.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'd4d8cae3cd9ea93e378fc14303eee105', N'd35109c3632c4952a19ecc094943dd71', N'create_by', N'创建人登录名称', NULL, N'0', N'1', N'string', N'50', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'', N'0', N'', N'', N'0', N'0', N'0', N'0', N'single', N'', N'', N'2', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'e50b4398731e06572c247993a0dcc38d', N'd35109c3632c4952a19ecc094943dd71', N'name', N'用户名', NULL, N'0', N'1', N'string', N'200', N'0', N'', N'', N'', N'', N'text', N'', N'120', N'*', N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'6', N'admin', N'2021-03-16 17:09:22.0000000', N'2019-03-15 14:24:35.0000000', N'admin', N'', N'', N'', N'', N'', NULL, N'0', NULL, NULL, N'1') +GO + +INSERT INTO [dbo].[onl_cgform_field] ([id], [cgform_head_id], [db_field_name], [db_field_txt], [db_field_name_old], [db_is_key], [db_is_null], [db_type], [db_length], [db_point_length], [db_default_val], [dict_field], [dict_table], [dict_text], [field_show_type], [field_href], [field_length], [field_valid_type], [field_must_input], [field_extend_json], [field_default_value], [is_query], [is_show_form], [is_show_list], [is_read_only], [query_mode], [main_table], [main_field], [order_num], [update_by], [update_time], [create_time], [create_by], [converter], [query_def_val], [query_dict_text], [query_dict_field], [query_dict_table], [query_show_type], [query_config_flag], [query_valid_type], [query_must_input], [sort_flag]) VALUES (N'f6076d9c662a0adddb39a91cccb4c993', N'd35109c3632c4952a19ecc094943dd71', N'xiamuti', N'下拉多选', NULL, N'0', N'1', N'string', N'100', N'0', N'', N'sex', N'', N'', N'list_multi', N'', N'120', NULL, N'0', N'', N'', N'1', N'1', N'1', N'0', N'single', N'', N'', N'17', N'admin', N'2021-03-16 17:09:22.0000000', N'2020-11-26 18:02:20.0000000', N'admin', N'', N'', N'', N'', N'', N'text', N'0', NULL, NULL, N'0') +GO + + +-- ---------------------------- +-- Table structure for onl_cgform_head +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_head]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_head] +GO + +CREATE TABLE [dbo].[onl_cgform_head] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [table_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [table_type] int NOT NULL, + [table_version] int NULL, + [table_txt] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [is_checkbox] nvarchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [is_db_synch] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [is_page] nvarchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [is_tree] nvarchar(5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [id_sequence] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [id_type] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [query_mode] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [relation_type] int NULL, + [sub_table_str] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [tab_order_num] int NULL, + [tree_parent_id_field] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [tree_id_field] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [tree_fieldname] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [form_category] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [form_template] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [form_template_mobile] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [scroll] int NULL, + [copy_version] int NULL, + [copy_type] int NULL, + [physic_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [theme_template] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_des_form] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [des_form_code] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_head] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表名', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'table_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表类型: 0单表、1主表、2附表', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'table_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表版本', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'table_version' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表说明', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'table_txt' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否带checkbox', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'is_checkbox' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'同步数据库状态', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'is_db_synch' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否分页', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'is_page' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否是树', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'is_tree' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键生成序列', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'id_sequence' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'id_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询模式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'query_mode' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'映射关系 0一对多 1一对一', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'relation_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'子表', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'sub_table_str' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'附表排序序号', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'tab_order_num' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'树形表单父id', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'tree_parent_id_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'树表主键字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'tree_id_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'树开表单列字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'tree_fieldname' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单分类', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'form_category' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'PC表单模板', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'form_template' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表单模板样式(移动端)', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'form_template_mobile' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否有横向滚动条', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'scroll' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'复制版本号', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'copy_version' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'复制表类型1为复制表 0为原始表', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'copy_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'原始表ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'physic_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主题模板', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'theme_template' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否用设计器表单', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'is_des_form' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'设计器表单编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_head', +'COLUMN', N'des_form_code' +GO + + +-- ---------------------------- +-- Records of onl_cgform_head +-- ---------------------------- +INSERT INTO [dbo].[onl_cgform_head] ([id], [table_name], [table_type], [table_version], [table_txt], [is_checkbox], [is_db_synch], [is_page], [is_tree], [id_sequence], [id_type], [query_mode], [relation_type], [sub_table_str], [tab_order_num], [tree_parent_id_field], [tree_id_field], [tree_fieldname], [form_category], [form_template], [form_template_mobile], [scroll], [copy_version], [copy_type], [physic_id], [update_by], [update_time], [create_by], [create_time], [theme_template], [is_des_form], [des_form_code]) VALUES (N'd35109c3632c4952a19ecc094943dd71', N'test_demo', N'1', N'31', N'测试用户表', N'Y', N'Y', N'Y', N'N', NULL, N'UUID', N'group', NULL, NULL, NULL, NULL, NULL, NULL, N'demo', N'1', NULL, N'0', NULL, N'0', NULL, N'admin', N'2021-03-16 17:09:22.0000000', N'admin', N'2019-03-15 14:24:35.0000000', N'normal', NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for onl_cgform_index +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgform_index]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgform_index] +GO + +CREATE TABLE [dbo].[onl_cgform_index] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgform_head_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [index_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [index_field] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [index_type] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [is_db_synch] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [del_flag] int NULL +) +GO + +ALTER TABLE [dbo].[onl_cgform_index] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主表id', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'cgform_head_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'索引名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'index_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'索引栏位', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'index_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'索引类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'index_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否同步数据库 N未同步 Y已同步', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'is_db_synch' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否删除 0未删除 1删除', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgform_index', +'COLUMN', N'del_flag' +GO + + +-- ---------------------------- +-- Records of onl_cgform_index +-- ---------------------------- + +-- ---------------------------- +-- Table structure for onl_cgreport_head +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgreport_head]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgreport_head] +GO + +CREATE TABLE [dbo].[onl_cgreport_head] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgr_sql] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [return_val_field] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [return_txt_field] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [return_type] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_source] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [content] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[onl_cgreport_head] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'报表编码', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'报表名字', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'报表SQL', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'cgr_sql' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'返回值字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'return_val_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'返回文本字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'return_txt_field' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'返回类型,单选或多选', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'return_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'动态数据源', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'db_source' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人id', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人id', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_head', +'COLUMN', N'create_by' +GO + + +-- ---------------------------- +-- Records of onl_cgreport_head +-- ---------------------------- +INSERT INTO [dbo].[onl_cgreport_head] ([id], [code], [name], [cgr_sql], [return_val_field], [return_txt_field], [return_type], [db_source], [content], [update_time], [update_by], [create_time], [create_by]) VALUES (N'1256627801873821698', N'report002', N'统计登录每日登录次数-Demo', N'select DATE_FORMAT(create_time, ''%Y-%m-%d'') as date,count(*) as num from sys_log group by DATE_FORMAT(create_time, ''%Y-%m-%d'')', NULL, NULL, N'1', NULL, NULL, N'2021-03-16 16:44:45.0000000', N'admin', N'2020-05-03 00:53:10.0000000', N'admin') +GO + +INSERT INTO [dbo].[onl_cgreport_head] ([id], [code], [name], [cgr_sql], [return_val_field], [return_txt_field], [return_type], [db_source], [content], [update_time], [update_by], [create_time], [create_by]) VALUES (N'1260179852088135681', N'tj_user_report', N'统一有效系统用户-Demo', N'select * from sys_user', NULL, NULL, N'1', NULL, NULL, N'2021-03-16 16:44:40.0000000', N'admin', N'2020-05-12 20:07:44.0000000', N'admin') +GO + +INSERT INTO [dbo].[onl_cgreport_head] ([id], [code], [name], [cgr_sql], [return_val_field], [return_txt_field], [return_type], [db_source], [content], [update_time], [update_by], [create_time], [create_by]) VALUES (N'6c7f59741c814347905a938f06ee003c', N'report_user', N'统计在线用户-Demo', N'select * from sys_user', NULL, NULL, N'1', N'', NULL, N'2021-03-16 16:44:50.0000000', N'admin', N'2019-03-25 11:20:45.0000000', N'admin') +GO + +INSERT INTO [dbo].[onl_cgreport_head] ([id], [code], [name], [cgr_sql], [return_val_field], [return_txt_field], [return_type], [db_source], [content], [update_time], [update_by], [create_time], [create_by]) VALUES (N'87b55a515d3441b6b98e48e5b35474a6', N'demo', N'Report-Demo', N'select * from demo', NULL, NULL, N'1', N'', NULL, N'2021-03-16 16:44:59.0000000', N'admin', N'2019-03-12 11:25:16.0000000', N'admin') +GO + + +-- ---------------------------- +-- Table structure for onl_cgreport_item +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgreport_item]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgreport_item] +GO + +CREATE TABLE [dbo].[onl_cgreport_item] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgrhead_id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [field_name] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [field_txt] nvarchar(300) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_width] int NULL, + [field_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [search_mode] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_order] int NULL, + [is_search] int NULL, + [dict_code] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [field_href] nvarchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_show] int NULL, + [order_num] int NULL, + [replace_val] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_total] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [group_title] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[onl_cgreport_item] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'报表ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'cgrhead_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段名字', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'field_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段文本', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'field_txt' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段类型', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'field_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'查询模式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'search_mode' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否排序 0否,1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'is_order' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否查询 0否,1是', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'is_search' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典CODE', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'dict_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段跳转URL', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'field_href' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否显示 0否,1显示', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'is_show' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'order_num' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'取值表达式', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'replace_val' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否合计 0否,1是(仅对数值有效)', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'is_total' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'分组标题', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'group_title' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_item', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of onl_cgreport_item +-- ---------------------------- +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256627802020622337', N'1256627801873821698', N'date', N'日期', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'1', N'', NULL, NULL, N'admin', N'2020-09-11 14:50:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1256627802075148289', N'1256627801873821698', N'num', N'登录次数', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'2', N'', N'1', NULL, N'admin', N'2020-09-11 14:50:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496577', N'1260179852088135681', N'id', N'ID', NULL, N'String', NULL, N'0', N'0', N'', N'', N'0', N'1', N'', NULL, NULL, N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496578', N'1260179852088135681', N'username', N'账号', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'2', N'', NULL, N'用户信息', N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496579', N'1260179852088135681', N'realname', N'用户名字', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'3', N'', NULL, N'用户信息', N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496584', N'1260179852088135681', N'sex', N'性别', NULL, N'String', NULL, N'0', N'1', N'sex', N'', N'1', N'4', N'', NULL, N'用户信息', N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496585', N'1260179852088135681', N'email', N'邮箱', NULL, N'String', N'single', N'0', N'1', N'', N'', N'1', N'5', N'', NULL, NULL, N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1260179881129496586', N'1260179852088135681', N'phone', N'电话', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'6', N'', NULL, NULL, N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15884396588465896672', N'87b55a515d3441b6b98e48e5b35474a6', N'id', N'ID', NULL, N'String', NULL, N'0', N'0', N'', N'', N'0', N'1', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'15892858611256977947', N'1260179852088135681', N'birthday', N'生日', NULL, N'Date', NULL, N'0', N'0', N'', N'', N'1', N'7', N'', NULL, NULL, N'admin', N'2020-09-11 14:07:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1740bb02519db90c44cb2cba8b755136', N'6c7f59741c814347905a938f06ee003c', N'realname', N'用户名称', NULL, N'String', NULL, N'0', N'0', N'', N'https://www.baidu.com', N'1', N'1', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1b181e6d2813bcb263adc39737f9df46', N'87b55a515d3441b6b98e48e5b35474a6', N'name', N'用户名', NULL, N'String', N'single', N'0', N'1', N'', N'', N'1', N'2', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'61ef5b323134938fdd07ad5e3ea16cd3', N'87b55a515d3441b6b98e48e5b35474a6', N'key_word', N'关键词', NULL, N'String', N'single', N'0', N'1', N'', N'', N'1', N'3', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'627768efd9ba2c41e905579048f21000', N'6c7f59741c814347905a938f06ee003c', N'username', N'用户账号', NULL, N'String', N'single', N'0', N'1', N'', N'', N'1', N'2', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8bb087a9aa2000bcae17a1b3f5768435', N'6c7f59741c814347905a938f06ee003c', N'sex', N'性别', NULL, N'String', N'single', N'0', N'1', N'sex', N'', N'1', N'3', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'90d4fa57d301801abb26a9b86b6b94c4', N'6c7f59741c814347905a938f06ee003c', N'birthday', N'生日', NULL, N'Date', N'single', N'0', N'0', N'', N'', N'1', N'4', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a4ac355f07a05218854e5f23e2930163', N'6c7f59741c814347905a938f06ee003c', N'avatar', N'头像', NULL, N'String', NULL, N'0', N'0', N'', N'', N'0', N'5', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'd6e86b5ffd096ddcc445c0f320a45004', N'6c7f59741c814347905a938f06ee003c', N'phone', N'手机号', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'6', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'df365cd357699eea96c29763d1dd7f9d', N'6c7f59741c814347905a938f06ee003c', N'email', N'邮箱', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'7', N'', NULL, NULL, N'admin', N'2020-05-03 02:35:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'edf9932912b81ad01dd557d3d593a559', N'87b55a515d3441b6b98e48e5b35474a6', N'age', N'年龄', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'4', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f985883e509a6faaaf62ca07fd24a73c', N'87b55a515d3441b6b98e48e5b35474a6', N'birthday', N'生日', NULL, N'Date', N'single', N'0', N'1', N'', N'', N'1', N'5', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[onl_cgreport_item] ([id], [cgrhead_id], [field_name], [field_txt], [field_width], [field_type], [search_mode], [is_order], [is_search], [dict_code], [field_href], [is_show], [order_num], [replace_val], [is_total], [group_title], [create_by], [create_time], [update_by], [update_time]) VALUES (N'fce83e4258de3e2f114ab3116397670c', N'87b55a515d3441b6b98e48e5b35474a6', N'punch_time', N'发布时间', NULL, N'String', NULL, N'0', N'0', N'', N'', N'1', N'6', N'', NULL, NULL, N'admin', N'2020-05-03 01:14:35.0000000', NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for onl_cgreport_param +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[onl_cgreport_param]') AND type IN ('U')) + DROP TABLE [dbo].[onl_cgreport_param] +GO + +CREATE TABLE [dbo].[onl_cgreport_param] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [cgrhead_id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [param_name] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [param_txt] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [param_value] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [order_num] int NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[onl_cgreport_param] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'动态报表ID', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'cgrhead_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'参数字段', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'param_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'参数文本', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'param_txt' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'参数默认值', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'param_value' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'order_num' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'onl_cgreport_param', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of onl_cgreport_param +-- ---------------------------- + +-- ---------------------------- +-- Table structure for oss_file +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[oss_file]') AND type IN ('U')) + DROP TABLE [dbo].[oss_file] +GO + +CREATE TABLE [dbo].[oss_file] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [file_name] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [url] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[oss_file] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'文件名称', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'file_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'文件地址', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'url' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'oss_file', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'Oss File', +'SCHEMA', N'dbo', +'TABLE', N'oss_file' +GO + + +-- ---------------------------- +-- Records of oss_file +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_BLOB_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_BLOB_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_BLOB_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_BLOB_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [BLOB_DATA] image NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_BLOB_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_BLOB_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CALENDARS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_CALENDARS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_CALENDARS] +GO + +CREATE TABLE [dbo].[QRTZ_CALENDARS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CALENDAR_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CALENDAR] image NOT NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_CALENDARS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_CALENDARS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_CRON_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_CRON_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_CRON_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_CRON_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [CRON_EXPRESSION] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TIME_ZONE_ID] varchar(80) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_CRON_TRIGGERS +-- ---------------------------- +INSERT INTO [dbo].[QRTZ_CRON_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP], [CRON_EXPRESSION], [TIME_ZONE_ID]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleJob', N'DEFAULT', N'0/1 * * * * ?', N'Asia/Shanghai') +GO + +INSERT INTO [dbo].[QRTZ_CRON_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP], [CRON_EXPRESSION], [TIME_ZONE_ID]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleParamJob', N'DEFAULT', N'0/1 * * * * ?', N'Asia/Shanghai') +GO + + +-- ---------------------------- +-- Table structure for QRTZ_FIRED_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_FIRED_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_FIRED_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_FIRED_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [ENTRY_ID] varchar(95) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [INSTANCE_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [FIRED_TIME] bigint NOT NULL, + [SCHED_TIME] bigint NOT NULL, + [PRIORITY] int NOT NULL, + [STATE] varchar(16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [JOB_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [IS_NONCONCURRENT] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [REQUESTS_RECOVERY] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_FIRED_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_JOB_DETAILS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_JOB_DETAILS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_JOB_DETAILS] +GO + +CREATE TABLE [dbo].[QRTZ_JOB_DETAILS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [DESCRIPTION] varchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [JOB_CLASS_NAME] varchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [IS_DURABLE] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [IS_NONCONCURRENT] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [IS_UPDATE_DATA] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [REQUESTS_RECOVERY] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_DATA] image NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_JOB_DETAILS +-- ---------------------------- +INSERT INTO [dbo].[QRTZ_JOB_DETAILS] ([SCHED_NAME], [JOB_NAME], [JOB_GROUP], [DESCRIPTION], [JOB_CLASS_NAME], [IS_DURABLE], [IS_NONCONCURRENT], [IS_UPDATE_DATA], [REQUESTS_RECOVERY], [JOB_DATA]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleJob', N'DEFAULT', NULL, N'com.jero.modules.quartz.job.SampleJob', N'0', N'0', N'0', N'0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D65746572707800) +GO + +INSERT INTO [dbo].[QRTZ_JOB_DETAILS] ([SCHED_NAME], [JOB_NAME], [JOB_GROUP], [DESCRIPTION], [JOB_CLASS_NAME], [IS_DURABLE], [IS_NONCONCURRENT], [IS_UPDATE_DATA], [REQUESTS_RECOVERY], [JOB_DATA]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleParamJob', N'DEFAULT', NULL, N'com.jero.modules.quartz.job.SampleParamJob', N'0', N'0', N'0', N'0', 0xACED0005737200156F72672E71756172747A2E4A6F62446174614D61709FB083E8BFA9B0CB020000787200266F72672E71756172747A2E7574696C732E537472696E674B65794469727479466C61674D61708208E8C3FBC55D280200015A0013616C6C6F77735472616E7369656E74446174617872001D6F72672E71756172747A2E7574696C732E4469727479466C61674D617013E62EAD28760ACE0200025A000564697274794C00036D617074000F4C6A6176612F7574696C2F4D61703B787001737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F4000000000000C77080000001000000001740009706172616D6574657274000573636F74747800) +GO + + +-- ---------------------------- +-- Table structure for QRTZ_LOCKS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_LOCKS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_LOCKS] +GO + +CREATE TABLE [dbo].[QRTZ_LOCKS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [LOCK_NAME] varchar(40) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_LOCKS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_LOCKS +-- ---------------------------- +INSERT INTO [dbo].[QRTZ_LOCKS] ([SCHED_NAME], [LOCK_NAME]) VALUES (N'MyScheduler', N'STATE_ACCESS') +GO + +INSERT INTO [dbo].[QRTZ_LOCKS] ([SCHED_NAME], [LOCK_NAME]) VALUES (N'MyScheduler', N'TRIGGER_ACCESS') +GO + +INSERT INTO [dbo].[QRTZ_LOCKS] ([SCHED_NAME], [LOCK_NAME]) VALUES (N'quartzScheduler', N'TRIGGER_ACCESS') +GO + + +-- ---------------------------- +-- Table structure for QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_PAUSED_TRIGGER_GRPS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] +GO + +CREATE TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SCHEDULER_STATE +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_SCHEDULER_STATE]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_SCHEDULER_STATE] +GO + +CREATE TABLE [dbo].[QRTZ_SCHEDULER_STATE] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [INSTANCE_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [LAST_CHECKIN_TIME] bigint NOT NULL, + [CHECKIN_INTERVAL] bigint NOT NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_SCHEDULER_STATE +-- ---------------------------- +INSERT INTO [dbo].[QRTZ_SCHEDULER_STATE] ([SCHED_NAME], [INSTANCE_NAME], [LAST_CHECKIN_TIME], [CHECKIN_INTERVAL]) VALUES (N'MyScheduler', N'mmmmmm1616374466874', N'1616375965969', N'10000') +GO + + +-- ---------------------------- +-- Table structure for QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_SIMPLE_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [REPEAT_COUNT] bigint NOT NULL, + [REPEAT_INTERVAL] bigint NOT NULL, + [TIMES_TRIGGERED] bigint NOT NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [STR_PROP_1] varchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [STR_PROP_2] varchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [STR_PROP_3] varchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [INT_PROP_1] int NULL, + [INT_PROP_2] int NULL, + [LONG_PROP_1] bigint NULL, + [LONG_PROP_2] bigint NULL, + [DEC_PROP_1] numeric(13,4) NULL, + [DEC_PROP_2] numeric(13,4) NULL, + [BOOL_PROP_1] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [BOOL_PROP_2] varchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- + +-- ---------------------------- +-- Table structure for QRTZ_TRIGGERS +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[QRTZ_TRIGGERS]') AND type IN ('U')) + DROP TABLE [dbo].[QRTZ_TRIGGERS] +GO + +CREATE TABLE [dbo].[QRTZ_TRIGGERS] ( + [SCHED_NAME] varchar(120) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [JOB_GROUP] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [DESCRIPTION] varchar(250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [NEXT_FIRE_TIME] bigint NULL, + [PREV_FIRE_TIME] bigint NULL, + [PRIORITY] int NULL, + [TRIGGER_STATE] varchar(16) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [TRIGGER_TYPE] varchar(8) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [START_TIME] bigint NOT NULL, + [END_TIME] bigint NULL, + [CALENDAR_NAME] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [MISFIRE_INSTR] smallint NULL, + [JOB_DATA] image NULL +) +GO + +ALTER TABLE [dbo].[QRTZ_TRIGGERS] SET (LOCK_ESCALATION = TABLE) +GO + + +-- ---------------------------- +-- Records of QRTZ_TRIGGERS +-- ---------------------------- +INSERT INTO [dbo].[QRTZ_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP], [JOB_NAME], [JOB_GROUP], [DESCRIPTION], [NEXT_FIRE_TIME], [PREV_FIRE_TIME], [PRIORITY], [TRIGGER_STATE], [TRIGGER_TYPE], [START_TIME], [END_TIME], [CALENDAR_NAME], [MISFIRE_INSTR], [JOB_DATA]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleJob', N'DEFAULT', N'com.jero.modules.quartz.job.SampleJob', N'DEFAULT', NULL, N'1588405730000', N'1588405729000', N'5', N'PAUSED', N'CRON', N'1588405237000', N'0', NULL, N'0', 0x) +GO + +INSERT INTO [dbo].[QRTZ_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP], [JOB_NAME], [JOB_GROUP], [DESCRIPTION], [NEXT_FIRE_TIME], [PREV_FIRE_TIME], [PRIORITY], [TRIGGER_STATE], [TRIGGER_TYPE], [START_TIME], [END_TIME], [CALENDAR_NAME], [MISFIRE_INSTR], [JOB_DATA]) VALUES (N'MyScheduler', N'com.jero.modules.quartz.job.SampleParamJob', N'DEFAULT', N'com.jero.modules.quartz.job.SampleParamJob', N'DEFAULT', NULL, N'1588405236000', N'1588405235000', N'5', N'PAUSED', N'CRON', N'1588405221000', N'0', NULL, N'0', 0x) +GO + + +-- ---------------------------- +-- Table structure for sys_announcement +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_announcement]') AND type IN ('U')) + DROP TABLE [dbo].[sys_announcement] +GO + +CREATE TABLE [dbo].[sys_announcement] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [titile] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [msg_content] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [start_time] datetime2(7) NULL, + [end_time] datetime2(7) NULL, + [sender] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [priority] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [msg_category] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [msg_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [send_status] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [send_time] datetime2(7) NULL, + [cancel_time] datetime2(7) NULL, + [del_flag] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [bus_type] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [bus_id] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [open_type] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [open_page] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [user_ids] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [msg_abstract] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_announcement] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'标题', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'titile' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'内容', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'msg_content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'开始时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'start_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'结束时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'end_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发布人', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'sender' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'优先级(L低,M中,H高)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'priority' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'消息类型1:通知公告2:系统消息', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'msg_category' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'通告对象类型(USER:指定用户,ALL:全体用户)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'msg_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发布状态(0未发布,1已发布,2已撤销)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'send_status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发布时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'send_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'撤销时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'cancel_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态(0,正常,1已删除)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'业务类型(email:邮件 bpm:流程)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'bus_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'业务id', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'bus_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'打开方式(组件:component 路由:url)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'open_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'组件/路由 地址', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'open_page' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'指定用户', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'user_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'摘要', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement', +'COLUMN', N'msg_abstract' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'系统通告表', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement' +GO + + +-- ---------------------------- +-- Records of sys_announcement +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_announcement_send +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_announcement_send]') AND type IN ('U')) + DROP TABLE [dbo].[sys_announcement_send] +GO + +CREATE TABLE [dbo].[sys_announcement_send] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [annt_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [user_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [read_flag] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [read_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_announcement_send] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'通告ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'annt_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户id', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'阅读状态(0未读,1已读)', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'read_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'阅读时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'read_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户通告阅读标记表', +'SCHEMA', N'dbo', +'TABLE', N'sys_announcement_send' +GO + + +-- ---------------------------- +-- Records of sys_announcement_send +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_category +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_category]') AND type IN ('U')) + DROP TABLE [dbo].[sys_category] +GO + +CREATE TABLE [dbo].[sys_category] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [pid] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [sys_org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [has_child] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_category] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'父级节点', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'pid' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'类型名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'类型编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'sys_org_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否有子节点', +'SCHEMA', N'dbo', +'TABLE', N'sys_category', +'COLUMN', N'has_child' +GO + + +-- ---------------------------- +-- Records of sys_category +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_check_rule +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_check_rule]') AND type IN ('U')) + DROP TABLE [dbo].[sys_check_rule] +GO + +CREATE TABLE [dbo].[sys_check_rule] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [rule_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_json] nvarchar(1024) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_description] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_check_rule] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'rule_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则Code', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'rule_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则JSON', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'rule_json' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'rule_description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_check_rule', +'COLUMN', N'create_time' +GO + + +-- ---------------------------- +-- Records of sys_check_rule +-- ---------------------------- +INSERT INTO [dbo].[sys_check_rule] ([id], [rule_name], [rule_code], [rule_json], [rule_description], [update_by], [update_time], [create_by], [create_time]) VALUES (N'1224980593992388610', N'通用编码规则-Demo', N'common', N'[{"digits":"1","pattern":"^[a-z|A-Z]$","message":"第一位只能是字母"},{"digits":"*","pattern":"^[0-9|a-z|A-Z|_]{0,}$","message":"只能填写数字、大小写字母、下划线"},{"digits":"*","pattern":"^.{3,}$","message":"最少输入3位数"},{"digits":"*","pattern":"^.{3,12}$","message":"最多输入12位数"}]', N'规则:1、首位只能是字母;2、只能填写数字、大小写字母、下划线;3、最少3位数,最多12位数。', N'admin', N'2021-03-16 16:34:09.0000000', N'admin', N'2020-02-05 16:58:27.0000000') +GO + + +-- ---------------------------- +-- Table structure for sys_data_log +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_data_log]') AND type IN ('U')) + DROP TABLE [dbo].[sys_data_log] +GO + +CREATE TABLE [dbo].[sys_data_log] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [data_table] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_content] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_version] int NULL +) +GO + +ALTER TABLE [dbo].[sys_data_log] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'id', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'表名', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'data_table' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'data_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据内容', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'data_content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'版本号', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_log', +'COLUMN', N'data_version' +GO + + +-- ---------------------------- +-- Records of sys_data_log +-- ---------------------------- +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab0d198015ab12274bf0006', N'admin', N'2017-03-09 11:35:09.0000000', NULL, NULL, N'jero_demo', N'4028ef81550c1a7901550c1cd6e70001', N'{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 23, 2016 12:00:00 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"9001","status":"1","content":"111","id":"4028ef81550c1a7901550c1cd6e70001"}', N'3') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab700bead0009', N'admin', N'2017-03-10 14:56:03.0000000', NULL, NULL, N'jero_demo', N'402880f05ab6d12b015ab700be8d0008', N'{"mobilePhone":"","officePhone":"","email":"","createDate":"Mar 10, 2017 2:56:03 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"111","status":"0","id":"402880f05ab6d12b015ab700be8d0008"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab705a23f000d', N'admin', N'2017-03-10 15:01:24.0000000', NULL, NULL, N'jero_demo', N'402880f05ab6d12b015ab705a233000c', N'{"mobilePhone":"","officePhone":"11","email":"","createDate":"Mar 10, 2017 3:01:24 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"11","status":"0","id":"402880f05ab6d12b015ab705a233000c"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab712a6420013', N'admin', N'2017-03-10 15:15:37.0000000', NULL, NULL, N'jero_demo', N'402880f05ab6d12b015ab712a6360012', N'{"mobilePhone":"","officePhone":"","email":"","createDate":"Mar 10, 2017 3:15:37 PM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"小王","status":"0","id":"402880f05ab6d12b015ab712a6360012"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab712d0510015', N'admin', N'2017-03-10 15:15:47.0000000', NULL, NULL, N'jero_demo', N'402880f05ab6d12b015ab712a6360012', N'{"mobilePhone":"18611788525","officePhone":"","email":"","createDate":"Mar 10, 2017 3:15:37 AM","sex":"0","depId":"402880e447e99cf10147e9a03b320003","userName":"小王","status":"0","id":"402880f05ab6d12b015ab712a6360012"}', N'2') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab71308240018', N'admin', N'2017-03-10 15:16:02.0000000', NULL, NULL, N'jero_demo', N'8a8ab0b246dc81120146dc81860f016f', N'{"mobilePhone":"13111111111","officePhone":"66666666","email":"demo@jero.com","age":12,"salary":10.00,"birthday":"Feb 14, 2014 12:00:00 AM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"小明","status":"","content":"","id":"8a8ab0b246dc81120146dc81860f016f"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'402880f05ab6d12b015ab72806c3001b', N'admin', N'2017-03-10 15:38:58.0000000', NULL, NULL, N'jero_demo', N'8a8ab0b246dc81120146dc81860f016f', N'{"mobilePhone":"18611788888","officePhone":"66666666","email":"demo@jero.com","age":12,"salary":10.00,"birthday":"Feb 14, 2014 12:00:00 AM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"小明","status":"","content":"","id":"8a8ab0b246dc81120146dc81860f016f"}', N'2') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef815318148a0153181567690001', N'admin', N'2016-02-25 18:59:29.0000000', NULL, NULL, N'jero_demo', N'4028ef815318148a0153181566270000', N'{"mobilePhone":"13423423423","officePhone":"1","email":"","age":1,"salary":1,"birthday":"Feb 25, 2016 12:00:00 AM","createDate":"Feb 25, 2016 6:59:24 PM","depId":"402880e447e9a9570147e9b6a3be0005","userName":"1","status":"0","id":"4028ef815318148a0153181566270000"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef815318148a01531815ec5c0003', N'admin', N'2016-02-25 19:00:03.0000000', NULL, NULL, N'jero_demo', N'4028ef815318148a0153181566270000', N'{"mobilePhone":"13426498659","officePhone":"1","email":"","age":1,"salary":1.00,"birthday":"Feb 25, 2016 12:00:00 AM","createDate":"Feb 25, 2016 6:59:24 AM","depId":"402880e447e9a9570147e9b6a3be0005","userName":"1","status":"0","id":"4028ef815318148a0153181566270000"}', N'2') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c0502e6b0003', N'admin', N'2016-03-29 10:59:53.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0502d420002', N'{"mobilePhone":"18455477548","officePhone":"123","email":"","createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c0509aa40006', N'admin', N'2016-03-29 11:00:21.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0509a3e0005', N'{"mobilePhone":"13565486458","officePhone":"","email":"","createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c051c4a70008', N'admin', N'2016-03-29 11:01:37.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0509a3e0005', N'{"mobilePhone":"13565486458","officePhone":"","email":"","createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', N'2') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c051d4b5000a', N'admin', N'2016-03-29 11:01:41.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0502d420002', N'{"mobilePhone":"13565486458","officePhone":"123","email":"","createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', N'2') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c07033d8000d', N'admin', N'2016-03-29 11:34:52.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0502d420002', N'{"mobilePhone":"13565486458","officePhone":"123","email":"","age":23,"createDate":"Mar 29, 2016 10:59:53 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"123","status":"0","id":"4028ef8153c028db0153c0502d420002"}', N'3') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef8153c028db0153c070492e000f', N'admin', N'2016-03-29 11:34:57.0000000', NULL, NULL, N'jero_demo', N'4028ef8153c028db0153c0509a3e0005', N'{"mobilePhone":"13565486458","officePhone":"","email":"","age":22,"createDate":"Mar 29, 2016 11:00:21 AM","depId":"402880e447e99cf10147e9a03b320003","userName":"22","status":"0","id":"4028ef8153c028db0153c0509a3e0005"}', N'3') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef81550c1a7901550c1cd7850002', N'admin', N'2016-06-01 21:17:44.0000000', NULL, NULL, N'jero_demo', N'4028ef81550c1a7901550c1cd6e70001', N'{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 1, 2016 9:17:44 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"121221","status":"0","id":"4028ef81550c1a7901550c1cd6e70001"}', N'1') +GO + +INSERT INTO [dbo].[sys_data_log] ([id], [create_by], [create_time], [update_by], [update_time], [data_table], [data_id], [data_content], [data_version]) VALUES (N'4028ef81568c31ec01568c3307080004', N'admin', N'2016-08-15 11:16:09.0000000', NULL, NULL, N'jero_demo', N'4028ef81550c1a7901550c1cd6e70001', N'{"mobilePhone":"","officePhone":"","email":"","createDate":"Jun 23, 2016 12:00:00 PM","sex":"1","depId":"402880e447e99cf10147e9a03b320003","userName":"9001","status":"1","content":"111","id":"4028ef81550c1a7901550c1cd6e70001"}', N'2') +GO + + +-- ---------------------------- +-- Table structure for sys_data_source +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_data_source]') AND type IN ('U')) + DROP TABLE [dbo].[sys_data_source] +GO + +CREATE TABLE [dbo].[sys_data_source] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [remark] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_driver] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_url] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_username] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [db_password] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [sys_org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_data_source] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据源编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据源名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'备注', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据库类型', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'驱动类', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_driver' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据源地址', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_url' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据库名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户名', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_username' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'密码', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'db_password' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_data_source', +'COLUMN', N'sys_org_code' +GO + + +-- ---------------------------- +-- Records of sys_data_source +-- ---------------------------- +INSERT INTO [dbo].[sys_data_source] ([id], [code], [name], [remark], [db_type], [db_driver], [db_url], [db_name], [db_username], [db_password], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'1209779538310004737', N'local_mysql', N'MySQL5.7-Demo', N'本地数据库MySQL5.7', N'4', N'com.mysql.cj.jdbc.Driver', N'jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai', N'jero-boot', N'jero-boot', N'c0e5dbdaede24c84091fb7dc0db47ccb', N'admin', N'2019-12-25 18:14:53.0000000', N'admin', N'2021-03-16 16:44:03.0000000', N'A01') +GO + + +-- ---------------------------- +-- Table structure for sys_depart +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_depart]') AND type IN ('U')) + DROP TABLE [dbo].[sys_depart] +GO + +CREATE TABLE [dbo].[sys_depart] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [parent_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [depart_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [depart_name_en] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [depart_name_abbr] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [depart_order] int NULL, + [description] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [org_category] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [org_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [mobile] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [fax] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [address] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [memo] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [del_flag] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_depart] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'父机构ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'parent_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'机构/部门名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'depart_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'英文名', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'depart_name_en' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'缩写', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'depart_name_abbr' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'depart_order' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'机构类别 1公司,2组织机构,2岗位', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'org_category' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'机构类型 1一级部门 2子部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'org_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'机构编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'org_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'手机号', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'mobile' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'传真', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'fax' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'地址', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'address' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'备注', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'memo' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态(1启用,0不启用)', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态(0,正常,1已删除)', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'组织机构表', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart' +GO + + +-- ---------------------------- +-- Records of sys_depart +-- ---------------------------- +INSERT INTO [dbo].[sys_depart] ([id], [parent_id], [depart_name], [depart_name_en], [depart_name_abbr], [depart_order], [description], [org_category], [org_type], [org_code], [mobile], [fax], [address], [memo], [status], [del_flag], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c6d7cb4deeac411cb3384b1b31278596', N'', N'公司总部', NULL, NULL, N'0', NULL, N'1', N'1', N'A01', NULL, NULL, NULL, NULL, NULL, N'0', N'admin', N'2019-02-11 14:21:51.0000000', N'admin', N'2021-03-16 14:19:08.0000000') +GO + + +-- ---------------------------- +-- Table structure for sys_depart_permission +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_depart_permission]') AND type IN ('U')) + DROP TABLE [dbo].[sys_depart_permission] +GO + +CREATE TABLE [dbo].[sys_depart_permission] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [depart_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [permission_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_rule_ids] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_depart_permission] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_permission', +'COLUMN', N'depart_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_permission', +'COLUMN', N'permission_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据规则id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_permission', +'COLUMN', N'data_rule_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门权限表', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_permission' +GO + + +-- ---------------------------- +-- Records of sys_depart_permission +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_depart_role +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_depart_role]') AND type IN ('U')) + DROP TABLE [dbo].[sys_depart_role] +GO + +CREATE TABLE [dbo].[sys_depart_role] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [depart_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [role_name] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [role_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_depart_role] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'depart_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门角色名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'role_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门角色编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'role_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门角色表', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role' +GO + + +-- ---------------------------- +-- Records of sys_depart_role +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_depart_role_permission +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_depart_role_permission]') AND type IN ('U')) + DROP TABLE [dbo].[sys_depart_role_permission] +GO + +CREATE TABLE [dbo].[sys_depart_role_permission] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [depart_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [role_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [permission_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_rule_ids] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [operate_date] datetime2(7) NULL, + [operate_ip] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_depart_role_permission] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'depart_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'permission_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据权限ids', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'data_rule_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'operate_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作ip', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission', +'COLUMN', N'operate_ip' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门角色权限表', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_permission' +GO + + +-- ---------------------------- +-- Records of sys_depart_role_permission +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_depart_role_user +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_depart_role_user]') AND type IN ('U')) + DROP TABLE [dbo].[sys_depart_role_user] +GO + +CREATE TABLE [dbo].[sys_depart_role_user] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [user_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [drole_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_depart_role_user] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_user', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_user', +'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色id', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_user', +'COLUMN', N'drole_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门角色用户表', +'SCHEMA', N'dbo', +'TABLE', N'sys_depart_role_user' +GO + + +-- ---------------------------- +-- Records of sys_depart_role_user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_dict +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_dict]') AND type IN ('U')) + DROP TABLE [dbo].[sys_dict] +GO + +CREATE TABLE [dbo].[sys_dict] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [dict_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [dict_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [del_flag] int NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [type] int NULL +) +GO + +ALTER TABLE [dbo].[sys_dict] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'dict_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'dict_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典类型0为string,1为number', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict', +'COLUMN', N'type' +GO + + +-- ---------------------------- +-- Records of sys_dict +-- ---------------------------- +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'0b5d19e1fce4b2e6647e6b4a17760c14', N'通告类型', N'msg_category', N'消息类型1:通知公告2:系统消息', N'0', N'admin', N'2019-04-22 18:01:35.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'1174511106530525185', N'机构类型', N'org_category', N'机构类型 1公司,2部门 3岗位', N'0', N'admin', N'2019-09-19 10:30:43.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'1209733563293962241', N'数据库类型', N'database_type', N'', N'0', N'admin', N'2019-12-25 15:12:12.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'1232913193820581889', N'Online表单业务分类', N'ol_form_biz_type', N'', N'0', N'admin', N'2020-02-27 14:19:46.0000000', N'admin', N'2020-02-27 14:20:23.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'1250687930947620866', N'定时任务状态', N'quartz_status', N'', N'0', N'admin', N'2020-04-16 15:30:14.0000000', N'', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'1280401766745718786', N'租户状态', N'tenant_status', N'租户状态', N'0', N'admin', N'2020-07-07 15:22:25.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'236e8a4baff0db8c62c00dd95632834f', N'同步工作流引擎', N'activiti_sync', N'同步工作流引擎', N'0', N'admin', N'2019-05-15 15:27:33.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'2e02df51611a4b9632828ab7e5338f00', N'权限策略', N'perms_type', N'权限策略', N'0', N'admin', N'2019-04-26 18:26:55.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'2f0320997ade5dd147c90130f7218c3e', N'推送类别', N'msg_type', N'', N'0', N'admin', N'2019-03-17 21:21:32.0000000', N'admin', N'2019-03-26 19:57:45.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'3486f32803bb953e7155dab3513dc68b', N'删除状态', N'del_flag', NULL, N'0', N'admin', N'2019-01-18 21:46:26.0000000', N'admin', N'2019-03-30 11:17:11.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'3d9a351be3436fbefb1307d4cfb49bf2', N'性别', N'sex', NULL, N'0', NULL, N'2019-01-04 14:56:32.0000000', N'admin', N'2019-03-30 11:28:27.0000000', N'1') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'4274efc2292239b6f000b153f50823ff', N'全局权限策略', N'global_perms_type', N'全局权限策略', N'0', N'admin', N'2019-05-10 17:54:05.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'4c753b5293304e7a445fd2741b46529d', N'字典状态', N'dict_item_status', NULL, N'0', N'admin', N'2020-06-18 23:18:42.0000000', N'admin', N'2019-03-30 19:33:52.0000000', N'1') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'4d7fec1a7799a436d26d02325eff295e', N'优先级', N'priority', N'优先级', N'0', N'admin', N'2019-03-16 17:03:34.0000000', N'admin', N'2019-04-16 17:39:23.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'4e4602b3e3686f0911384e188dc7efb4', N'条件规则', N'rule_conditions', N'', N'0', N'admin', N'2019-04-01 10:15:03.0000000', N'admin', N'2019-04-01 10:30:47.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'4f69be5f507accea8d5df5f11346181a', N'发送消息类型', N'msgType', NULL, N'0', N'admin', N'2019-04-11 14:27:09.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'68168534ff5065a152bfab275c2136f8', N'有效无效状态', N'valid_status', N'有效无效状态', N'0', N'admin', N'2020-09-26 19:21:14.0000000', N'admin', N'2019-04-26 19:21:23.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'72cce0989df68887546746d8f09811aa', N'Online表单类型', N'cgform_table_type', N'', N'0', N'admin', N'2019-01-27 10:13:02.0000000', N'admin', N'2019-03-30 11:37:36.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'78bda155fe380b1b3f175f1e88c284c6', N'流程状态', N'bpm_status', N'流程状态', N'0', N'admin', N'2019-05-09 16:31:52.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'83bfb33147013cc81640d5fd9eda030c', N'日志类型', N'log_type', NULL, N'0', N'admin', N'2019-03-18 23:22:19.0000000', NULL, NULL, N'1') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'845da5006c97754728bf48b6a10f79cc', N'状态', N'status', NULL, N'0', N'admin', N'2019-03-18 21:45:25.0000000', N'admin', N'2019-03-18 21:58:25.0000000', N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'880a895c98afeca9d9ac39f29e67c13e', N'操作类型', N'operate_type', N'操作类型', N'0', N'admin', N'2019-07-22 10:54:29.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'8dfe32e2d29ea9430a988b3b558bf233', N'发布状态', N'send_status', N'发布状态', N'0', N'admin', N'2019-04-16 17:40:42.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'a7adbcd86c37f7dbc9b66945c82ef9e6', N'1是0否', N'yn', N'', N'0', N'admin', N'2019-05-22 19:29:29.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'a9d9942bd0eccb6e89de92d130ec4c4a', N'消息发送状态', N'msgSendStatus', NULL, N'0', N'admin', N'2019-04-12 18:18:17.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'ac2f7c0c5c5775fcea7e2387bcb22f01', N'菜单类型', N'menu_type', NULL, N'0', N'admin', N'2020-12-18 23:24:32.0000000', N'admin', N'2019-04-01 15:27:06.0000000', N'1') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'c36169beb12de8a71c8683ee7c28a503', N'部门状态', N'depart_status', NULL, N'0', N'admin', N'2019-03-18 21:59:51.0000000', NULL, NULL, N'0') +GO + +INSERT INTO [dbo].[sys_dict] ([id], [dict_name], [dict_code], [description], [del_flag], [create_by], [create_time], [update_by], [update_time], [type]) VALUES (N'fc6cd58fde2e8481db10d3a1e68ce70c', N'用户状态', N'user_status', NULL, N'0', N'admin', N'2019-03-18 21:57:25.0000000', N'admin', N'2019-03-18 23:11:58.0000000', N'1') +GO + + +-- ---------------------------- +-- Table structure for sys_dict_item +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_dict_item]') AND type IN ('U')) + DROP TABLE [dbo].[sys_dict_item] +GO + +CREATE TABLE [dbo].[sys_dict_item] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [dict_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [item_text] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [item_value] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [sort_order] int NULL, + [status] int NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_dict_item] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典id', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'dict_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典项文本', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'item_text' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字典项值', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'item_value' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'排序', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'sort_order' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态(1启用 0不启用)', +'SCHEMA', N'dbo', +'TABLE', N'sys_dict_item', +'COLUMN', N'status' +GO + + +-- ---------------------------- +-- Records of sys_dict_item +-- ---------------------------- +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'0072d115e07c875d76c9b022e2179128', N'4d7fec1a7799a436d26d02325eff295e', N'低', N'L', N'低', N'3', N'1', N'admin', N'2019-04-16 17:04:59.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'05a2e732ce7b00aa52141ecc3e330b4e', N'3486f32803bb953e7155dab3513dc68b', N'已删除', N'1', NULL, NULL, N'1', N'admin', N'2025-10-18 21:46:56.0000000', N'admin', N'2019-03-28 22:23:20.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'0c9532916f5cd722017b46bc4d953e41', N'2f0320997ade5dd147c90130f7218c3e', N'指定用户', N'USER', NULL, NULL, N'1', N'admin', N'2019-03-17 21:22:19.0000000', N'admin', N'2019-03-17 21:22:28.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'0ca4beba9efc4f9dd54af0911a946d5c', N'72cce0989df68887546746d8f09811aa', N'附表', N'3', NULL, N'3', N'1', N'admin', N'2019-03-27 10:13:43.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1030a2652608f5eac3b49d70458b8532', N'2e02df51611a4b9632828ab7e5338f00', N'禁用', N'2', N'禁用', N'2', N'1', N'admin', N'2021-03-26 18:27:28.0000000', N'admin', N'2019-04-26 18:39:11.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1174509082208395266', N'1174511106530525185', N'岗位', N'3', N'岗位', N'1', N'1', N'admin', N'2019-09-19 10:31:16.0000000', N'', NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1174511197735665665', N'1174511106530525185', N'公司', N'1', N'公司', N'1', N'1', N'admin', N'2019-09-19 10:31:05.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1174511244036587521', N'1174511106530525185', N'部门', N'2', N'部门', N'1', N'1', N'admin', N'2019-09-19 10:31:16.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1199607547704647681', N'4f69be5f507accea8d5df5f11346181a', N'系统', N'4', N'', N'1', N'1', N'admin', N'2019-11-27 16:35:02.0000000', N'admin', N'2019-11-27 19:37:46.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1209733775114702850', N'1209733563293962241', N'MySQL5.5', N'1', N'', N'1', N'1', N'admin', N'2019-12-25 15:13:02.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1209733839933476865', N'1209733563293962241', N'Oracle', N'2', N'', N'3', N'1', N'admin', N'2019-12-25 15:13:18.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1209733903020003330', N'1209733563293962241', N'SQLServer', N'3', N'', N'4', N'1', N'admin', N'2019-12-25 15:13:33.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1232913424813486081', N'1232913193820581889', N'官方示例', N'demo', N'', N'1', N'1', N'admin', N'2020-02-27 14:20:42.0000000', N'admin', N'2020-02-27 14:21:37.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1232913493717512194', N'1232913193820581889', N'流程表单', N'bpm', N'', N'2', N'1', N'admin', N'2020-02-27 14:20:58.0000000', N'admin', N'2020-02-27 14:22:20.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1232913605382467585', N'1232913193820581889', N'测试表单', N'temp', N'', N'4', N'1', N'admin', N'2020-02-27 14:21:25.0000000', N'admin', N'2020-02-27 14:22:16.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1232914232372195330', N'1232913193820581889', N'导入表单', N'bdfl_include', N'', N'5', N'1', N'admin', N'2020-02-27 14:23:54.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1234371726545010689', N'4e4602b3e3686f0911384e188dc7efb4', N'左模糊', N'LEFT_LIKE', N'左模糊', N'7', N'1', N'admin', N'2020-03-02 14:55:27.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1234371809495760898', N'4e4602b3e3686f0911384e188dc7efb4', N'右模糊', N'RIGHT_LIKE', N'右模糊', N'7', N'1', N'admin', N'2020-03-02 14:55:47.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1250688147579228161', N'1250687930947620866', N'正常', N'0', N'', N'1', N'1', N'admin', N'2020-04-16 15:31:05.0000000', N'', NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1250688201064992770', N'1250687930947620866', N'停止', N'-1', N'', N'1', N'1', N'admin', N'2020-04-16 15:31:18.0000000', N'', NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1280401815068295170', N'1280401766745718786', N'正常', N'1', N'', N'1', N'1', N'admin', N'2020-07-07 15:22:36.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1280401847607705602', N'1280401766745718786', N'冻结', N'0', N'', N'1', N'1', N'admin', N'2020-07-07 15:22:44.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'1334440962954936321', N'1209733563293962241', N'MYSQL5.7', N'4', NULL, N'1', N'1', N'admin', N'2020-12-03 18:16:02.0000000', N'admin', N'2020-12-03 18:16:02.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'222705e11ef0264d4214affff1fb4ff9', N'4f69be5f507accea8d5df5f11346181a', N'短信', N'1', N'', N'1', N'1', N'admin', N'2023-02-28 10:50:36.0000000', N'admin', N'2019-04-28 10:58:11.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'23a5bb76004ed0e39414e928c4cde155', N'4e4602b3e3686f0911384e188dc7efb4', N'不等于', N'!=', N'不等于', N'3', N'1', N'admin', N'2019-04-01 16:46:15.0000000', N'admin', N'2019-04-01 17:48:40.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'25847e9cb661a7c711f9998452dc09e6', N'4e4602b3e3686f0911384e188dc7efb4', N'小于等于', N'<=', N'小于等于', N'6', N'1', N'admin', N'2019-04-01 16:44:34.0000000', N'admin', N'2019-04-01 17:49:10.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'2d51376643f220afdeb6d216a8ac2c01', N'68168534ff5065a152bfab275c2136f8', N'有效', N'1', N'有效', N'2', N'1', N'admin', N'2019-04-26 19:22:01.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'308c8aadf0c37ecdde188b97ca9833f5', N'8dfe32e2d29ea9430a988b3b558bf233', N'已发布', N'1', N'已发布', N'2', N'1', N'admin', N'2019-04-16 17:41:24.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'333e6b2196e01ef9a5f76d74e86a6e33', N'8dfe32e2d29ea9430a988b3b558bf233', N'未发布', N'0', N'未发布', N'1', N'1', N'admin', N'2019-04-16 17:41:12.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'33bc9d9f753cf7dc40e70461e50fdc54', N'a9d9942bd0eccb6e89de92d130ec4c4a', N'发送失败', N'2', NULL, N'3', N'1', N'admin', N'2019-04-12 18:20:02.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'3fbc03d6c994ae06d083751248037c0e', N'78bda155fe380b1b3f175f1e88c284c6', N'已完成', N'3', N'已完成', N'3', N'1', N'admin', N'2019-05-09 16:33:25.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'41d7aaa40c9b61756ffb1f28da5ead8e', N'0b5d19e1fce4b2e6647e6b4a17760c14', N'通知公告', N'1', NULL, N'1', N'1', N'admin', N'2019-04-22 18:01:57.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'41fa1e9571505d643aea87aeb83d4d76', N'4e4602b3e3686f0911384e188dc7efb4', N'等于', N'=', N'等于', N'4', N'1', N'admin', N'2019-04-01 16:45:24.0000000', N'admin', N'2019-04-01 17:49:00.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'43d2295b8610adce9510ff196a49c6e9', N'845da5006c97754728bf48b6a10f79cc', N'正常', N'1', NULL, NULL, N'1', N'admin', N'2019-03-18 21:45:51.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'4f05fb5376f4c61502c5105f52e4dd2b', N'83bfb33147013cc81640d5fd9eda030c', N'操作日志', N'2', NULL, NULL, N'1', N'admin', N'2019-03-18 23:22:49.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'51222413e5906cdaf160bb5c86fb827c', N'a7adbcd86c37f7dbc9b66945c82ef9e6', N'是', N'1', N'', N'1', N'1', N'admin', N'2019-05-22 19:29:45.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'538fca35afe004972c5f3947c039e766', N'2e02df51611a4b9632828ab7e5338f00', N'显示', N'1', N'显示', N'1', N'1', N'admin', N'2025-03-26 18:27:13.0000000', N'admin', N'2019-04-26 18:39:07.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5584c21993bde231bbde2b966f2633ac', N'4e4602b3e3686f0911384e188dc7efb4', N'自定义SQL表达式', N'USE_SQL_RULES', N'自定义SQL表达式', N'9', N'1', N'admin', N'2019-04-01 10:45:24.0000000', N'admin', N'2019-04-01 17:49:27.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'58b73b344305c99b9d8db0fc056bbc0a', N'72cce0989df68887546746d8f09811aa', N'主表', N'2', NULL, N'2', N'1', N'admin', N'2019-03-27 10:13:36.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5b65a88f076b32e8e69d19bbaadb52d5', N'2f0320997ade5dd147c90130f7218c3e', N'全体用户', N'ALL', NULL, NULL, N'1', N'admin', N'2020-10-17 21:22:43.0000000', N'admin', N'2019-03-28 22:17:09.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5d833f69296f691843ccdd0c91212b6b', N'880a895c98afeca9d9ac39f29e67c13e', N'修改', N'3', N'', N'3', N'1', N'admin', N'2019-07-22 10:55:07.0000000', N'admin', N'2019-07-22 10:55:41.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'5d84a8634c8fdfe96275385075b105c9', N'3d9a351be3436fbefb1307d4cfb49bf2', N'女', N'2', NULL, N'2', N'1', NULL, N'2019-01-04 14:56:56.0000000', NULL, N'2019-01-04 17:38:12.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'66c952ae2c3701a993e7db58f3baf55e', N'4e4602b3e3686f0911384e188dc7efb4', N'大于', N'>', N'大于', N'1', N'1', N'admin', N'2019-04-01 10:45:46.0000000', N'admin', N'2019-04-01 17:48:29.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'69cacf64e244100289ddd4aa9fa3b915', N'a9d9942bd0eccb6e89de92d130ec4c4a', N'未发送', N'0', NULL, N'1', N'1', N'admin', N'2019-04-12 18:19:23.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6a7a9e1403a7943aba69e54ebeff9762', N'4f69be5f507accea8d5df5f11346181a', N'邮件', N'2', N'', N'2', N'1', N'admin', N'2031-02-28 10:50:44.0000000', N'admin', N'2019-04-28 10:59:03.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6c682d78ddf1715baf79a1d52d2aa8c2', N'72cce0989df68887546746d8f09811aa', N'单表', N'1', NULL, N'1', N'1', N'admin', N'2019-03-27 10:13:29.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6d404fd2d82311fbc87722cd302a28bc', N'4e4602b3e3686f0911384e188dc7efb4', N'模糊', N'LIKE', N'模糊', N'7', N'1', N'admin', N'2019-04-01 16:46:02.0000000', N'admin', N'2019-04-01 17:49:20.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'6d4e26e78e1a09699182e08516c49fc4', N'4d7fec1a7799a436d26d02325eff295e', N'高', N'H', N'高', N'1', N'1', N'admin', N'2019-04-16 17:04:24.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'75b260d7db45a39fc7f21badeabdb0ed', N'c36169beb12de8a71c8683ee7c28a503', N'不启用', N'0', NULL, NULL, N'1', N'admin', N'2019-03-18 23:29:41.0000000', N'admin', N'2019-03-18 23:29:54.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'7688469db4a3eba61e6e35578dc7c2e5', N'c36169beb12de8a71c8683ee7c28a503', N'启用', N'1', NULL, NULL, N'1', N'admin', N'2019-03-18 23:29:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'78ea6cadac457967a4b1c4eb7aaa418c', N'fc6cd58fde2e8481db10d3a1e68ce70c', N'正常', N'1', NULL, NULL, N'1', N'admin', N'2019-03-18 23:30:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'7ccf7b80c70ee002eceb3116854b75cb', N'ac2f7c0c5c5775fcea7e2387bcb22f01', N'按钮权限', N'2', NULL, NULL, N'1', N'admin', N'2019-03-18 23:25:40.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'81fb2bb0e838dc68b43f96cc309f8257', N'fc6cd58fde2e8481db10d3a1e68ce70c', N'冻结', N'2', NULL, NULL, N'1', N'admin', N'2019-03-18 23:30:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'83250269359855501ec4e9c0b7e21596', N'4274efc2292239b6f000b153f50823ff', N'可见/可访问(授权后可见/可访问)', N'1', N'', N'1', N'1', N'admin', N'2019-05-10 17:54:51.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'84778d7e928bc843ad4756db1322301f', N'4e4602b3e3686f0911384e188dc7efb4', N'大于等于', N'>=', N'大于等于', N'5', N'1', N'admin', N'2019-04-01 10:46:02.0000000', N'admin', N'2019-04-01 17:49:05.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'84dfc178dd61b95a72900fcdd624c471', N'78bda155fe380b1b3f175f1e88c284c6', N'处理中', N'2', N'处理中', N'2', N'1', N'admin', N'2019-05-09 16:33:01.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'86f19c7e0a73a0bae451021ac05b99dd', N'ac2f7c0c5c5775fcea7e2387bcb22f01', N'子菜单', N'1', NULL, NULL, N'1', N'admin', N'2019-03-18 23:25:27.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8bccb963e1cd9e8d42482c54cc609ca2', N'4f69be5f507accea8d5df5f11346181a', N'微信', N'3', NULL, N'3', N'1', N'admin', N'2021-05-11 14:29:12.0000000', N'admin', N'2019-04-11 14:29:31.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8c618902365ca681ebbbe1e28f11a548', N'4c753b5293304e7a445fd2741b46529d', N'启用', N'1', N'', N'0', N'1', N'admin', N'2020-07-18 23:19:27.0000000', N'admin', N'2019-05-17 14:51:18.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8cdf08045056671efd10677b8456c999', N'4274efc2292239b6f000b153f50823ff', N'可编辑(未授权时禁用)', N'2', N'', N'2', N'1', N'admin', N'2019-05-10 17:55:38.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'8ff48e657a7c5090d4f2a59b37d1b878', N'4d7fec1a7799a436d26d02325eff295e', N'中', N'M', N'中', N'2', N'1', N'admin', N'2019-04-16 17:04:40.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'948923658baa330319e59b2213cda97c', N'880a895c98afeca9d9ac39f29e67c13e', N'添加', N'2', N'', N'2', N'1', N'admin', N'2019-07-22 10:54:59.0000000', N'admin', N'2019-07-22 10:55:36.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'9a96c4a4e4c5c9b4e4d0cbf6eb3243cc', N'4c753b5293304e7a445fd2741b46529d', N'不启用', N'0', NULL, N'1', N'1', N'admin', N'2019-03-18 23:19:53.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a1e7d1ca507cff4a480c8caba7c1339e', N'880a895c98afeca9d9ac39f29e67c13e', N'导出', N'6', N'', N'6', N'1', N'admin', N'2019-07-22 12:06:50.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'a2be752dd4ec980afaec1efd1fb589af', N'8dfe32e2d29ea9430a988b3b558bf233', N'已撤销', N'2', N'已撤销', N'3', N'1', N'admin', N'2019-04-16 17:41:39.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'aa0d8a8042a18715a17f0a888d360aa4', N'ac2f7c0c5c5775fcea7e2387bcb22f01', N'一级菜单', N'0', NULL, NULL, N'1', N'admin', N'2019-03-18 23:24:52.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'adcf2a1fe93bb99a84833043f475fe0b', N'4e4602b3e3686f0911384e188dc7efb4', N'包含', N'IN', N'包含', N'8', N'1', N'admin', N'2019-04-01 16:45:47.0000000', N'admin', N'2019-04-01 17:49:24.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b029a41a851465332ee4ee69dcf0a4c2', N'0b5d19e1fce4b2e6647e6b4a17760c14', N'系统消息', N'2', NULL, N'1', N'1', N'admin', N'2019-02-22 18:02:08.0000000', N'admin', N'2019-04-22 18:02:13.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b2a8b4bb2c8e66c2c4b1bb086337f393', N'3486f32803bb953e7155dab3513dc68b', N'正常', N'0', NULL, NULL, N'1', N'admin', N'2022-10-18 21:46:48.0000000', N'admin', N'2019-03-28 22:22:20.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b5f3bd5f66bb9a83fecd89228c0d93d1', N'68168534ff5065a152bfab275c2136f8', N'无效', N'0', N'无效', N'1', N'1', N'admin', N'2019-04-26 19:21:49.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'b9fbe2a3602d4a27b45c100ac5328484', N'78bda155fe380b1b3f175f1e88c284c6', N'待提交', N'1', N'待提交', N'1', N'1', N'admin', N'2019-05-09 16:32:35.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'ba27737829c6e0e582e334832703d75e', N'236e8a4baff0db8c62c00dd95632834f', N'同步', N'1', N'同步', N'1', N'1', N'admin', N'2019-05-15 15:28:15.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'bcec04526b04307e24a005d6dcd27fd6', N'880a895c98afeca9d9ac39f29e67c13e', N'导入', N'5', N'', N'5', N'1', N'admin', N'2019-07-22 12:06:41.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c53da022b9912e0aed691bbec3c78473', N'880a895c98afeca9d9ac39f29e67c13e', N'查询', N'1', N'', N'1', N'1', N'admin', N'2019-07-22 10:54:51.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'c5700a71ad08994d18ad1dacc37a71a9', N'a7adbcd86c37f7dbc9b66945c82ef9e6', N'否', N'0', N'', N'1', N'1', N'admin', N'2019-05-22 19:29:55.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'df168368dcef46cade2aadd80100d8aa', N'3d9a351be3436fbefb1307d4cfb49bf2', N'男', N'1', NULL, N'1', N'1', NULL, N'2027-08-04 14:56:49.0000000', N'admin', N'2019-03-23 22:44:44.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e6329e3a66a003819e2eb830b0ca2ea0', N'4e4602b3e3686f0911384e188dc7efb4', N'小于', N'<', N'小于', N'2', N'1', N'admin', N'2019-04-01 16:44:15.0000000', N'admin', N'2019-04-01 17:48:34.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'e94eb7af89f1dbfa0d823580a7a6e66a', N'236e8a4baff0db8c62c00dd95632834f', N'不同步', N'0', N'不同步', N'2', N'1', N'admin', N'2019-05-15 15:28:28.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f16c5706f3ae05c57a53850c64ce7c45', N'a9d9942bd0eccb6e89de92d130ec4c4a', N'发送成功', N'1', NULL, N'2', N'1', N'admin', N'2019-04-12 18:19:43.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f2a7920421f3335afdf6ad2b342f6b5d', N'845da5006c97754728bf48b6a10f79cc', N'冻结', N'2', NULL, NULL, N'1', N'admin', N'2019-03-18 21:46:02.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f37f90c496ec9841c4c326b065e00bb2', N'83bfb33147013cc81640d5fd9eda030c', N'登录日志', N'1', NULL, NULL, N'1', N'admin', N'2019-03-18 23:22:37.0000000', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f80a8f6838215753b05e1a5ba3346d22', N'880a895c98afeca9d9ac39f29e67c13e', N'删除', N'4', N'', N'4', N'1', N'admin', N'2019-07-22 10:55:14.0000000', N'admin', N'2019-07-22 10:55:30.0000000') +GO + +INSERT INTO [dbo].[sys_dict_item] ([id], [dict_id], [item_text], [item_value], [description], [sort_order], [status], [create_by], [create_time], [update_by], [update_time]) VALUES (N'fe50b23ae5e68434def76f67cef35d2d', N'78bda155fe380b1b3f175f1e88c284c6', N'已作废', N'4', N'已作废', N'4', N'1', N'admin', N'2021-09-09 16:33:43.0000000', N'admin', N'2019-05-09 16:34:40.0000000') +GO + + +-- ---------------------------- +-- Table structure for sys_fill_rule +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_fill_rule]') AND type IN ('U')) + DROP TABLE [dbo].[sys_fill_rule] +GO + +CREATE TABLE [dbo].[sys_fill_rule] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [rule_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_class] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_params] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_fill_rule] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'rule_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则Code', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'rule_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则实现类', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'rule_class' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则参数', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'rule_params' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_fill_rule', +'COLUMN', N'create_time' +GO + + +-- ---------------------------- +-- Records of sys_fill_rule +-- ---------------------------- +INSERT INTO [dbo].[sys_fill_rule] ([id], [rule_name], [rule_code], [rule_class], [rule_params], [update_by], [update_time], [create_by], [create_time]) VALUES (N'1202551334738382850', N'机构编码生成', N'org_num_role', N'com.jero.modules.system.rule.OrgCodeRule', N'{"parentId":"c6d7cb4deeac411cb3384b1b31278596"}', N'admin', N'2019-12-09 10:37:06.0000000', N'admin', N'2019-12-05 19:32:35.0000000') +GO + +INSERT INTO [dbo].[sys_fill_rule] ([id], [rule_name], [rule_code], [rule_class], [rule_params], [update_by], [update_time], [create_by], [create_time]) VALUES (N'1202787623203065858', N'分类字典编码生成', N'category_code_rule', N'com.jero.modules.system.rule.CategoryCodeRule', N'{"pid":""}', N'admin', N'2019-12-09 10:36:54.0000000', N'admin', N'2019-12-06 11:11:31.0000000') +GO + + +-- ---------------------------- +-- Table structure for sys_gateway_route +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_gateway_route]') AND type IN ('U')) + DROP TABLE [dbo].[sys_gateway_route] +GO + +CREATE TABLE [dbo].[sys_gateway_route] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [router_id] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [name] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [uri] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [predicates] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [filters] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [retryable] int NULL, + [strip_prefix] int NULL, + [persistable] int NULL, + [show_api] int NULL, + [status] int NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [sys_org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_gateway_route] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'路由ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'router_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'服务名', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'服务地址', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'uri' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'断言', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'predicates' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'过滤器', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'filters' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否重试:0-否 1-是', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'retryable' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否忽略前缀0-否 1-是', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'strip_prefix' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否为保留数据:0-否 1-是', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'persistable' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否在接口文档中展示:0-否 1-是', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'show_api' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态:0-无效 1-有效', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_gateway_route', +'COLUMN', N'sys_org_code' +GO + + +-- ---------------------------- +-- Records of sys_gateway_route +-- ---------------------------- +INSERT INTO [dbo].[sys_gateway_route] ([id], [router_id], [name], [uri], [predicates], [filters], [retryable], [strip_prefix], [persistable], [show_api], [status], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'1331051599401857026', N'jero-demo-websocket', N'jero-demo-websocket', N'lb:ws://jero-demo', N'[{"args":["/vxeSocket/**"],"name":"Path"}]', N'[]', NULL, NULL, NULL, NULL, N'1', N'admin', N'2020-11-24 09:46:46.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_gateway_route] ([id], [router_id], [name], [uri], [predicates], [filters], [retryable], [strip_prefix], [persistable], [show_api], [status], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'jero-cloud-websocket', N'jero-system-websocket', N'jero-system-websocket', N'lb:ws://jero-system', N'[{"args":["/websocket/**","/eoaSocket/**","/newsWebsocket/**"],"name":"Path"}]', N'[]', NULL, NULL, NULL, NULL, N'1', N'admin', N'2020-11-16 19:41:51.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_gateway_route] ([id], [router_id], [name], [uri], [predicates], [filters], [retryable], [strip_prefix], [persistable], [show_api], [status], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'jero-demo', N'jero-demo', N'jero-demo', N'lb://jero-demo', N'[{"args":["/mock/**","/test/**","/bigscreen/template1/**","/bigscreen/template2/**"],"name":"Path"}]', N'[]', NULL, NULL, NULL, NULL, N'1', N'admin', N'2020-11-16 19:41:51.0000000', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_gateway_route] ([id], [router_id], [name], [uri], [predicates], [filters], [retryable], [strip_prefix], [persistable], [show_api], [status], [create_by], [create_time], [update_by], [update_time], [sys_org_code]) VALUES (N'jero-system', N'jero-system', N'jero-system', N'lb://jero-system', N'[{"args":["/sys/**","/eoa/**","/joa/**","/online/**","/bigscreen/**","/jmreport/**","/desform/**","/process/**","/act/**","/plug-in/***/","/druid/**","/generic/**"],"name":"Path"}]', N'[]', NULL, NULL, NULL, NULL, N'1', N'admin', N'2020-11-16 19:41:51.0000000', NULL, NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for sys_log +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_log]') AND type IN ('U')) + DROP TABLE [dbo].[sys_log] +GO + +CREATE TABLE [dbo].[sys_log] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [log_type] int NULL, + [log_content] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [operate_type] int NULL, + [userid] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [username] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [ip] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [method] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [request_url] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [request_param] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [request_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [cost_time] bigint NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_log] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'日志类型(1登录日志,2操作日志)', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'log_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'日志内容', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'log_content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作类型', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'operate_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作用户账号', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'userid' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作用户名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'IP', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'ip' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请求java方法', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'method' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请求路径', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'request_url' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请求参数', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'request_param' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'请求类型', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'request_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'耗时', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'cost_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_log', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'系统日志表', +'SCHEMA', N'dbo', +'TABLE', N'sys_log' +GO + + +-- ---------------------------- +-- Records of sys_log +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_permission +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_permission]') AND type IN ('U')) + DROP TABLE [dbo].[sys_permission] +GO + +CREATE TABLE [dbo].[sys_permission] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [parent_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [url] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [component] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [component_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [redirect] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [menu_type] int NULL, + [perms] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [perms_type] nvarchar(10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [sort_no] float(53) NULL, + [always_show] tinyint NULL, + [icon] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [is_route] tinyint NULL, + [is_leaf] tinyint NULL, + [keep_alive] tinyint NULL, + [hidden] int NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [del_flag] int NULL, + [rule_flag] int NULL, + [status] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [internal_or_external] tinyint NULL +) +GO + +ALTER TABLE [dbo].[sys_permission] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'父id', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'parent_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单标题', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'路径', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'url' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'组件', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'component' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'组件名字', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'component_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'一级菜单跳转地址', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'redirect' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单类型(0:一级菜单; 1:子菜单:2:按钮权限)', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'menu_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单权限编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'perms' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限策略1显示2禁用', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'perms_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单排序', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'sort_no' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'聚合子路由: 1是0否', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'always_show' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单图标', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'icon' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否路由菜单: 0:不是 1:是(默认值1)', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'is_route' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否叶子节点: 1:是 0:不是', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'is_leaf' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否缓存该页面: 1:是 0:不是', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'keep_alive' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否隐藏路由: 0否,1是', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'hidden' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态 0正常 1已删除', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'是否添加数据权限1是0否', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'rule_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'按钮权限状态(0无效1有效)', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'外链菜单打开方式 0/内部打开 1/外部打开', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission', +'COLUMN', N'internal_or_external' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单权限表', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission' +GO + + +-- ---------------------------- +-- Records of sys_permission +-- ---------------------------- +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'00a2a0ae65cdca5e93209cdbde97cbe6', N'2e42e3835c2b44ec9f7bc26c146ee531', N'成功', N'/result/success', N'result/Success', NULL, NULL, N'1', NULL, NULL, N'1', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'020b06793e4de2eee0007f603000c769', N'f0675b52d89100ee88472b6800754a08', N'ViserChartDemo', N'/report/ViserChartDemo', N'demo/report/ViserChartDemo', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-03 19:08:53.0000000', N'admin', N'2019-04-03 19:08:53.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'024f1fd1283dc632458976463d8984e1', N'700b7f95165c46cc7a78bf227aa8fed3', N'Tomcat信息', N'/monitor/TomcatInfo', N'modules/monitor/TomcatInfo', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-02 09:44:29.0000000', N'admin', N'2019-05-07 15:19:10.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'043780fa095ff1b2bec4dc406d76f023', N'2a470fc0c3954d9dbb61de6d80846549', N'表格合计', N'/demo/tableTotal', N'demo/TableTotal', NULL, NULL, N'1', NULL, N'1', N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-08-14 10:28:46.0000000', NULL, NULL, N'0', N'0', N'1', NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'05b3c82ddb2536a4a5ee1a4c46b5abef', N'540a2936940846cb98114ffb0d145cb8', N'用户列表', N'/list/user-list', N'demo/list/UserList', NULL, NULL, N'1', NULL, NULL, N'3', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'0620e402857b8c5b605e1ad9f4b89350', N'2a470fc0c3954d9dbb61de6d80846549', N'异步树列表Demo', N'/demo/jeroTreeTable', N'demo/JeroTreeTable', NULL, NULL, N'1', NULL, N'0', N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-05-13 17:30:30.0000000', N'admin', N'2021-03-16 22:19:21.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'078f9558cdeab239aecb2bda1a8ed0d1', N'fb07ca05a3e13674dbf6d3245956da2e', N'搜索列表(文章)', N'/list/search/article', N'demo/list/TableList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-02-12 14:00:34.0000000', N'admin', N'2019-02-12 14:17:54.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'08e6b9dc3c04489c8e1ff2ce6f105aa4', N'', N'系统监控', N'/dashboard3', N'layouts/RouteView', NULL, NULL, N'0', NULL, NULL, N'16', N'0', N'dashboard', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:31:58.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'0ac2ad938963b6c6d1af25477d5b8b51', N'8d4683aacaa997ab86b966b464360338', N'代码生成按钮', NULL, NULL, NULL, NULL, N'2', N'online:goGenerateCode', N'1', N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-06-11 14:20:09.0000000', NULL, NULL, N'0', N'0', N'1', NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'109c78a583d4693ce2f16551b7786786', N'e41b69c57a941a3bbcce45032fe57605', N'Online报表配置', N'/online/cgreport', N'modules/online/cgreport/OnlCgreportHeadList', NULL, NULL, N'1', NULL, NULL, N'2', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-03-08 10:51:07.0000000', N'admin', N'2019-03-30 19:04:28.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1166535831146504193', N'2a470fc0c3954d9dbb61de6d80846549', N'文件上传示例', N'/oss/file', N'modules/oss/OSSFileList', NULL, NULL, N'1', NULL, N'1', N'1', N'0', N'', N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-08-28 02:19:50.0000000', N'admin', N'2021-03-16 20:48:53.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1192318987661234177', N'e41b69c57a941a3bbcce45032fe57605', N'系统编码规则', N'/isystem/fillRule', N'system/SysFillRuleList', NULL, NULL, N'1', NULL, N'1', N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-11-07 13:52:53.0000000', N'admin', N'2020-07-10 16:55:03.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1205097455226462210', N'1371830841603710977', N'报表设计', N'/big/screen', N'layouts/RouteView', NULL, NULL, N'1', NULL, N'1', N'2', N'0', N'area-chart', N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-12-12 20:09:58.0000000', N'admin', N'2021-03-16 22:29:22.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1205098241075453953', N'1205097455226462210', N'生产销售监控', N'{{ window._CONFIG[''domianURL''] }}/test/bigScreen/templat/index1', N'layouts/IframePageView', NULL, NULL, N'1', NULL, N'1', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-12-12 20:13:05.0000000', N'admin', N'2019-12-12 20:15:27.0000000', N'0', N'0', N'1', N'1') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1205306106780364802', N'1205097455226462210', N'智慧物流监控', N'{{ window._CONFIG[''domianURL''] }}/test/bigScreen/templat/index2', N'layouts/IframePageView', NULL, NULL, N'1', NULL, N'1', N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-12-13 09:59:04.0000000', N'admin', N'2019-12-25 09:28:03.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1209731624921534465', N'e41b69c57a941a3bbcce45032fe57605', N'多数据源管理', N'/isystem/dataSource', N'system/SysDataSourceList', NULL, NULL, N'1', NULL, N'1', N'6', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-12-25 15:04:30.0000000', N'admin', N'2020-02-23 22:43:37.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1224641973866467330', N'e41b69c57a941a3bbcce45032fe57605', N'系统校验规则', N'/isystem/checkRule', N'system/SysCheckRuleList', NULL, NULL, N'1', NULL, N'1', N'5', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-11-07 13:52:53.0000000', N'admin', N'2020-07-10 16:55:12.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1260928341675982849', N'3f915b2769fc80648e92d04e84ca059d', N'添加按钮', NULL, NULL, NULL, NULL, N'2', N'user:add', N'1', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-05-14 21:41:58.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1260929666434318338', N'3f915b2769fc80648e92d04e84ca059d', N'用户编辑', NULL, NULL, NULL, NULL, N'2', N'user:edit', N'1', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-05-14 21:47:14.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1260931366557696001', N'3f915b2769fc80648e92d04e84ca059d', N'表单性别可见', N'', NULL, NULL, NULL, N'2', N'user:sex', N'1', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-05-14 21:53:59.0000000', N'admin', N'2020-05-14 21:57:00.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1260933542969458689', N'3f915b2769fc80648e92d04e84ca059d', N'禁用生日字段', NULL, NULL, NULL, NULL, N'2', N'user:form:birthday', N'2', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-05-14 22:02:38.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1265162119913824258', N'08e6b9dc3c04489c8e1ff2ce6f105aa4', N'路由网关', N'/isystem/gatewayroute', N'system/SysGatewayRouteList', NULL, NULL, N'1', NULL, N'1', N'0', N'0', NULL, N'1', N'1', N'0', N'0', NULL, NULL, N'2020-05-26 14:05:30.0000000', N'admin', N'2020-09-09 14:47:52.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1280350452934307841', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'租户管理', N'/isys/tenant', N'system/TenantList', NULL, NULL, N'1', NULL, N'1', N'10', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-07 11:58:30.0000000', N'admin', N'2020-07-10 15:46:35.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1280464606292099074', N'2a470fc0c3954d9dbb61de6d80846549', N'图片裁剪', N'/demo/ImagCropper', N'demo/ImagCropper', NULL, NULL, N'1', NULL, N'1', N'9', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-07 19:32:06.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287715272999944193', N'2a470fc0c3954d9dbb61de6d80846549', N'JVXETable示例', N'/demo/j-vxe-table-demo', N'layouts/RouteView', NULL, NULL, N'1', NULL, N'1', N'0.1', N'0', N'', N'1', N'0', N'0', N'0', NULL, N'admin', N'2020-07-27 19:43:40.0000000', N'admin', N'2020-09-09 14:52:06.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287715783966834689', N'1287715272999944193', N'普通示例', N'/demo/j-vxe-table-demo/normal', N'demo/JVXETableDemo', NULL, NULL, N'1', NULL, N'1', N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-27 19:45:42.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287716451494510593', N'1287715272999944193', N'布局模板', N'/demo/j-vxe-table-demo/layout', N'demo/JVxeDemo/layout-demo/Index', NULL, NULL, N'1', NULL, N'1', N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-27 19:48:21.0000000', NULL, NULL, N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287718919049691137', N'1287715272999944193', N'即时保存', N'/demo/j-vxe-table-demo/jsbc', N'demo/JVxeDemo/demo/JSBCDemo', NULL, NULL, N'1', NULL, N'1', N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-27 19:57:36.0000000', N'admin', N'2020-07-27 20:03:37.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287718938179911682', N'1287715272999944193', N'弹出子表', N'/demo/j-vxe-table-demo/tczb', N'demo/JVxeDemo/demo/PopupSubTable', NULL, NULL, N'1', NULL, N'1', N'4', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-27 19:57:41.0000000', N'admin', N'2020-07-27 20:03:47.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1287718956957810689', N'1287715272999944193', N'无痕刷新', N'/demo/j-vxe-table-demo/whsx', N'demo/JVxeDemo/demo/SocketReload', NULL, NULL, N'1', NULL, N'1', N'5', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-07-27 19:57:44.0000000', N'admin', N'2020-07-27 20:03:57.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'13212d3416eb690c2e1d5033166ff47a', N'2e42e3835c2b44ec9f7bc26c146ee531', N'失败', N'/result/fail', N'result/Error', NULL, NULL, N'1', NULL, NULL, N'2', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1335960713267093506', N'1205097455226462210', N'积木报表设计', N'{{ window._CONFIG[''domianURL''] }}/jmreport/list?token=${token}', N'layouts/IframePageView', NULL, NULL, N'1', NULL, N'1', N'0', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2020-12-07 22:53:50.0000000', N'admin', N'2020-12-08 09:28:06.0000000', N'0', N'0', N'1', N'1') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1367a93f2c410b169faa7abcbad2f77c', N'6e73eb3c26099c191bf03852ee1310a1', N'基本设置', N'/account/settings/BaseSetting', N'account/settings/BaseSetting', N'account-settings-base', NULL, N'1', N'BaseSettings', NULL, NULL, N'0', NULL, N'1', N'1', NULL, N'1', NULL, NULL, N'2018-12-26 18:58:35.0000000', N'admin', N'2019-03-20 12:57:31.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1371830841603710977', N'', N'图表/报表示例', N'/charts', N'layouts/RouteView', NULL, NULL, N'0', NULL, N'1', N'19', N'0', N'line-chart', N'1', N'0', N'0', N'0', NULL, N'admin', N'2021-03-16 22:28:55.0000000', N'admin', N'2021-03-16 22:31:24.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1371831353354936322', N'', N'日志中心', N'/log', N'layouts/RouteView', NULL, NULL, N'0', NULL, N'1', N'10', N'0', N'copy', N'1', N'0', N'0', N'0', NULL, N'admin', N'2021-03-16 22:30:57.0000000', N'admin', N'2021-03-16 22:37:10.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'190c2b43bec6a5f7a4194a85db67d96a', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'角色管理', N'/isystem/roleUserList', N'system/RoleUserList', NULL, NULL, N'1', N'sys:role:list', NULL, N'1.2', N'0', NULL, N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-04-17 15:13:56.0000000', N'admin', N'2019-12-25 09:36:31.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1a0811914300741f4e11838ff37a1d3a', N'3f915b2769fc80648e92d04e84ca059d', N'手机号禁用', NULL, NULL, NULL, NULL, N'2', N'user:form:phone', N'2', N'1', N'0', NULL, N'0', N'1', NULL, N'0', NULL, N'admin', N'2019-05-11 17:19:30.0000000', N'admin', N'2019-05-11 18:00:22.0000000', N'0', N'0', N'1', NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'200006f0edf145a2b50eacca07585451', N'fb07ca05a3e13674dbf6d3245956da2e', N'搜索列表(应用)', N'/list/search/application', N'demo/list/TableList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-02-12 14:02:51.0000000', N'admin', N'2019-02-12 14:14:01.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'265de841c58907954b8877fb85212622', N'2a470fc0c3954d9dbb61de6d80846549', N'图片拖拽排序', N'/demo/imgDragSort', N'demo/ImgDragSort', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-25 10:43:08.0000000', N'admin', N'2019-04-25 10:46:26.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'277bfabef7d76e89b33062b16a9a5020', N'e3c13679c73a4f829bcff2aba8fd68b1', N'基础表单', N'/form/base-form', N'demo/form/BasicForm', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'0', NULL, N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-02-26 17:02:08.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'2a470fc0c3954d9dbb61de6d80846549', N'', N'开发示例Demo', N'/jero', N'layouts/RouteView', NULL, NULL, N'0', NULL, NULL, N'20', N'0', N'qrcode', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:31:20.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'2aeddae571695cd6380f6d6d334d6e7d', N'f0675b52d89100ee88472b6800754a08', N'布局统计报表', N'/report/ArchivesStatisticst', N'demo/report/ArchivesStatisticst', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-03 18:32:48.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'2dbbafa22cda07fa5d169d741b81fe12', N'e41b69c57a941a3bbcce45032fe57605', N'在线文档', N'{{ window._CONFIG[''domianURL''] }}/doc.html', N'layouts/IframePageView', NULL, NULL, N'1', NULL, NULL, N'8', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-01-30 10:00:01.0000000', N'admin', N'2021-03-16 22:33:43.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'2e42e3835c2b44ec9f7bc26c146ee531', N'2a470fc0c3954d9dbb61de6d80846549', N'结果页', N'/result', N'layouts/PageView', NULL, NULL, N'1', NULL, NULL, N'20', N'0', N'check-circle-o', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:22:54.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'3f915b2769fc80648e92d04e84ca059d', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'用户管理', N'/isystem/user', N'system/UserList', NULL, NULL, N'1', N'sys:user:list', NULL, N'1.1', N'0', NULL, N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-12-25 09:36:24.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'3fac0d3c9cd40fa53ab70d4c583821f8', N'2a470fc0c3954d9dbb61de6d80846549', N'分屏', N'/demo/splitPanel', N'demo/SplitPanel', NULL, NULL, N'1', NULL, NULL, N'6', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-25 16:27:06.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4148ec82b6acd69f470bea75fe41c357', N'2a470fc0c3954d9dbb61de6d80846549', N'单表模型示例', N'/demo/JeroDemoList', N'demo/JeroDemoList', N'DemoList', NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', N'0', N'0', NULL, NULL, N'2018-12-28 15:57:30.0000000', N'jero', N'2020-05-14 22:09:34.0000000', N'0', N'1', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'418964ba087b90a84897b62474496b93', N'540a2936940846cb98114ffb0d145cb8', N'查询表格', N'/list/query-list', N'demo/list/TableList', NULL, NULL, N'1', NULL, NULL, N'1', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4356a1a67b564f0988a484f5531fd4d9', N'2a470fc0c3954d9dbb61de6d80846549', N'内嵌Table', N'/demo/TableExpandeSub', N'demo/TableExpandeSub', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-04 22:48:13.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'45c966826eeff4c99b8f8ebfe74511fc', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'部门管理', N'/isystem/depart', N'system/DepartList', NULL, NULL, N'1', N'sys:depart:list', NULL, N'1.4', N'0', NULL, N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-01-29 18:47:40.0000000', N'admin', N'2019-12-25 09:36:47.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4875ebe289344e14844d8e3ea1edd73f', N'2a470fc0c3954d9dbb61de6d80846549', N'详情页', N'/profile', N'layouts/RouteView', NULL, NULL, N'1', NULL, NULL, N'21', N'0', N'profile', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:23:07.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4f66409ef3bbd69c1d80469d6e2a885e', N'6e73eb3c26099c191bf03852ee1310a1', N'账户绑定', N'/account/settings/binding', N'account/settings/Binding', NULL, NULL, N'1', N'BindingSettings', NULL, NULL, NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-26 19:01:20.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'4f84f9400e5e92c95f05b554724c2b58', N'540a2936940846cb98114ffb0d145cb8', N'角色列表', N'/list/role-list', N'demo/list/RoleList', NULL, NULL, N'1', NULL, NULL, N'4', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'53a9230444d33de28aa11cc108fb1dba', N'5c8042bd6c601270b2bbd9b20bccc68b', N'我的消息', N'/isps/userAnnouncement', N'system/UserAnnouncementList', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-04-19 10:16:00.0000000', N'admin', N'2021-03-16 18:01:26.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'540a2936940846cb98114ffb0d145cb8', N'2a470fc0c3954d9dbb61de6d80846549', N'列表页', N'/list', N'layouts/PageView', NULL, N'/list/query-list', N'1', NULL, NULL, N'24', N'0', N'table', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:23:31.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'54dd5457a3190740005c1bfec55b1c34', N'e41b69c57a941a3bbcce45032fe57605', N'菜单管理', N'/isystem/permission', N'system/PermissionList', NULL, NULL, N'1', NULL, NULL, N'7', N'0', NULL, N'1', N'1', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:32:38.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'58857ff846e61794c69208e9d3a85466', N'1371831353354936322', N'操作日志', N'/isystem/log', N'system/LogList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', N'', N'1', N'1', N'0', N'0', NULL, NULL, N'2018-12-26 10:11:18.0000000', N'admin', N'2021-03-16 22:33:27.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'58b9204feaf07e47284ddb36cd2d8468', N'2a470fc0c3954d9dbb61de6d80846549', N'图片翻页', N'/demo/imgTurnPage', N'demo/ImgTurnPage', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-25 11:36:42.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'5c2f42277948043026b7a14692456828', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'我的部门', N'/isystem/departUserList', N'system/DepartUserList', NULL, NULL, N'1', NULL, NULL, N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-04-17 15:12:24.0000000', N'admin', N'2019-12-25 09:35:26.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'5c8042bd6c601270b2bbd9b20bccc68b', N'', N'消息中心', N'/message', N'layouts/RouteView', NULL, NULL, N'0', NULL, NULL, N'9', N'0', N'message', N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-04-09 11:05:04.0000000', N'admin', N'2021-03-16 22:32:06.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'6531cf3421b1265aeeeabaab5e176e6d', N'e3c13679c73a4f829bcff2aba8fd68b1', N'分步表单', N'/form/step-form', N'demo/form/stepForm/StepForm', NULL, NULL, N'1', NULL, NULL, N'2', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'655563cd64b75dcf52ef7bcdd4836953', N'2a470fc0c3954d9dbb61de6d80846549', N'图片预览', N'/demo/ImagPreview', N'demo/ImagPreview', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-17 11:18:45.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'65a8f489f25a345836b7f44b1181197a', N'c65321e57b7949b7a975313220de0422', N'403', N'/exception/403', N'exception/403', NULL, NULL, N'1', NULL, NULL, N'1', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'6ad53fd1b220989a8b71ff482d683a5a', N'2a470fc0c3954d9dbb61de6d80846549', N'一对多Tab示例', N'/demo/tablist/jeroOrderDMainList', N'demo/tablist/JeroOrderDMainList', NULL, NULL, N'1', NULL, NULL, N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-02-20 14:45:09.0000000', N'admin', N'2021-03-16 22:18:38.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'6e73eb3c26099c191bf03852ee1310a1', N'717f6bee46f44a3897eca9abd6e2ec44', N'个人设置', N'/account/settings/BaseSetting', N'account/settings/Index', NULL, NULL, N'1', NULL, NULL, N'2', N'1', NULL, N'1', N'0', NULL, N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-04-19 09:41:05.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'700b7f95165c46cc7a78bf227aa8fed3', N'08e6b9dc3c04489c8e1ff2ce6f105aa4', N'性能监控', N'/monitor', N'layouts/RouteView', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-04-02 11:34:34.0000000', N'admin', N'2020-09-09 14:48:51.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'717f6bee46f44a3897eca9abd6e2ec44', N'2a470fc0c3954d9dbb61de6d80846549', N'个人页', N'/account', N'layouts/RouteView', NULL, NULL, N'1', NULL, NULL, N'25', N'0', N'user', N'1', N'0', N'0', N'1', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:23:42.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'73678f9daa45ed17a3674131b03432fb', N'540a2936940846cb98114ffb0d145cb8', N'权限列表', N'/list/permission-list', N'demo/list/PermissionList', NULL, NULL, N'1', NULL, NULL, N'5', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'7960961b0063228937da5fa8dd73d371', N'2a470fc0c3954d9dbb61de6d80846549', N'JEditableTable示例', N'/demo/JEditableTable', N'demo/JeroEditableTableExample', NULL, NULL, N'1', NULL, NULL, N'0.2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-03-22 15:22:18.0000000', N'admin', N'2021-03-16 22:21:32.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'7ac9eb9ccbde2f7a033cd4944272bf1e', N'540a2936940846cb98114ffb0d145cb8', N'卡片列表', N'/list/card', N'demo/list/CardList', NULL, NULL, N'1', NULL, NULL, N'7', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'841057b8a1bef8f6b4b20f9a618a7fa6', N'1371831353354936322', N'数据日志', N'/sys/dataLog-list', N'system/DataLogList', NULL, NULL, N'1', NULL, NULL, N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-03-11 19:26:49.0000000', N'admin', N'2021-03-16 22:33:07.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'882a73768cfd7f78f3a37584f7299656', N'6e73eb3c26099c191bf03852ee1310a1', N'个性化设置', N'/account/settings/custom', N'account/settings/Custom', NULL, NULL, N'1', N'CustomSettings', NULL, NULL, NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-26 19:00:46.0000000', NULL, N'2018-12-26 21:13:25.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'8b3bff2eee6f1939147f5c68292a1642', N'700b7f95165c46cc7a78bf227aa8fed3', N'服务器信息', N'/monitor/SystemInfo', N'modules/monitor/SystemInfo', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-02 11:39:19.0000000', N'admin', N'2019-04-02 15:40:02.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'8d1ebd663688965f1fd86a2f0ead3416', N'700b7f95165c46cc7a78bf227aa8fed3', N'Redis监控', N'/monitor/redis/info', N'modules/monitor/RedisInfo', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-02 13:11:33.0000000', N'admin', N'2019-05-07 15:18:54.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'8d4683aacaa997ab86b966b464360338', N'e41b69c57a941a3bbcce45032fe57605', N'Online表单开发', N'/online/cgform', N'modules/online/cgform/OnlCgformHeadList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'0', NULL, N'0', NULL, N'admin', N'2019-03-12 15:48:14.0000000', N'admin', N'2019-06-11 14:19:17.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'8fb8172747a78756c11916216b8b8066', N'717f6bee46f44a3897eca9abd6e2ec44', N'工作台', N'/dashboard/workplace', N'dashboard/Workplace', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', NULL, N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-04-02 11:45:02.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'944abf0a8fc22fe1f1154a389a574154', N'5c8042bd6c601270b2bbd9b20bccc68b', N'消息管理', N'/modules/message/sysMessageList', N'modules/message/SysMessageList', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-04-09 11:27:53.0000000', N'admin', N'2021-03-16 18:01:20.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'9502685863ab87f0ad1134142788a385', N'', N'首页', N'/dashboard/analysis', N'dashboard/Analysis', NULL, NULL, N'0', NULL, NULL, N'0', N'0', N'home', N'1', N'1', NULL, N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-03-29 11:04:13.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'97c8629abc7848eccdb6d77c24bb3ebb', N'700b7f95165c46cc7a78bf227aa8fed3', N'磁盘监控', N'/monitor/Disk', N'modules/monitor/DiskMonitoring', NULL, NULL, N'1', NULL, NULL, N'6', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-25 14:30:06.0000000', N'admin', N'2019-05-05 14:37:14.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'9a90363f216a6a08f32eecb3f0bf12a3', N'2a470fc0c3954d9dbb61de6d80846549', N'Jero组件示例', N'/demo/SelectDemo', N'demo/SelectDemo', NULL, NULL, N'1', NULL, NULL, N'0', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-03-19 11:19:05.0000000', N'admin', N'2021-03-16 22:15:28.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'ae4fed059f67086fd52a73d913cf473d', N'540a2936940846cb98114ffb0d145cb8', N'内联编辑表格', N'/list/edit-table', N'demo/list/TableInnerEditList', NULL, NULL, N'1', NULL, NULL, N'2', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'aedbf679b5773c1f25e9f7b10111da73', N'08e6b9dc3c04489c8e1ff2ce6f105aa4', N'SQL监控', N'{{ window._CONFIG[''domianURL''] }}/druid/', N'layouts/IframePageView', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-01-30 09:43:22.0000000', N'admin', N'2020-09-09 14:48:38.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'b1cb0a3fedf7ed0e4653cb5a229837ee', N'e41b69c57a941a3bbcce45032fe57605', N'定时任务', N'/isystem/QuartzJobList', N'system/QuartzJobList', NULL, NULL, N'1', NULL, NULL, N'10', N'0', NULL, N'1', N'1', N'0', N'0', NULL, NULL, N'2019-01-03 09:38:52.0000000', N'admin', N'2021-03-16 22:42:39.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'b3c824fc22bd953e2eb16ae6914ac8f9', N'4875ebe289344e14844d8e3ea1edd73f', N'高级详情页', N'/profile/advanced', N'demo/profile/advanced/Advanced', NULL, NULL, N'1', NULL, NULL, N'2', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'b4dfc7d5dd9e8d5b6dd6d4579b1aa559', N'c65321e57b7949b7a975313220de0422', N'500', N'/exception/500', N'exception/500', NULL, NULL, N'1', NULL, NULL, N'3', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'c431130c0bc0ec71b0a5be37747bb36a', N'2a470fc0c3954d9dbb61de6d80846549', N'一对多JEditable', N'/demo/JeroOrderMainListForJEditableTable', N'demo/JeroOrderMainListForJEditableTable', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-03-29 10:51:59.0000000', N'admin', N'2019-04-04 20:09:39.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'c65321e57b7949b7a975313220de0422', N'2a470fc0c3954d9dbb61de6d80846549', N'异常页', N'/exception', N'layouts/RouteView', NULL, NULL, N'1', NULL, NULL, N'22', N'0', N'warning', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:23:19.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'c6cf95444d80435eb37b2f9db3971ae6', N'2a470fc0c3954d9dbb61de6d80846549', N'数据回执模拟', N'/demo/InterfaceTest', N'demo/InterfaceTest', NULL, NULL, N'1', NULL, NULL, N'6', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-02-19 16:02:23.0000000', N'admin', N'2019-02-21 16:25:45.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'cc50656cf9ca528e6f2150eba4714ad2', N'4875ebe289344e14844d8e3ea1edd73f', N'基础详情页', N'/profile/basic', N'demo/profile/basic/Index', NULL, NULL, N'1', NULL, NULL, N'1', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'd07a2c87a451434c99ab06296727ec4f', N'700b7f95165c46cc7a78bf227aa8fed3', N'JVM信息', N'/monitor/JvmInfo', N'modules/monitor/JvmInfo', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-01 23:07:48.0000000', N'admin', N'2019-04-02 11:37:16.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'd2bbf9ebca5a8fa2e227af97d2da7548', N'c65321e57b7949b7a975313220de0422', N'404', N'/exception/404', N'exception/404', NULL, NULL, N'1', NULL, NULL, N'2', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'', N'系统管理', N'/isystem', N'layouts/RouteView', NULL, NULL, N'0', NULL, NULL, N'15', N'0', N'setting', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:31:34.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'd86f58e7ab516d3bc6bfb1fe10585f97', N'717f6bee46f44a3897eca9abd6e2ec44', N'个人中心', N'/account/center', N'account/center/Index', NULL, NULL, N'1', NULL, NULL, N'1', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'de13e0f6328c069748de7399fcc1dbbd', N'fb07ca05a3e13674dbf6d3245956da2e', N'搜索列表(项目)', N'/list/search/project', N'demo/list/TableList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-02-12 14:01:40.0000000', N'admin', N'2019-02-12 14:14:18.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e08cb190ef230d5d4f03824198773950', N'5c8042bd6c601270b2bbd9b20bccc68b', N'系统通告', N'/isystem/annountCement', N'system/SysAnnouncementList', NULL, NULL, N'1', N'annountCement', NULL, N'1', N'0', N'', N'1', N'1', N'0', N'0', NULL, NULL, N'2019-01-02 17:23:01.0000000', N'admin', N'2021-03-16 18:00:58.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e1979bb53e9ea51cecc74d86fd9d2f64', N'2a470fc0c3954d9dbb61de6d80846549', N'PDF预览', N'/demo/jeroPdfView', N'demo/JeroPdfView', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-04-25 10:39:35.0000000', N'admin', N'2021-03-16 22:18:26.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e3c13679c73a4f829bcff2aba8fd68b1', N'2a470fc0c3954d9dbb61de6d80846549', N'表单页', N'/form', N'layouts/PageView', NULL, NULL, N'1', NULL, NULL, N'25', N'0', N'form', N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2021-03-16 22:23:54.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e41b69c57a941a3bbcce45032fe57605', N'', N'开发工具', N'/online', N'layouts/RouteView', NULL, NULL, N'0', NULL, NULL, N'18', N'0', N'cloud', N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-03-08 10:43:10.0000000', N'admin', N'2021-03-16 22:31:28.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e5973686ed495c379d829ea8b2881fc6', N'e3c13679c73a4f829bcff2aba8fd68b1', N'高级表单', N'/form/advanced-form', N'demo/form/advancedForm/AdvancedForm', NULL, NULL, N'1', NULL, NULL, N'3', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'e6bfd1fcabfd7942fdd05f076d1dad38', N'2a470fc0c3954d9dbb61de6d80846549', N'打印测试', N'/demo/PrintDemo', N'demo/PrintDemo', NULL, NULL, N'1', NULL, NULL, N'3', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-02-19 15:58:48.0000000', N'admin', N'2019-05-07 20:14:39.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'ebb9d82ea16ad864071158e0c449d186', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'分类字典', N'/isys/category', N'system/SysCategoryList', NULL, NULL, N'1', N'sys:category:list', N'1', N'5.2', N'0', NULL, N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-05-29 18:48:07.0000000', N'admin', N'2020-02-23 22:45:33.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'ec8d607d0156e198b11853760319c646', N'6e73eb3c26099c191bf03852ee1310a1', N'安全设置', N'/account/settings/security', N'account/settings/Security', NULL, NULL, N'1', N'SecuritySettings', NULL, NULL, NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-26 18:59:52.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'f0675b52d89100ee88472b6800754a08', N'1371830841603710977', N'统计报表', N'/report', N'layouts/RouteView', NULL, NULL, N'1', NULL, NULL, N'1', N'0', N'bar-chart', N'1', N'0', N'0', N'0', NULL, N'admin', N'2019-04-03 18:32:02.0000000', N'admin', N'2021-03-16 22:29:03.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'f1cb187abf927c88b89470d08615f5ac', N'd7d6e2e4e2934f2c9385a623fd98c6f3', N'数据字典', N'/isystem/dict', N'system/DictList', NULL, NULL, N'1', N'sys:dict:list', NULL, N'5', N'0', NULL, N'1', N'0', N'0', N'0', NULL, NULL, N'2018-12-28 13:54:43.0000000', N'admin', N'2020-02-23 22:45:25.0000000', N'0', N'0', N'1', N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'f23d9bfff4d9aa6b68569ba2cff38415', N'540a2936940846cb98114ffb0d145cb8', N'标准列表', N'/list/basic-list', N'demo/list/StandardList', NULL, NULL, N'1', NULL, NULL, N'6', NULL, NULL, N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-25 20:34:38.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'f780d0d3083d849ccbdb1b1baee4911d', N'5c8042bd6c601270b2bbd9b20bccc68b', N'模板管理', N'/modules/message/sysMessageTemplateList', N'modules/message/SysMessageTemplateList', NULL, NULL, N'1', NULL, NULL, N'1', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-09 11:50:31.0000000', N'admin', N'2019-04-12 10:16:34.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'fb07ca05a3e13674dbf6d3245956da2e', N'540a2936940846cb98114ffb0d145cb8', N'搜索列表', N'/list/search', N'demo/list/search/SearchLayout', NULL, N'/list/search/article', N'1', NULL, NULL, N'8', N'0', NULL, N'1', N'0', NULL, N'0', NULL, NULL, N'2018-12-25 20:34:38.0000000', N'admin', N'2019-02-12 15:09:13.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'fb367426764077dcf94640c843733985', N'2a470fc0c3954d9dbb61de6d80846549', N'一对多示例', N'/demo/jeroOrderMainList', N'demo/JeroOrderMainList', NULL, NULL, N'1', NULL, NULL, N'2', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2019-02-15 16:24:11.0000000', N'admin', N'2021-03-16 22:18:47.0000000', N'0', N'0', NULL, N'0') +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'fc810a2267dd183e4ef7c71cc60f4670', N'700b7f95165c46cc7a78bf227aa8fed3', N'请求追踪', N'/monitor/HttpTrace', N'modules/monitor/HttpTrace', NULL, NULL, N'1', NULL, NULL, N'4', N'0', NULL, N'1', N'1', NULL, N'0', NULL, N'admin', N'2019-04-02 09:46:19.0000000', N'admin', N'2019-04-02 11:37:27.0000000', N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'fedfbf4420536cacc0218557d263dfea', N'6e73eb3c26099c191bf03852ee1310a1', N'新消息通知', N'/account/settings/notification', N'account/settings/Notification', NULL, NULL, N'1', N'NotificationSettings', NULL, NULL, NULL, N'', N'1', N'1', NULL, NULL, NULL, NULL, N'2018-12-26 19:02:05.0000000', NULL, NULL, N'0', N'0', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383952003393466369', N'190c2b43bec6a5f7a4194a85db67d96a', N'角色添加', NULL, NULL, NULL, NULL, N'2', N'sys:role:add', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383952499906785282', N'190c2b43bec6a5f7a4194a85db67d96a', N'角色编辑', NULL, NULL, NULL, NULL, N'2', N'sys:role:edit', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383952680177971201', N'190c2b43bec6a5f7a4194a85db67d96a', N'角色删除', NULL, NULL, NULL, NULL, N'2', N'sys:role:del', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383952988471898113', N'45c966826eeff4c99b8f8ebfe74511fc', N'部门添加', NULL, NULL, NULL, NULL, N'2', N'sys:depart:add', N'1', N'1.00', N'0', NULL,N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953084483710977', N'45c966826eeff4c99b8f8ebfe74511fc', N'部门编辑', NULL, NULL, NULL, NULL, N'2', N'sys:depart:edit', N'1', N'1.00', N'0', NULL,N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953171704262657', N'45c966826eeff4c99b8f8ebfe74511fc', N'部门删除', NULL, NULL, NULL, NULL, N'2', N'sys:depart:del', N'1',N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL,N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953340499832833', N'f1cb187abf927c88b89470d08615f5ac', N'数据字典添加', NULL, NULL, NULL, NULL, N'2', N'sys:dict:add', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953594972450818', N'f1cb187abf927c88b89470d08615f5ac', N'数据字典编辑', NULL, NULL, NULL, NULL, N'2', N'sys:dict:edit', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953732851806210', N'f1cb187abf927c88b89470d08615f5ac', N'数据字典删除', NULL, NULL, NULL, NULL, N'2', N'sys:dict:del', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL,N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383953875781103617', N'ebb9d82ea16ad864071158e0c449d186', N'分类字典添加', NULL, NULL, NULL, NULL, N'2', N'sys:category:add', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL,N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383954065124569090', N'ebb9d82ea16ad864071158e0c449d186', N'分类字典编辑', NULL, NULL, NULL, NULL, N'2', N'sys:category:edit', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383954151342682114', N'ebb9d82ea16ad864071158e0c449d186', N'分类字典删除', NULL, NULL, NULL, NULL, N'2', N'sys:category:del', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383956546739056641', N'3f915b2769fc80648e92d04e84ca059d', N'用户删除', NULL, NULL, NULL, NULL, N'2', N'sys:user:sel', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383956678637334529', N'3f915b2769fc80648e92d04e84ca059d', N'用户导入', NULL, NULL, NULL, NULL, N'2', N'sys:user:import', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383956779212550146', N'3f915b2769fc80648e92d04e84ca059d', N'用户导出', NULL, NULL, NULL, NULL, N'2', N'sys:user:export', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383956904978755586', N'190c2b43bec6a5f7a4194a85db67d96a', N'角色导入', NULL, NULL, NULL, NULL, N'2', N'sys:role:import', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957016807288833', N'190c2b43bec6a5f7a4194a85db67d96a', N'角色导出', NULL, NULL, NULL, NULL, N'2', N'sys:role:export', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957130082856962', N'45c966826eeff4c99b8f8ebfe74511fc', N'部门导入', NULL, NULL, NULL, NULL, N'2', N'sys:depart:import', N'1', N'1.00', N'0', NULL,N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957217370517506', N'45c966826eeff4c99b8f8ebfe74511fc', N'部门导出', NULL, NULL, NULL, NULL, N'2', N'sys:depart:export', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957378981244930', N'f1cb187abf927c88b89470d08615f5ac', N'数据字典导入', NULL, NULL, NULL, NULL, N'2', N'sys:dict:import', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957508945948674', N'f1cb187abf927c88b89470d08615f5ac', N'数据字典导出', NULL, NULL, NULL, NULL, N'2', N'sys:dict:export', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957660913971202', N'ebb9d82ea16ad864071158e0c449d186', N'分类字典导入', NULL, NULL, NULL, NULL, N'2', N'sys:category:import', N'1', N'1.00', N'0', NULL,N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', NULL, NULL, N'0', N'0', N'1', N'0'); +GO + +INSERT INTO [dbo].[sys_permission] ([id], [parent_id], [name], [url], [component], [component_name], [redirect], [menu_type], [perms], [perms_type], [sort_no], [always_show], [icon], [is_route], [is_leaf], [keep_alive], [hidden], [description], [create_by], [create_time], [update_by], [update_time], [del_flag], [rule_flag], [status], [internal_or_external]) VALUES (N'1383957793466560514', N'ebb9d82ea16ad864071158e0c449d186', N'分类字典导出', NULL, NULL, NULL, NULL, N'2', N'sys:category:export', N'1', N'1.00', N'0', NULL, N'1', N'1', N'0', N'0', NULL, N'admin', N'2021-04-19 09:14:05', N'admin', N'2021-04-19 09:14:05', N'0', N'0', N'1', N'0'); +GO + + +-- ---------------------------- +-- Table structure for sys_permission_data_rule +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_permission_data_rule]') AND type IN ('U')) + DROP TABLE [dbo].[sys_permission_data_rule] +GO + +CREATE TABLE [dbo].[sys_permission_data_rule] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [permission_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_column] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_conditions] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rule_value] nvarchar(300) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] nvarchar(3) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_permission_data_rule] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'菜单ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'permission_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'rule_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'字段', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'rule_column' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'条件', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'rule_conditions' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'规则值', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'rule_value' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限有效状态1有0否', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'sys_permission_data_rule', +'COLUMN', N'update_by' +GO + + +-- ---------------------------- +-- Records of sys_permission_data_rule +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_quartz_job +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_quartz_job]') AND type IN ('U')) + DROP TABLE [dbo].[sys_quartz_job] +GO + +CREATE TABLE [dbo].[sys_quartz_job] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [del_flag] int NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [job_class_name] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [cron_expression] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [parameter] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] int NULL +) +GO + +ALTER TABLE [dbo].[sys_quartz_job] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改人', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'修改时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'任务类名', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'job_class_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'cron表达式', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'cron_expression' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'参数', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'parameter' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态 0正常 -1停止', +'SCHEMA', N'dbo', +'TABLE', N'sys_quartz_job', +'COLUMN', N'status' +GO + + +-- ---------------------------- +-- Records of sys_quartz_job +-- ---------------------------- +INSERT INTO [dbo].[sys_quartz_job] ([id], [create_by], [create_time], [del_flag], [update_by], [update_time], [job_class_name], [cron_expression], [parameter], [description], [status]) VALUES (N'a253cdfc811d69fa0efc70d052bc8128', N'admin', N'2019-03-30 12:44:48.0000000', N'0', N'admin', N'2021-03-16 16:47:05.0000000', N'com.jero.modules.quartz.job.SampleJob', N'0/1 * * * * ?', NULL, N'Demo', N'-1') +GO + +INSERT INTO [dbo].[sys_quartz_job] ([id], [create_by], [create_time], [del_flag], [update_by], [update_time], [job_class_name], [cron_expression], [parameter], [description], [status]) VALUES (N'df26ecacf0f75d219d746750fe84bbee', NULL, NULL, N'0', N'admin', N'2021-03-16 16:47:23.0000000', N'com.jero.modules.quartz.job.SampleParamJob', N'0/1 * * * * ?', N'scott', N'Demo-带参测试,后台将每隔1秒执行输出日志', N'-1') +GO + + +-- ---------------------------- +-- Table structure for sys_role +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_role]') AND type IN ('U')) + DROP TABLE [dbo].[sys_role] +GO + +CREATE TABLE [dbo].[sys_role] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [role_name] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [role_code] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [description] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_role] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'role_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'role_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'description' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_role', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色表', +'SCHEMA', N'dbo', +'TABLE', N'sys_role' +GO + + +-- ---------------------------- +-- Records of sys_role +-- ---------------------------- +INSERT INTO [dbo].[sys_role] ([id], [role_name], [role_code], [description], [create_by], [create_time], [update_by], [update_time]) VALUES (N'f6817f48af4fb3af11b9e8bf182f618b', N'开发管理员', N'admin', N'开发人员使用的最高管理员', NULL, N'2018-12-21 18:03:39.0000000', N'admin', N'2021-03-16 13:55:05.0000000') +GO + + +-- ---------------------------- +-- Table structure for sys_role_permission +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_role_permission]') AND type IN ('U')) + DROP TABLE [dbo].[sys_role_permission] +GO + +CREATE TABLE [dbo].[sys_role_permission] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [role_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [permission_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [data_rule_ids] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [operate_date] datetime2(7) NULL, + [operate_ip] nvarchar(20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_role_permission] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色id', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission', +'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'权限id', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission', +'COLUMN', N'permission_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'数据权限ids', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission', +'COLUMN', N'data_rule_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission', +'COLUMN', N'operate_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'操作ip', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission', +'COLUMN', N'operate_ip' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色权限表', +'SCHEMA', N'dbo', +'TABLE', N'sys_role_permission' +GO + + +-- ---------------------------- +-- Records of sys_role_permission +-- ---------------------------- +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'00b82058779cca5106fbb84783534c9b', N'f6817f48af4fb3af11b9e8bf182f618b', N'4148ec82b6acd69f470bea75fe41c357', N'', NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0254c0b25694ad5479e6d6935bbc176e', N'f6817f48af4fb3af11b9e8bf182f618b', N'944abf0a8fc22fe1f1154a389a574154', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'09bd4fc30ffe88c4a44ed3868f442719', N'f6817f48af4fb3af11b9e8bf182f618b', N'e6bfd1fcabfd7942fdd05f076d1dad38', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0c2d2db76ee3aa81a4fe0925b0f31365', N'f6817f48af4fb3af11b9e8bf182f618b', N'024f1fd1283dc632458976463d8984e1', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0c6b8facbb1cc874964c87a8cf01e4b1', N'f6817f48af4fb3af11b9e8bf182f618b', N'841057b8a1bef8f6b4b20f9a618a7fa6', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0c6e1075e422972083c3e854d9af7851', N'f6817f48af4fb3af11b9e8bf182f618b', N'08e6b9dc3c04489c8e1ff2ce6f105aa4', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0e1469997af2d3b97fff56a59ee29eeb', N'f6817f48af4fb3af11b9e8bf182f618b', N'e41b69c57a941a3bbcce45032fe57605', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'0f861cb988fdc639bb1ab943471f3a72', N'f6817f48af4fb3af11b9e8bf182f618b', N'97c8629abc7848eccdb6d77c24bb3ebb', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1185039870537576450', N'f6817f48af4fb3af11b9e8bf182f618b', N'1166535831146504193', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1197431682208206850', N'f6817f48af4fb3af11b9e8bf182f618b', N'1192318987661234177', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1197795315916271617', N'f6817f48af4fb3af11b9e8bf182f618b', N'109c78a583d4693ce2f16551b7786786', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1209423530518761473', N'f6817f48af4fb3af11b9e8bf182f618b', N'1205097455226462210', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1209423530594258945', N'f6817f48af4fb3af11b9e8bf182f618b', N'1205098241075453953', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1209423530606841858', N'f6817f48af4fb3af11b9e8bf182f618b', N'1205306106780364802', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1209423580355481602', N'f6817f48af4fb3af11b9e8bf182f618b', N'190c2b43bec6a5f7a4194a85db67d96a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1231590078632955905', N'f6817f48af4fb3af11b9e8bf182f618b', N'1224641973866467330', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1231590078658121729', N'f6817f48af4fb3af11b9e8bf182f618b', N'1209731624921534465', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1260928399955836929', N'f6817f48af4fb3af11b9e8bf182f618b', N'1260928341675982849', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1269526122208522241', N'f6817f48af4fb3af11b9e8bf182f618b', N'1267412134208319489', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'126ea9faebeec2b914d6d9bef957afb6', N'f6817f48af4fb3af11b9e8bf182f618b', N'f1cb187abf927c88b89470d08615f5ac', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1281494164924653569', N'f6817f48af4fb3af11b9e8bf182f618b', N'1280350452934307841', NULL, N'2020-07-10 15:43:13.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1281494164945625089', N'f6817f48af4fb3af11b9e8bf182f618b', N'1280464606292099074', NULL, N'2020-07-10 15:43:13.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1281494684632473602', N'f6817f48af4fb3af11b9e8bf182f618b', N'1265162119913824258', NULL, N'2020-07-10 15:45:16.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080082485250', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287715272999944193', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080103456769', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287715783966834689', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080116039682', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287716451494510593', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080124428290', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287718919049691137', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080128622593', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287718938179911682', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1303585080141205506', N'f6817f48af4fb3af11b9e8bf182f618b', N'1287718956957810689', NULL, N'2020-09-09 14:44:37.0000000', N'127.0.0.1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1335960787783098369', N'f6817f48af4fb3af11b9e8bf182f618b', N'1335960713267093506', NULL, N'2020-12-07 22:54:07.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624661061633', N'f6817f48af4fb3af11b9e8bf182f618b', N'1371831353354936322', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624677838849', N'f6817f48af4fb3af11b9e8bf182f618b', N'1260929666434318338', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624677838850', N'f6817f48af4fb3af11b9e8bf182f618b', N'1260931366557696001', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624677838851', N'f6817f48af4fb3af11b9e8bf182f618b', N'1260933542969458689', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624677838852', N'f6817f48af4fb3af11b9e8bf182f618b', N'1a0811914300741f4e11838ff37a1d3a', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624677838853', N'f6817f48af4fb3af11b9e8bf182f618b', N'1371830841603710977', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1371832624686227457', N'f6817f48af4fb3af11b9e8bf182f618b', N'277bfabef7d76e89b33062b16a9a5020', NULL, N'2021-03-16 22:36:00.0000000', N'0:0:0:0:0:0:0:1') +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'154edd0599bd1dc2c7de220b489cd1e2', N'f6817f48af4fb3af11b9e8bf182f618b', N'7ac9eb9ccbde2f7a033cd4944272bf1e', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'165acd6046a0eaf975099f46a3c898ea', N'f6817f48af4fb3af11b9e8bf182f618b', N'4f66409ef3bbd69c1d80469d6e2a885e', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1664b92dff13e1575e3a929caa2fa14d', N'f6817f48af4fb3af11b9e8bf182f618b', N'd2bbf9ebca5a8fa2e227af97d2da7548', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1c1dbba68ef1817e7fb19c822d2854e8', N'f6817f48af4fb3af11b9e8bf182f618b', N'fb367426764077dcf94640c843733985', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'1e47db875601fd97723254046b5bba90', N'f6817f48af4fb3af11b9e8bf182f618b', N'baf16b7174bd821b6bab23fa9abb200d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'20e53c87a785688bdc0a5bb6de394ef1', N'f6817f48af4fb3af11b9e8bf182f618b', N'540a2936940846cb98114ffb0d145cb8', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'25491ecbd5a9b34f09c8bc447a10ede1', N'f6817f48af4fb3af11b9e8bf182f618b', N'd07a2c87a451434c99ab06296727ec4f', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'2779cdea8367fff37db26a42c1a1f531', N'f6817f48af4fb3af11b9e8bf182f618b', N'fef097f3903caf3a3c3a6efa8de43fbb', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'29fb6b0ad59a7e911c8d27e0bdc42d23', N'f6817f48af4fb3af11b9e8bf182f618b', N'9a90363f216a6a08f32eecb3f0bf12a3', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'2ad37346c1b83ddeebc008f6987b2227', N'f6817f48af4fb3af11b9e8bf182f618b', N'8d1ebd663688965f1fd86a2f0ead3416', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'38a2e55db0960262800576e34b3af44c', N'f6817f48af4fb3af11b9e8bf182f618b', N'5c2f42277948043026b7a14692456828', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'3b1886f727ac503c93fecdd06dcb9622', N'f6817f48af4fb3af11b9e8bf182f618b', N'c431130c0bc0ec71b0a5be37747bb36a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'3de2a60c7e42a521fecf6fcc5cb54978', N'f6817f48af4fb3af11b9e8bf182f618b', N'2d83d62bd2544b8994c8f38cf17b0ddf', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'3e4e38f748b8d87178dd62082e5b7b60', N'f6817f48af4fb3af11b9e8bf182f618b', N'7960961b0063228937da5fa8dd73d371', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'3f1d04075e3c3254666a4138106a4e51', N'f6817f48af4fb3af11b9e8bf182f618b', N'3fac0d3c9cd40fa53ab70d4c583821f8', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'4204f91fb61911ba8ce40afa7c02369f', N'f6817f48af4fb3af11b9e8bf182f618b', N'3f915b2769fc80648e92d04e84ca059d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'444126230885d5d38b8fa6072c9f43f8', N'f6817f48af4fb3af11b9e8bf182f618b', N'f780d0d3083d849ccbdb1b1baee4911d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'445656dd187bd8a71605f4bbab1938a3', N'f6817f48af4fb3af11b9e8bf182f618b', N'020b06793e4de2eee0007f603000c769', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'455cdb482457f529b79b479a2ff74427', N'f6817f48af4fb3af11b9e8bf182f618b', N'e1979bb53e9ea51cecc74d86fd9d2f64', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'45a358bb738782d1a0edbf7485e81459', N'f6817f48af4fb3af11b9e8bf182f618b', N'0ac2ad938963b6c6d1af25477d5b8b51', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'4dab5a06acc8ef3297889872caa74747', N'f6817f48af4fb3af11b9e8bf182f618b', N'ffb423d25cc59dcd0532213c4a518261', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'4e0a37ed49524df5f08fc6593aee875c', N'f6817f48af4fb3af11b9e8bf182f618b', N'f23d9bfff4d9aa6b68569ba2cff38415', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'4ea403fc1d19feb871c8bdd9f94a4ecc', N'f6817f48af4fb3af11b9e8bf182f618b', N'2e42e3835c2b44ec9f7bc26c146ee531', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'4f254549d9498f06f4cc9b23f3e2c070', N'f6817f48af4fb3af11b9e8bf182f618b', N'93d5cfb4448f11e9916698e7f462b4b6', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'504e326de3f03562cdd186748b48a8c7', N'f6817f48af4fb3af11b9e8bf182f618b', N'027aee69baee98a0ed2e01806e89c891', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'520b5989e6fe4a302a573d4fee12a40a', N'f6817f48af4fb3af11b9e8bf182f618b', N'6531cf3421b1265aeeeabaab5e176e6d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'54fdf85e52807bdb32ce450814abc256', N'f6817f48af4fb3af11b9e8bf182f618b', N'cc50656cf9ca528e6f2150eba4714ad2', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'5d230e6cd2935c4117f6cb9a7a749e39', N'f6817f48af4fb3af11b9e8bf182f618b', N'fc810a2267dd183e4ef7c71cc60f4670', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'5de6871fadb4fe1cdd28989da0126b07', N'f6817f48af4fb3af11b9e8bf182f618b', N'a400e4f4d54f79bf5ce160a3432231af', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'5e4015a9a641cbf3fb5d28d9f885d81a', N'f6817f48af4fb3af11b9e8bf182f618b', N'2dbbafa22cda07fa5d169d741b81fe12', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'60eda4b4db138bdb47edbe8e10e71675', N'f6817f48af4fb3af11b9e8bf182f618b', N'fb07ca05a3e13674dbf6d3245956da2e', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'61835e48f3e675f7d3f5c9dd3a10dcf3', N'f6817f48af4fb3af11b9e8bf182f618b', N'f0675b52d89100ee88472b6800754a08', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'660fbc40bcb1044738f7cabdf1708c28', N'f6817f48af4fb3af11b9e8bf182f618b', N'b3c824fc22bd953e2eb16ae6914ac8f9', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'66b202f8f84fe766176b3f51071836ef', N'f6817f48af4fb3af11b9e8bf182f618b', N'1367a93f2c410b169faa7abcbad2f77c', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'6c74518eb6bb9a353f6a6c459c77e64b', N'f6817f48af4fb3af11b9e8bf182f618b', N'b4dfc7d5dd9e8d5b6dd6d4579b1aa559', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'6daddafacd7eccb91309530c17c5855d', N'f6817f48af4fb3af11b9e8bf182f618b', N'edfa74d66e8ea63ea432c2910837b150', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'6fb4c2142498dd6d5b6c014ef985cb66', N'f6817f48af4fb3af11b9e8bf182f618b', N'6e73eb3c26099c191bf03852ee1310a1', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'7413acf23b56c906aedb5a36fb75bd3a', N'f6817f48af4fb3af11b9e8bf182f618b', N'a4fc7b64b01a224da066bb16230f9c5a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'76a54a8cc609754360bf9f57e7dbb2db', N'f6817f48af4fb3af11b9e8bf182f618b', N'c65321e57b7949b7a975313220de0422', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'7ca833caa5eac837b7200d8b6de8b2e3', N'f6817f48af4fb3af11b9e8bf182f618b', N'fedfbf4420536cacc0218557d263dfea', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'84eac2f113c23737128fb099d1d1da89', N'f6817f48af4fb3af11b9e8bf182f618b', N'03dc3d93261dda19fc86dd7ca486c6cf', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'86060e2867a5049d8a80d9fe5d8bc28b', N'f6817f48af4fb3af11b9e8bf182f618b', N'765dd244f37b804e3d00f475fd56149b', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'884f147c20e003cc80ed5b7efa598cbe', N'f6817f48af4fb3af11b9e8bf182f618b', N'e5973686ed495c379d829ea8b2881fc6', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'8b09925bdc194ab7f3559cd3a7ea0507', N'f6817f48af4fb3af11b9e8bf182f618b', N'ebb9d82ea16ad864071158e0c449d186', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'8d154c2382a8ae5c8d1b84bd38df2a93', N'f6817f48af4fb3af11b9e8bf182f618b', N'd86f58e7ab516d3bc6bfb1fe10585f97', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'8dd64f65a1014196078d0882f767cd85', N'f6817f48af4fb3af11b9e8bf182f618b', N'e3c13679c73a4f829bcff2aba8fd68b1', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'8e3dc1671abad4f3c83883b194d2e05a', N'f6817f48af4fb3af11b9e8bf182f618b', N'b1cb0a3fedf7ed0e4653cb5a229837ee', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'905bf419332ebcb83863603b3ebe30f0', N'f6817f48af4fb3af11b9e8bf182f618b', N'8fb8172747a78756c11916216b8b8066', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'9380121ca9cfee4b372194630fce150e', N'f6817f48af4fb3af11b9e8bf182f618b', N'65a8f489f25a345836b7f44b1181197a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'94911fef73a590f6824105ebf9b6cab3', N'f6817f48af4fb3af11b9e8bf182f618b', N'8b3bff2eee6f1939147f5c68292a1642', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'9700d20dbc1ae3cbf7de1c810b521fe6', N'f6817f48af4fb3af11b9e8bf182f618b', N'ec8d607d0156e198b11853760319c646', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'980171fda43adfe24840959b1d048d4d', N'f6817f48af4fb3af11b9e8bf182f618b', N'd7d6e2e4e2934f2c9385a623fd98c6f3', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'987c23b70873bd1d6dca52f30aafd8c2', N'f6817f48af4fb3af11b9e8bf182f618b', N'00a2a0ae65cdca5e93209cdbde97cbe6', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'9b2ad767f9861e64a20b097538feafd3', N'f6817f48af4fb3af11b9e8bf182f618b', N'73678f9daa45ed17a3674131b03432fb', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'9d980ec0489040e631a9c24a6af42934', N'f6817f48af4fb3af11b9e8bf182f618b', N'05b3c82ddb2536a4a5ee1a4c46b5abef', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'a034ed7c38c996b880d3e78f586fe0ae', N'f6817f48af4fb3af11b9e8bf182f618b', N'c89018ea6286e852b424466fd92a2ffc', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'a307a9349ad64a2eff8ab69582fa9be4', N'f6817f48af4fb3af11b9e8bf182f618b', N'0620e402857b8c5b605e1ad9f4b89350', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'a5d25fdb3c62904a8474182706ce11a0', N'f6817f48af4fb3af11b9e8bf182f618b', N'418964ba087b90a84897b62474496b93', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'acacce4417e5d7f96a9c3be2ded5b4be', N'f6817f48af4fb3af11b9e8bf182f618b', N'f9d3f4f27653a71c52faa9fb8070fbe7', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ae1852fb349d8513eb3fdc173da3ee56', N'f6817f48af4fb3af11b9e8bf182f618b', N'8d4683aacaa997ab86b966b464360338', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'af60ac8fafd807ed6b6b354613b9ccbc', N'f6817f48af4fb3af11b9e8bf182f618b', N'58857ff846e61794c69208e9d3a85466', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'b0c8a20800b8bf1ebdd7be473bceb44f', N'f6817f48af4fb3af11b9e8bf182f618b', N'58b9204feaf07e47284ddb36cd2d8468', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'b128ebe78fa5abb54a3a82c6689bdca3', N'f6817f48af4fb3af11b9e8bf182f618b', N'aedbf679b5773c1f25e9f7b10111da73', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'b21b07951bb547b09cc85624a841aea0', N'f6817f48af4fb3af11b9e8bf182f618b', N'4356a1a67b564f0988a484f5531fd4d9', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'b64c4ab9cd9a2ea8ac1e9db5fb7cf522', N'f6817f48af4fb3af11b9e8bf182f618b', N'2aeddae571695cd6380f6d6d334d6e7d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'bbec16ad016efec9ea2def38f4d3d9dc', N'f6817f48af4fb3af11b9e8bf182f618b', N'13212d3416eb690c2e1d5033166ff47a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'bea2986432079d89203da888d99b3f16', N'f6817f48af4fb3af11b9e8bf182f618b', N'54dd5457a3190740005c1bfec55b1c34', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c56fb1658ee5f7476380786bf5905399', N'f6817f48af4fb3af11b9e8bf182f618b', N'de13e0f6328c069748de7399fcc1dbbd', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c6fee38d293b9d0596436a0cbd205070', N'f6817f48af4fb3af11b9e8bf182f618b', N'4f84f9400e5e92c95f05b554724c2b58', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'c90b0b01c7ca454d2a1cb7408563e696', N'f6817f48af4fb3af11b9e8bf182f618b', N'882a73768cfd7f78f3a37584f7299656', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'cf1feb1bf69eafc982295ad6c9c8d698', N'f6817f48af4fb3af11b9e8bf182f618b', N'a2b11669e98c5fe54a53c3e3c4f35d14', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'cf2ef620217673e4042f695743294f01', N'f6817f48af4fb3af11b9e8bf182f618b', N'717f6bee46f44a3897eca9abd6e2ec44', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'cf43895aef7fc684669483ab00ef2257', N'f6817f48af4fb3af11b9e8bf182f618b', N'700b7f95165c46cc7a78bf227aa8fed3', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'd281a95b8f293d0fa2a136f46c4e0b10', N'f6817f48af4fb3af11b9e8bf182f618b', N'5c8042bd6c601270b2bbd9b20bccc68b', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'd37ad568e26f46ed0feca227aa9c2ffa', N'f6817f48af4fb3af11b9e8bf182f618b', N'9502685863ab87f0ad1134142788a385', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'd3ddcacee1acdfaa0810618b74e38ef2', N'f6817f48af4fb3af11b9e8bf182f618b', N'c6cf95444d80435eb37b2f9db3971ae6', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'd83282192a69514cfe6161b3087ff962', N'f6817f48af4fb3af11b9e8bf182f618b', N'53a9230444d33de28aa11cc108fb1dba', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'd8a5c9079df12090e108e21be94b4fd7', N'f6817f48af4fb3af11b9e8bf182f618b', N'078f9558cdeab239aecb2bda1a8ed0d1', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'dc83bb13c0e8c930e79d28b2db26f01f', N'f6817f48af4fb3af11b9e8bf182f618b', N'63b551e81c5956d5c861593d366d8c57', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'dc8fd3f79bd85bd832608b42167a1c71', N'f6817f48af4fb3af11b9e8bf182f618b', N'91c23960fab49335831cf43d820b0a61', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'de82e89b8b60a3ea99be5348f565c240', N'f6817f48af4fb3af11b9e8bf182f618b', N'56ca78fe0f22d815fabc793461af67b8', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'e7467726ee72235baaeb47df04a35e73', N'f6817f48af4fb3af11b9e8bf182f618b', N'e08cb190ef230d5d4f03824198773950', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'eaef4486f1c9b0408580bbfa2037eb66', N'f6817f48af4fb3af11b9e8bf182f618b', N'2a470fc0c3954d9dbb61de6d80846549', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ec4bc97829ab56afd83f428b6dc37ff6', N'f6817f48af4fb3af11b9e8bf182f618b', N'200006f0edf145a2b50eacca07585451', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ec846a3f85fdb6813e515be71f11b331', N'f6817f48af4fb3af11b9e8bf182f618b', N'732d48f8e0abe99fe6a23d18a3171cd1', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ec93bb06f5be4c1f19522ca78180e2ef', N'f6817f48af4fb3af11b9e8bf182f618b', N'265de841c58907954b8877fb85212622', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ecdd72fe694e6bba9c1d9fc925ee79de', N'f6817f48af4fb3af11b9e8bf182f618b', N'45c966826eeff4c99b8f8ebfe74511fc', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'edefd8d468f5727db465cf1b860af474', N'f6817f48af4fb3af11b9e8bf182f618b', N'6ad53fd1b220989a8b71ff482d683a5a', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'ef8bdd20d29447681ec91d3603e80c7b', N'f6817f48af4fb3af11b9e8bf182f618b', N'ae4fed059f67086fd52a73d913cf473d', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'f177acac0276329dc66af0c9ad30558a', N'f6817f48af4fb3af11b9e8bf182f618b', N'c2c356bf4ddd29975347a7047a062440', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'f99f99cc3bc27220cdd4f5aced33b7d7', N'f6817f48af4fb3af11b9e8bf182f618b', N'655563cd64b75dcf52ef7bcdd4836953', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'fafe73c4448b977fe42880a6750c3ee8', N'f6817f48af4fb3af11b9e8bf182f618b', N'9cb91b8851db0cf7b19d7ecc2a8193dd', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'fced905c7598973b970d42d833f73474', N'f6817f48af4fb3af11b9e8bf182f618b', N'4875ebe289344e14844d8e3ea1edd73f', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[sys_role_permission] ([id], [role_id], [permission_id], [data_rule_ids], [operate_date], [operate_ip]) VALUES (N'fd97963dc5f144d3aecfc7045a883427', N'f6817f48af4fb3af11b9e8bf182f618b', N'043780fa095ff1b2bec4dc406d76f023', NULL, NULL, NULL) +GO + + +-- ---------------------------- +-- Table structure for sys_sms +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_sms]') AND type IN ('U')) + DROP TABLE [dbo].[sys_sms] +GO + +CREATE TABLE [dbo].[sys_sms] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [es_title] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_type] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_receiver] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_param] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_content] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_send_time] datetime2(7) NULL, + [es_send_status] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [es_send_num] int NULL, + [es_result] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [remark] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL +) +GO + +ALTER TABLE [dbo].[sys_sms] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'消息标题', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_title' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发送方式:1短信 2邮件 3微信', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'接收人', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_receiver' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发送所需参数Json格式', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_param' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'推送内容', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'推送时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_send_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'推送状态 0未推送 1推送成功 2推送失败 -1失败不再发送', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_send_status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'发送次数 超过5次不再发送', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_send_num' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'推送失败原因', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'es_result' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'备注', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'remark' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms', +'COLUMN', N'update_time' +GO + + +-- ---------------------------- +-- Records of sys_sms +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_sms_template +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_sms_template]') AND type IN ('U')) + DROP TABLE [dbo].[sys_sms_template] +GO + +CREATE TABLE [dbo].[sys_sms_template] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [template_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [template_code] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [template_type] nvarchar(1) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [template_content] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [template_test_json] nvarchar(1000) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_sms_template] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'模板标题', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'template_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'模板CODE', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'template_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'模板类型:1短信 2邮件 3微信', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'template_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'模板内容', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'template_content' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'模板测试json', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'template_test_json' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_sms_template', +'COLUMN', N'update_by' +GO + + +-- ---------------------------- +-- Records of sys_sms_template +-- ---------------------------- +INSERT INTO [dbo].[sys_sms_template] ([id], [template_name], [template_code], [template_type], [template_content], [template_test_json], [create_time], [create_by], [update_time], [update_by]) VALUES (N'1199606397416775681', N'系统消息通知-Demo', N'sys_ts_note', N'4', N'

    系统通知

+
    +
  • 通知时间:  ${ts_date}
  • +
  • 通知内容:  ${ts_content}
  • +
', NULL, N'2019-11-27 16:30:27.0000000', N'admin', N'2021-03-16 16:56:36.0000000', N'admin') +GO + +INSERT INTO [dbo].[sys_sms_template] ([id], [template_name], [template_code], [template_type], [template_content], [template_test_json], [create_time], [create_by], [update_time], [update_by]) VALUES (N'1199648914107625473', N'流程办理超时提醒-Demo', N'bpm_chaoshi_tip', N'4', N'

   流程办理超时提醒

+
    +
  •    超时提醒信息:    您有待处理的超时任务,请尽快处理!
  • +
  •    超时任务标题:    ${title}
  • +
  •    超时任务节点:    ${task}
  • +
  •    任务处理人:       ${user}
  • +
  •    任务开始时间:    ${time}
  • +
', NULL, N'2019-11-27 19:19:24.0000000', N'admin', N'2021-03-16 16:56:20.0000000', N'admin') +GO + +INSERT INTO [dbo].[sys_sms_template] ([id], [template_name], [template_code], [template_type], [template_content], [template_test_json], [create_time], [create_by], [update_time], [update_by]) VALUES (N'4028608164691b000164693108140003', N'催办:${taskName}-Demo', N'SYS001', N'3', N'${userName},您好! +请前待办任务办理事项!${taskName} + + +=========================== +此消息由系统发出', N'{ +"taskName":"HR审批", +"userName":"admin" +}', N'2018-07-05 14:46:18.0000000', N'admin', N'2021-03-16 16:57:00.0000000', N'admin') +GO + + +-- ---------------------------- +-- Table structure for sys_tenant +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_tenant]') AND type IN ('U')) + DROP TABLE [dbo].[sys_tenant] +GO + +CREATE TABLE [dbo].[sys_tenant] ( + [id] int NOT NULL, + [name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [create_by] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [begin_date] datetime2(7) NULL, + [end_date] datetime2(7) NULL, + [status] int NULL +) +GO + +ALTER TABLE [dbo].[sys_tenant] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'租户编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'租户名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'开始时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'begin_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'结束时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'end_date' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态 1正常 0冻结', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'多租户信息表', +'SCHEMA', N'dbo', +'TABLE', N'sys_tenant' +GO + + +-- ---------------------------- +-- Records of sys_tenant +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_third_account +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_third_account]') AND type IN ('U')) + DROP TABLE [dbo].[sys_third_account] +GO + +CREATE TABLE [dbo].[sys_third_account] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [sys_user_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [third_type] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [avatar] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] tinyint NULL, + [del_flag] tinyint NULL, + [realname] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [third_user_uuid] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_third_account] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'编号', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'第三方登录id', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'sys_user_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'登录来源', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'third_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'头像', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'avatar' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态(1-正常,2-冻结)', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态(0-正常,1-已删除)', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'真实姓名', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'realname' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'第三方账号', +'SCHEMA', N'dbo', +'TABLE', N'sys_third_account', +'COLUMN', N'third_user_uuid' +GO + + +-- ---------------------------- +-- Records of sys_third_account +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_user]') AND type IN ('U')) + DROP TABLE [dbo].[sys_user] +GO + +CREATE TABLE [dbo].[sys_user] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [username] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [realname] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [password] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [salt] nvarchar(45) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [avatar] nvarchar(255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [birthday] datetime2(7) NULL, + [sex] tinyint NULL, + [email] nvarchar(45) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [phone] nvarchar(45) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [org_code] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [status] tinyint NULL, + [del_flag] tinyint NULL, + [third_id] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [third_type] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [activiti_sync] tinyint NULL, + [work_no] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [telephone] nvarchar(45) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [user_identity] tinyint NULL, + [depart_ids] nvarchar(max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [rel_tenant_ids] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [client_id] nvarchar(64) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_user] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'登录账号', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'username' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'真实姓名', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'realname' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'密码', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'password' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'md5密码盐', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'salt' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'头像', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'avatar' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'生日', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'birthday' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'性别(0-默认未知,1-男,2-女)', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'电子邮件', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'email' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'电话', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'phone' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'机构编码', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'org_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'性别(1-正常,2-冻结)', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'删除状态(0-正常,1-已删除)', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'del_flag' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'第三方登录的唯一标识', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'third_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'第三方类型', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'third_type' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'同步工作流引擎(1-同步,0-不同步)', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'activiti_sync' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'工号,唯一键', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'work_no' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'座机号', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'telephone' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'身份(1普通成员 2上级)', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'user_identity' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'负责部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'depart_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'多租户标识', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'rel_tenant_ids' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'设备ID', +'SCHEMA', N'dbo', +'TABLE', N'sys_user', +'COLUMN', N'client_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户表', +'SCHEMA', N'dbo', +'TABLE', N'sys_user' +GO + + +-- ---------------------------- +-- Records of sys_user +-- ---------------------------- +INSERT INTO [dbo].[sys_user] ([id], [username], [realname], [password], [salt], [avatar], [birthday], [sex], [email], [phone], [org_code], [status], [del_flag], [third_id], [third_type], [activiti_sync], [work_no], [telephone], [create_by], [create_time], [update_by], [update_time], [user_identity], [depart_ids], [rel_tenant_ids], [client_id]) VALUES (N'e9ca23d68d884d4ebb19d07889727dae', N'admin', N'开发管理员', N'cb362cfeefbf3d8d', N'RCGTeGiH', NULL, N'2018-12-05 00:00:00.0000000', N'1', N'lixuetao@syxysoft.com', N'18608732661', N'A01', N'1', N'0', NULL, NULL, N'1', N'00001', NULL, NULL, N'2019-06-21 17:54:10.0000000', N'admin', N'2021-03-16 18:00:16.0000000', N'2', N'c6d7cb4deeac411cb3384b1b31278596', N'', NULL) +GO + + +-- ---------------------------- +-- Table structure for sys_user_agent +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_user_agent]') AND type IN ('U')) + DROP TABLE [dbo].[sys_user_agent] +GO + +CREATE TABLE [dbo].[sys_user_agent] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [user_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [agent_user_name] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [start_time] datetime2(7) NULL, + [end_time] datetime2(7) NULL, + [status] nvarchar(2) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_name] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [sys_org_code] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [sys_company_code] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_user_agent] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'序号', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户名', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'user_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'代理人用户名', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'agent_user_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'代理开始时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'start_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'代理结束时间', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'end_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'状态0无效1有效', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'status' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'create_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'update_name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属部门', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'sys_org_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'所属公司', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent', +'COLUMN', N'sys_company_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户代理人设置', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_agent' +GO + + +-- ---------------------------- +-- Records of sys_user_agent +-- ---------------------------- + +-- ---------------------------- +-- Table structure for sys_user_depart +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_user_depart]') AND type IN ('U')) + DROP TABLE [dbo].[sys_user_depart] +GO + +CREATE TABLE [dbo].[sys_user_depart] ( + [ID] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [user_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [dep_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_user_depart] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_depart', +'COLUMN', N'ID' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_depart', +'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'部门id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_depart', +'COLUMN', N'dep_id' +GO + + +-- ---------------------------- +-- Records of sys_user_depart +-- ---------------------------- +INSERT INTO [dbo].[sys_user_depart] ([ID], [user_id], [dep_id]) VALUES (N'1371763232992583682', N'e9ca23d68d884d4ebb19d07889727dae', N'c6d7cb4deeac411cb3384b1b31278596') +GO + + +-- ---------------------------- +-- Table structure for sys_user_role +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sys_user_role]') AND type IN ('U')) + DROP TABLE [dbo].[sys_user_role] +GO + +CREATE TABLE [dbo].[sys_user_role] ( + [id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [user_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [role_id] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[sys_user_role] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_role', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_role', +'COLUMN', N'user_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'角色id', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_role', +'COLUMN', N'role_id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户角色表', +'SCHEMA', N'dbo', +'TABLE', N'sys_user_role' +GO + + +-- ---------------------------- +-- Records of sys_user_role +-- ---------------------------- +INSERT INTO [dbo].[sys_user_role] ([id], [user_id], [role_id]) VALUES (N'1371763232468295682', N'e9ca23d68d884d4ebb19d07889727dae', N'f6817f48af4fb3af11b9e8bf182f618b') +GO + + +-- ---------------------------- +-- Table structure for test_demo +-- ---------------------------- +IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[test_demo]') AND type IN ('U')) + DROP TABLE [dbo].[test_demo] +GO + +CREATE TABLE [dbo].[test_demo] ( + [id] nvarchar(36) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, + [create_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [create_time] datetime2(7) NULL, + [update_by] nvarchar(50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [update_time] datetime2(7) NULL, + [name] nvarchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [sex] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [age] int NULL, + [descc] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [birthday] datetime2(7) NULL, + [user_code] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [file_kk] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [top_pic] nvarchar(500) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [chegnshi] nvarchar(300) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [ceck] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [xiamuti] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [search_sel] nvarchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, + [pop] nvarchar(32) COLLATE SQL_Latin1_General_CP1_CI_AS NULL +) +GO + +ALTER TABLE [dbo].[test_demo] SET (LOCK_ESCALATION = TABLE) +GO + +EXEC sp_addextendedproperty +'MS_Description', N'主键', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'id' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'create_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'创建日期', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'create_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新人登录名称', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'update_by' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'更新日期', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'update_time' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户名', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'name' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'性别', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'sex' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'年龄', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'age' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'描述', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'descc' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'生日', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'birthday' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'用户编码', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'user_code' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'附件', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'file_kk' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'头像', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'top_pic' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'城市', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'chegnshi' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'checkbox', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'ceck' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'下拉多选', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'xiamuti' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'搜索下拉', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'search_sel' +GO + +EXEC sp_addextendedproperty +'MS_Description', N'弹窗', +'SCHEMA', N'dbo', +'TABLE', N'test_demo', +'COLUMN', N'pop' +GO + + +-- ---------------------------- +-- Records of test_demo +-- ---------------------------- +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'1331884149004910593', N'admin', N'2020-11-26 16:55:01.0000000', NULL, NULL, N'张三', N'1', NULL, NULL, NULL, NULL, N'', N'', N'130304', NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'1331901553776869377', N'admin', N'2020-11-26 18:04:10.0000000', N'admin', N'2020-11-26 18:04:24.0000000', N'张三', N'2', NULL, N'', NULL, N'', N'', N'', N'', N'1', N'1,2', N'hr', N'') +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'1335522992002248706', N'admin', N'2020-12-06 17:54:28.0000000', NULL, NULL, N'333', NULL, NULL, NULL, NULL, NULL, N'Javagongzuoliuxuqiu-20200703_1607248465493.docx', N'jerocloudweifuwujiagoutu-fuben_1607248465493.png', NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'1335523137875947522', N'admin', N'2020-12-06 17:55:03.0000000', NULL, NULL, N'张三66778888', NULL, NULL, NULL, NULL, NULL, N'Javagongzuoliuxuqiu-20200703_1607248489440.docx', N'jerocloudweifuwujiagoutu-fuben_1607248485629.png,jero_cloud_project_ref_1607248495491.png', NULL, N'2', NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'4028810c6aed99e1016aed9b31b40002', NULL, NULL, N'admin', N'2019-10-19 15:37:27.0000000', N'jero', N'2', N'55', N'5', N'2019-05-15 00:00:00.0000000', NULL, N'', N'', NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'4028810c6b02cba2016b02cba21f0000', N'admin', N'2019-05-29 16:53:48.0000000', N'admin', N'2019-08-23 23:45:21.0000000', N'张小红', N'1', N'8222', N'8', N'2019-04-01 00:00:00.0000000', NULL, N'', N'', NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'4028810c6b40244b016b4030a0e40001', N'admin', N'2019-06-10 15:00:57.0000000', N'admin', N'2020-05-03 01:28:34.0000000', N'小芳', N'2', N'0', NULL, N'2019-04-01 00:00:00.0000000', NULL, N'', N'11_1582482670686.jpg', NULL, NULL, NULL, NULL, NULL) +GO + +INSERT INTO [dbo].[test_demo] ([id], [create_by], [create_time], [update_by], [update_time], [name], [sex], [age], [descc], [birthday], [user_code], [file_kk], [top_pic], [chegnshi], [ceck], [xiamuti], [search_sel], [pop]) VALUES (N'fa1d1c249461498d90f405b94f60aae0', N'', NULL, N'admin', N'2019-05-15 12:30:28.0000000', N'战三', N'2', N'222', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) +GO + + +-- ---------------------------- +-- Primary Key structure for table demo +-- ---------------------------- +ALTER TABLE [dbo].[demo] ADD CONSTRAINT [PK__demo__3213E83F0C1C9E6E] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table jero_order_customer +-- ---------------------------- +ALTER TABLE [dbo].[jero_order_customer] ADD CONSTRAINT [PK__jero_or__3213E83F6A4BE210] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table jero_order_main +-- ---------------------------- +ALTER TABLE [dbo].[jero_order_main] ADD CONSTRAINT [PK__jero_or__3213E83F76300DC2] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table jero_order_ticket +-- ---------------------------- +ALTER TABLE [dbo].[jero_order_ticket] ADD CONSTRAINT [PK__jero_or__3213E83FEE844B2F] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_auth_data +-- ---------------------------- +ALTER TABLE [dbo].[onl_auth_data] ADD CONSTRAINT [PK__onl_auth__3213E83F4445AD09] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_auth_page +-- ---------------------------- +ALTER TABLE [dbo].[onl_auth_page] ADD CONSTRAINT [PK__onl_auth__3213E83FD3EEDFFB] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_auth_relation +-- ---------------------------- +ALTER TABLE [dbo].[onl_auth_relation] ADD CONSTRAINT [PK__onl_auth__3213E83F430BD9C0] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_button +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_formid] +ON [dbo].[onl_cgform_button] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_button_code] +ON [dbo].[onl_cgform_button] ( + [BUTTON_CODE] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_button_status] +ON [dbo].[onl_cgform_button] ( + [BUTTON_STATUS] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_button_order] +ON [dbo].[onl_cgform_button] ( + [ORDER_NUM] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocb_CGFORM_HEAD_ID] +ON [dbo].[onl_cgform_button] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocb_BUTTON_CODE] +ON [dbo].[onl_cgform_button] ( + [BUTTON_CODE] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocb_BUTTON_STATUS] +ON [dbo].[onl_cgform_button] ( + [BUTTON_STATUS] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocb_ORDER_NUM] +ON [dbo].[onl_cgform_button] ( + [ORDER_NUM] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_button +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_button] ADD CONSTRAINT [PK__onl_cgfo__3214EC27C20A8933] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_enhance_java +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_fmid] +ON [dbo].[onl_cgform_enhance_java] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_buttoncode] +ON [dbo].[onl_cgform_enhance_java] ( + [BUTTON_CODE] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_status] +ON [dbo].[onl_cgform_enhance_java] ( + [ACTIVE_STATUS] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ejava_cgform_head_id] +ON [dbo].[onl_cgform_enhance_java] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocej_BUTTON_CODE] +ON [dbo].[onl_cgform_enhance_java] ( + [BUTTON_CODE] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocej_ACTIVE_STATUS] +ON [dbo].[onl_cgform_enhance_java] ( + [ACTIVE_STATUS] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_enhance_java +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_enhance_java] ADD CONSTRAINT [PK__onl_cgfo__3214EC27D3001FF6] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_enhance_js +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_fmid] +ON [dbo].[onl_cgform_enhance_js] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_jstype] +ON [dbo].[onl_cgform_enhance_js] ( + [CG_JS_TYPE] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ejs_cgform_head_id] +ON [dbo].[onl_cgform_enhance_js] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ejs_cg_js_type] +ON [dbo].[onl_cgform_enhance_js] ( + [CG_JS_TYPE] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_enhance_js +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_enhance_js] ADD CONSTRAINT [PK__onl_cgfo__3214EC2738DBF3D3] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_enhance_sql +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_formid] +ON [dbo].[onl_cgform_enhance_sql] ( + [CGFORM_HEAD_ID] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_oces_CGFORM_HEAD_ID] +ON [dbo].[onl_cgform_enhance_sql] ( + [CGFORM_HEAD_ID] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_enhance_sql +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_enhance_sql] ADD CONSTRAINT [PK__onl_cgfo__3214EC27882C12C9] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_field +-- ---------------------------- +CREATE NONCLUSTERED INDEX [inex_table_id] +ON [dbo].[onl_cgform_field] ( + [cgform_head_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocf_cgform_head_id] +ON [dbo].[onl_cgform_field] ( + [cgform_head_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_field +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_field] ADD CONSTRAINT [PK__onl_cgfo__3213E83FBC56A0FF] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_head +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_onlineform_table_name] +ON [dbo].[onl_cgform_head] ( + [table_name] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_form_templdate] +ON [dbo].[onl_cgform_head] ( + [form_template] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_templdate_mobile] +ON [dbo].[onl_cgform_head] ( + [form_template_mobile] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_onlineform_table_version] +ON [dbo].[onl_cgform_head] ( + [table_version] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_och_cgform_head_id] +ON [dbo].[onl_cgform_head] ( + [table_name] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_och_table_name] +ON [dbo].[onl_cgform_head] ( + [form_template] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_och_form_template_mobile] +ON [dbo].[onl_cgform_head] ( + [form_template_mobile] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_och_table_version] +ON [dbo].[onl_cgform_head] ( + [table_version] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_head +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_head] ADD CONSTRAINT [PK__onl_cgfo__3213E83F1F74FCBC] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgform_index +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_table_id] +ON [dbo].[onl_cgform_index] ( + [cgform_head_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_oci_cgform_head_id] +ON [dbo].[onl_cgform_index] ( + [cgform_head_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgform_index +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgform_index] ADD CONSTRAINT [PK__onl_cgfo__3213E83F7872576F] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgreport_head +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_onlinereport_code] +ON [dbo].[onl_cgreport_head] ( + [code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_och_code] +ON [dbo].[onl_cgreport_head] ( + [code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgreport_head +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgreport_head] ADD CONSTRAINT [PK__onl_cgre__3213E83FD82C7EC4] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgreport_item +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_CGRHEAD_ID] +ON [dbo].[onl_cgreport_item] ( + [cgrhead_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_isshow] +ON [dbo].[onl_cgreport_item] ( + [is_show] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_order_num] +ON [dbo].[onl_cgreport_item] ( + [order_num] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_oci_cgrhead_id] +ON [dbo].[onl_cgreport_item] ( + [cgrhead_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_oci_is_show] +ON [dbo].[onl_cgreport_item] ( + [is_show] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_oci_order_num] +ON [dbo].[onl_cgreport_item] ( + [order_num] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgreport_item +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgreport_item] ADD CONSTRAINT [PK__onl_cgre__3213E83FDB9A9C1D] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table onl_cgreport_param +-- ---------------------------- +CREATE NONCLUSTERED INDEX [idx_cgrheadid] +ON [dbo].[onl_cgreport_param] ( + [cgrhead_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ocp_cgrhead_id] +ON [dbo].[onl_cgreport_param] ( + [cgrhead_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table onl_cgreport_param +-- ---------------------------- +ALTER TABLE [dbo].[onl_cgreport_param] ADD CONSTRAINT [PK__onl_cgre__3213E83F3451466A] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table oss_file +-- ---------------------------- +ALTER TABLE [dbo].[oss_file] ADD CONSTRAINT [PK__oss_file__3213E83F8493BFC5] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_CALENDARS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_CALENDARS] ADD CONSTRAINT [PK_QRTZ_CALENDARS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [CALENDAR_NAME]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_CRON_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD CONSTRAINT [PK_QRTZ_CRON_TRIGGERS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_FIRED_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_FIRED_TRIGGERS] ADD CONSTRAINT [PK_QRTZ_FIRED_TRIGGERS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [ENTRY_ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_JOB_DETAILS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_JOB_DETAILS] ADD CONSTRAINT [PK_QRTZ_JOB_DETAILS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [JOB_NAME], [JOB_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_LOCKS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_LOCKS] ADD CONSTRAINT [PK_QRTZ_LOCKS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [LOCK_NAME]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_PAUSED_TRIGGER_GRPS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_PAUSED_TRIGGER_GRPS] ADD CONSTRAINT [PK_QRTZ_PAUSED_TRIGGER_GRPS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [TRIGGER_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SCHEDULER_STATE +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_SCHEDULER_STATE] ADD CONSTRAINT [PK_QRTZ_SCHEDULER_STATE] PRIMARY KEY CLUSTERED ([SCHED_NAME], [INSTANCE_NAME]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD CONSTRAINT [PK_QRTZ_SIMPLE_TRIGGERS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD CONSTRAINT [PK_QRTZ_SIMPROP_TRIGGERS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table QRTZ_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD CONSTRAINT [PK_QRTZ_TRIGGERS] PRIMARY KEY CLUSTERED ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_announcement +-- ---------------------------- +ALTER TABLE [dbo].[sys_announcement] ADD CONSTRAINT [PK__sys_anno__3213E83FB38A6E7B] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_category +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_code] +ON [dbo].[sys_category] ( + [code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sc_code] +ON [dbo].[sys_category] ( + [code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_category +-- ---------------------------- +ALTER TABLE [dbo].[sys_category] ADD CONSTRAINT [PK__sys_cate__3213E83FFA6DB462] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_check_rule +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uni_sys_check_rule_code] +ON [dbo].[sys_check_rule] ( + [rule_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_scr_rule_code] +ON [dbo].[sys_check_rule] ( + [rule_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_check_rule +-- ---------------------------- +ALTER TABLE [dbo].[sys_check_rule] ADD CONSTRAINT [PK__sys_chec__3213E83F36137584] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_data_log +-- ---------------------------- +CREATE NONCLUSTERED INDEX [sindex] +ON [dbo].[sys_data_log] ( + [data_table] ASC, + [data_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdl_data_table_id] +ON [dbo].[sys_data_log] ( + [data_table] ASC, + [data_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_data_log +-- ---------------------------- +ALTER TABLE [dbo].[sys_data_log] ADD CONSTRAINT [PK__sys_data__3213E83F2FE0546C] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_data_source +-- ---------------------------- +CREATE NONCLUSTERED INDEX [sys_data_source_code_uni] +ON [dbo].[sys_data_source] ( + [code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_sdc_rule_code] +ON [dbo].[sys_data_source] ( + [code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_data_source +-- ---------------------------- +ALTER TABLE [dbo].[sys_data_source] ADD CONSTRAINT [PK__sys_data__3213E83F83EA109D] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_depart +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uniq_depart_org_code] +ON [dbo].[sys_depart] ( + [org_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_depart_parent_id] +ON [dbo].[sys_depart] ( + [parent_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_depart_depart_order] +ON [dbo].[sys_depart] ( + [depart_order] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_depart_org_code] +ON [dbo].[sys_depart] ( + [org_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sd_parent_id] +ON [dbo].[sys_depart] ( + [parent_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sd_depart_order] +ON [dbo].[sys_depart] ( + [depart_order] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sd_org_code] +ON [dbo].[sys_depart] ( + [org_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_depart +-- ---------------------------- +ALTER TABLE [dbo].[sys_depart] ADD CONSTRAINT [PK__sys_depa__3213E83F03E49A86] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_depart_permission +-- ---------------------------- +ALTER TABLE [dbo].[sys_depart_permission] ADD CONSTRAINT [PK__sys_depa__3213E83FAE0168C1] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_depart_role +-- ---------------------------- +ALTER TABLE [dbo].[sys_depart_role] ADD CONSTRAINT [PK__sys_depa__3213E83FD3FE48EB] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_depart_role_permission +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_group_role_per_id] +ON [dbo].[sys_depart_role_permission] ( + [role_id] ASC, + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_group_role_id] +ON [dbo].[sys_depart_role_permission] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_group_per_id] +ON [dbo].[sys_depart_role_permission] ( + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdrp_role_per_id] +ON [dbo].[sys_depart_role_permission] ( + [role_id] ASC, + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdrp_role_id] +ON [dbo].[sys_depart_role_permission] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdrp_per_id] +ON [dbo].[sys_depart_role_permission] ( + [permission_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_depart_role_permission +-- ---------------------------- +ALTER TABLE [dbo].[sys_depart_role_permission] ADD CONSTRAINT [PK__sys_depa__3213E83F1D8B962B] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_depart_role_user +-- ---------------------------- +ALTER TABLE [dbo].[sys_depart_role_user] ADD CONSTRAINT [PK__sys_depa__3213E83FA05CDB64] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_dict +-- ---------------------------- +CREATE NONCLUSTERED INDEX [indextable_dict_code] +ON [dbo].[sys_dict] ( + [dict_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_sd_dict_code] +ON [dbo].[sys_dict] ( + [dict_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_dict +-- ---------------------------- +ALTER TABLE [dbo].[sys_dict] ADD CONSTRAINT [PK__sys_dict__3213E83F515C481C] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_dict_item +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_table_dict_id] +ON [dbo].[sys_dict_item] ( + [dict_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_table_sort_order] +ON [dbo].[sys_dict_item] ( + [sort_order] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_table_dict_status] +ON [dbo].[sys_dict_item] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdi_role_dict_id] +ON [dbo].[sys_dict_item] ( + [dict_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdi_role_sort_order] +ON [dbo].[sys_dict_item] ( + [sort_order] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdi_status] +ON [dbo].[sys_dict_item] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sdi_dict_val] +ON [dbo].[sys_dict_item] ( + [dict_id] ASC, + [item_value] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_dict_item +-- ---------------------------- +ALTER TABLE [dbo].[sys_dict_item] ADD CONSTRAINT [PK__sys_dict__3213E83F93F7A848] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_fill_rule +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uni_sys_fill_rule_code] +ON [dbo].[sys_fill_rule] ( + [rule_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_sfr_rule_code] +ON [dbo].[sys_fill_rule] ( + [rule_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_fill_rule +-- ---------------------------- +ALTER TABLE [dbo].[sys_fill_rule] ADD CONSTRAINT [PK__sys_fill__3213E83F42339EB4] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_gateway_route +-- ---------------------------- +ALTER TABLE [dbo].[sys_gateway_route] ADD CONSTRAINT [PK__sys_gate__3213E83F1C70877C] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_log +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_table_userid] +ON [dbo].[sys_log] ( + [userid] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_logt_ype] +ON [dbo].[sys_log] ( + [log_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_operate_type] +ON [dbo].[sys_log] ( + [operate_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_log_type] +ON [dbo].[sys_log] ( + [log_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sl_userid] +ON [dbo].[sys_log] ( + [userid] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sl_log_type] +ON [dbo].[sys_log] ( + [log_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sl_operate_type] +ON [dbo].[sys_log] ( + [operate_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sl_create_time] +ON [dbo].[sys_log] ( + [create_time] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_log +-- ---------------------------- +ALTER TABLE [dbo].[sys_log] ADD CONSTRAINT [PK__sys_log__3213E83F5CF1ADE3] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_permission +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_prem_pid] +ON [dbo].[sys_permission] ( + [parent_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_prem_is_route] +ON [dbo].[sys_permission] ( + [is_route] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_prem_is_leaf] +ON [dbo].[sys_permission] ( + [is_leaf] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_prem_sort_no] +ON [dbo].[sys_permission] ( + [sort_no] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_prem_del_flag] +ON [dbo].[sys_permission] ( + [del_flag] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_menu_type] +ON [dbo].[sys_permission] ( + [menu_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_menu_hidden] +ON [dbo].[sys_permission] ( + [hidden] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_menu_status] +ON [dbo].[sys_permission] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_parent_id] +ON [dbo].[sys_permission] ( + [parent_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_is_route] +ON [dbo].[sys_permission] ( + [is_route] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_is_leaf] +ON [dbo].[sys_permission] ( + [is_leaf] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_sort_no] +ON [dbo].[sys_permission] ( + [sort_no] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_del_flag] +ON [dbo].[sys_permission] ( + [del_flag] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_menu_type] +ON [dbo].[sys_permission] ( + [menu_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_hidden] +ON [dbo].[sys_permission] ( + [hidden] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sp_status] +ON [dbo].[sys_permission] ( + [status] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_permission +-- ---------------------------- +ALTER TABLE [dbo].[sys_permission] ADD CONSTRAINT [PK__sys_perm__3213E83F96711202] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_permission_data_rule +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_fucntionid] +ON [dbo].[sys_permission_data_rule] ( + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_spdr_permission_id] +ON [dbo].[sys_permission_data_rule] ( + [permission_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_permission_data_rule +-- ---------------------------- +ALTER TABLE [dbo].[sys_permission_data_rule] ADD CONSTRAINT [PK__sys_perm__3213E83F8057475D] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_quartz_job +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uniq_job_class_name] +ON [dbo].[sys_quartz_job] ( + [job_class_name] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_quartz_job +-- ---------------------------- +ALTER TABLE [dbo].[sys_quartz_job] ADD CONSTRAINT [PK__sys_quar__3213E83F7F61164A] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_role +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uniq_sys_role_role_code] +ON [dbo].[sys_role] ( + [role_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sr_role_code] +ON [dbo].[sys_role] ( + [role_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_role +-- ---------------------------- +ALTER TABLE [dbo].[sys_role] ADD CONSTRAINT [PK__sys_role__3213E83F79AA536A] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_role_permission +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_group_role_per_id] +ON [dbo].[sys_role_permission] ( + [role_id] ASC, + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_group_role_id] +ON [dbo].[sys_role_permission] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_group_per_id] +ON [dbo].[sys_role_permission] ( + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_srp_role_per_id] +ON [dbo].[sys_role_permission] ( + [role_id] ASC, + [permission_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_srp_role_id] +ON [dbo].[sys_role_permission] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_srp_permission_id] +ON [dbo].[sys_role_permission] ( + [permission_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_role_permission +-- ---------------------------- +ALTER TABLE [dbo].[sys_role_permission] ADD CONSTRAINT [PK__sys_role__3213E83F4F6AB5F2] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_sms +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_type] +ON [dbo].[sys_sms] ( + [es_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_receiver] +ON [dbo].[sys_sms] ( + [es_receiver] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_sendtime] +ON [dbo].[sys_sms] ( + [es_send_time] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_status] +ON [dbo].[sys_sms] ( + [es_send_status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ss_es_type] +ON [dbo].[sys_sms] ( + [es_type] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ss_es_receiver] +ON [dbo].[sys_sms] ( + [es_receiver] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ss_es_send_time] +ON [dbo].[sys_sms] ( + [es_send_time] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_ss_es_send_status] +ON [dbo].[sys_sms] ( + [es_send_status] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_sms +-- ---------------------------- +ALTER TABLE [dbo].[sys_sms] ADD CONSTRAINT [PK__sys_sms__3213E83FA1A05F81] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_sms_template +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uniq_templatecode] +ON [dbo].[sys_sms_template] ( + [template_code] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_sst_template_code] +ON [dbo].[sys_sms_template] ( + [template_code] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_sms_template +-- ---------------------------- +ALTER TABLE [dbo].[sys_sms_template] ADD CONSTRAINT [PK__sys_sms___3213E83F2AF11A98] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_tenant +-- ---------------------------- +ALTER TABLE [dbo].[sys_tenant] ADD CONSTRAINT [PK__sys_tena__3213E83F81327AE6] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_third_account +-- ---------------------------- +ALTER TABLE [dbo].[sys_third_account] ADD CONSTRAINT [PK__sys_thir__3213E83F27A1B40C] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_user +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_user_name] +ON [dbo].[sys_user] ( + [username] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uniq_sys_user_work_no] +ON [dbo].[sys_user] ( + [work_no] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uniq_sys_user_username] +ON [dbo].[sys_user] ( + [username] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uniq_sys_user_phone] +ON [dbo].[sys_user] ( + [phone] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uniq_sys_user_email] +ON [dbo].[sys_user] ( + [email] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_user_status] +ON [dbo].[sys_user] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_user_del_flag] +ON [dbo].[sys_user] ( + [del_flag] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_su_username] +ON [dbo].[sys_user] ( + [username] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_su_status] +ON [dbo].[sys_user] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_su_del_flag] +ON [dbo].[sys_user] ( + [del_flag] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_user +-- ---------------------------- +ALTER TABLE [dbo].[sys_user] ADD CONSTRAINT [PK__sys_user__3213E83F16F4CD9E] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_user_agent +-- ---------------------------- +CREATE NONCLUSTERED INDEX [uniq_username] +ON [dbo].[sys_user_agent] ( + [user_name] ASC +) +GO + +CREATE NONCLUSTERED INDEX [uk_sug_user_name] +ON [dbo].[sys_user_agent] ( + [user_name] ASC +) +GO + +CREATE NONCLUSTERED INDEX [statux_index] +ON [dbo].[sys_user_agent] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [begintime_index] +ON [dbo].[sys_user_agent] ( + [start_time] ASC +) +GO + +CREATE NONCLUSTERED INDEX [endtime_index] +ON [dbo].[sys_user_agent] ( + [end_time] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sug_status] +ON [dbo].[sys_user_agent] ( + [status] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sug_start_time] +ON [dbo].[sys_user_agent] ( + [start_time] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sug_end_time] +ON [dbo].[sys_user_agent] ( + [end_time] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_user_agent +-- ---------------------------- +ALTER TABLE [dbo].[sys_user_agent] ADD CONSTRAINT [PK__sys_user__3213E83F5DA02E6F] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_user_depart +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index_depart_groupk_userid] +ON [dbo].[sys_user_depart] ( + [user_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_depart_groupkorgid] +ON [dbo].[sys_user_depart] ( + [dep_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index_depart_groupk_uidanddid] +ON [dbo].[sys_user_depart] ( + [user_id] ASC, + [dep_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sud_user_id] +ON [dbo].[sys_user_depart] ( + [user_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sud_dep_id] +ON [dbo].[sys_user_depart] ( + [dep_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sud_user_dep_id] +ON [dbo].[sys_user_depart] ( + [user_id] ASC, + [dep_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_user_depart +-- ---------------------------- +ALTER TABLE [dbo].[sys_user_depart] ADD CONSTRAINT [PK__sys_user__3214EC27611D786D] PRIMARY KEY CLUSTERED ([ID]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Indexes structure for table sys_user_role +-- ---------------------------- +CREATE NONCLUSTERED INDEX [index2_groupuu_user_id] +ON [dbo].[sys_user_role] ( + [user_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index2_groupuu_ole_id] +ON [dbo].[sys_user_role] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [index2_groupuu_useridandroleid] +ON [dbo].[sys_user_role] ( + [user_id] ASC, + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sur_user_id] +ON [dbo].[sys_user_role] ( + [user_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sur_role_id] +ON [dbo].[sys_user_role] ( + [role_id] ASC +) +GO + +CREATE NONCLUSTERED INDEX [idx_sur_user_role_id] +ON [dbo].[sys_user_role] ( + [user_id] ASC, + [role_id] ASC +) +GO + + +-- ---------------------------- +-- Primary Key structure for table sys_user_role +-- ---------------------------- +ALTER TABLE [dbo].[sys_user_role] ADD CONSTRAINT [PK__sys_user__3213E83F1EFC0234] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Primary Key structure for table test_demo +-- ---------------------------- +ALTER TABLE [dbo].[test_demo] ADD CONSTRAINT [PK__test_dem__3213E83F60EEF18E] PRIMARY KEY CLUSTERED ([id]) +WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) +ON [PRIMARY] +GO + + +-- ---------------------------- +-- Foreign Keys structure for table QRTZ_CRON_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_CRON_TRIGGERS] ADD CONSTRAINT [FK_QRTZ_CRON_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) REFERENCES [dbo].[QRTZ_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) ON DELETE CASCADE ON UPDATE NO ACTION +GO + + +-- ---------------------------- +-- Foreign Keys structure for table QRTZ_SIMPLE_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_SIMPLE_TRIGGERS] ADD CONSTRAINT [FK_QRTZ_SIMPLE_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) REFERENCES [dbo].[QRTZ_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) ON DELETE CASCADE ON UPDATE NO ACTION +GO + + +-- ---------------------------- +-- Foreign Keys structure for table QRTZ_SIMPROP_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD CONSTRAINT [FK_QRTZ_SIMPROP_TRIGGERS_QRTZ_TRIGGERS] FOREIGN KEY ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) REFERENCES [dbo].[QRTZ_TRIGGERS] ([SCHED_NAME], [TRIGGER_NAME], [TRIGGER_GROUP]) ON DELETE CASCADE ON UPDATE NO ACTION +GO + + +-- ---------------------------- +-- Foreign Keys structure for table QRTZ_TRIGGERS +-- ---------------------------- +ALTER TABLE [dbo].[QRTZ_TRIGGERS] ADD CONSTRAINT [FK_QRTZ_TRIGGERS_QRTZ_JOB_DETAILS] FOREIGN KEY ([SCHED_NAME], [JOB_NAME], [JOB_GROUP]) REFERENCES [dbo].[QRTZ_JOB_DETAILS] ([SCHED_NAME], [JOB_NAME], [JOB_GROUP]) ON DELETE NO ACTION ON UPDATE NO ACTION +GO + diff --git a/db/tables_nacos.sql b/db/tables_nacos.sql new file mode 100644 index 00000000..f993261b --- /dev/null +++ b/db/tables_nacos.sql @@ -0,0 +1,265 @@ +CREATE database if NOT EXISTS `nacos` default character set utf8mb4 collate utf8mb4_unicode_ci; +use `nacos`; + +/* + Navicat Premium Data Transfer + + Source Server : mysql5.7 + Source Server Type : MySQL + Source Server Version : 50727 + Source Host : 127.0.0.1:3306 + Source Schema : nacos + + Target Server Type : MySQL + Target Server Version : 50727 + File Encoding : 65001 + + Date: 03/03/2021 13:10:08 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for config_info +-- ---------------------------- +DROP TABLE IF EXISTS `config_info`; +CREATE TABLE `config_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', + `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', + `c_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `c_use` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `effect` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `c_schema` text CHARACTER SET utf8 COLLATE utf8_bin NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_configinfo_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of config_info +-- ---------------------------- +INSERT INTO `config_info` VALUES (1, 'jero-dev.yaml', 'DEFAULT_GROUP', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\n # 连接池的配置信息\n # 初始化大小,最小,最大\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # 配置获取连接等待超时的时间\n maxWait: 60000\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\n timeBetweenEvictionRunsMillis: 60000\n # 配置一个连接在池中最小生存的时间,单位是毫秒\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # 打开PSCache,并且指定每个连接上PSCache的大小\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\n filters: stat,wall,slf4j\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jero-boot-mysql:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 多数据源配置\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis 配置\n redis:\n database: 0\n host: jero-boot-redis\n lettuce:\n pool:\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\n shutdown-timeout: 100ms\n password:\n port: 4780\n #rabbitmq配置\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #消费者的最小数量\n concurrency: 1\n #消费者的最大数量\n max-concurrency: 1\n #是否支持重试\n retry:\n enabled: true\n#jero专用配置\njero :\n # 本地:local\\Minio:minio\\阿里云:alioss\n uploadType: local\n path :\n #文件上传根目录 设置\n upload: D://opt//upFiles\n #webapp文件路径\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #阿里云oss存储配置\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeroos\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jero-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表单设计器配置\n desform:\n # 主题颜色(仅支持 16进制颜色代码)\n theme-color: \"#1890ff\"\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\n upload-type: system\n # 在线预览文件服务器地址配置\n file-view-domain: 127.0.0.1:8012\n # minio文件上传\n minio:\n minio_url: http://minio.jero.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屏报表参数设置\n jmreport:\n mode: dev\n #是否需要校验token\n is_verify_token: false\n #必须校验方法\n verify_methods: remove,delete,save,add,update\n #Wps在线文档\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-job配置\n xxljob:\n enabled: false\n adminAddresses: http://jero-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n logPath: logs/jero/job/jobhandler/\n logRetentionDays: 30\n #自定义路由配置 yml nacos database\n route:\n config:\n data-id: jero-gateway-router\n group: DEFAULT_GROUP\n data-type: yml\n #分布式锁配置\n redisson:\n address: jero-boot-redis:4780\n password:\n type: STANDALONE\n enabled: true\n#Mybatis输出sql日志\nlogging:\n level:\n org.jero.modules.system.mapper : info\n#cas单点登录\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n production: false\n basic:\n enable: false\n username: jero\n password: jero1314\n\n#第三方登录\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h', '80f58d32d99203d9b12db85c469b51b1', '2021-03-03 13:01:11', '2021-03-05 17:11:54', NULL, '172.17.0.1', '', '', '', '', '', 'yaml', ''); +INSERT INTO `config_info` VALUES (2, 'jero.yaml', 'DEFAULT_GROUP', 'server:\r\n tomcat:\r\n max-swallow-size: -1\r\n error:\r\n include-exception: true\r\n include-stacktrace: ALWAYS\r\n include-message: ALWAYS\r\n compression:\r\n enabled: true\r\n min-response-size: 1024\r\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\r\nmanagement:\r\n health:\r\n mail:\r\n enabled: false\r\n endpoints:\r\n web:\r\n exposure:\r\n include: \"*\" #暴露所有节点\r\n health:\r\n sensitive: true #关闭过滤敏感信息\r\n endpoint:\r\n health:\r\n show-details: ALWAYS #显示详细信息\r\nspring:\r\n servlet:\r\n multipart:\r\n max-file-size: 10MB\r\n max-request-size: 10MB\r\n mail:\r\n host: smtp.163.com\r\n username: jeroos@163.com\r\n password: ??\r\n properties:\r\n mail:\r\n smtp:\r\n auth: true\r\n starttls:\r\n enable: true\r\n required: true\r\n ## quartz定时任务,采用数据库方式\r\n quartz:\r\n job-store-type: jdbc\r\n initialize-schema: embedded\r\n #设置自动启动,默认为 true\r\n auto-startup: true\r\n #启动时更新己存在的Job\r\n overwrite-existing-jobs: true\r\n properties:\r\n org:\r\n quartz:\r\n scheduler:\r\n instanceName: MyScheduler\r\n instanceId: AUTO\r\n jobStore:\r\n class: org.quartz.impl.jdbcjobstore.JobStoreTX\r\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\r\n tablePrefix: QRTZ_\r\n isClustered: true\r\n misfireThreshold: 60000\r\n clusterCheckinInterval: 10000\r\n threadPool:\r\n class: org.quartz.simpl.SimpleThreadPool\r\n threadCount: 10\r\n threadPriority: 5\r\n threadsInheritContextClassLoaderOfInitializingThread: true\r\n #json 时间戳统一转换\r\n jackson:\r\n date-format: yyyy-MM-dd HH:mm:ss\r\n time-zone: GMT+8\r\n aop:\r\n proxy-target-class: true\r\n activiti:\r\n check-process-definitions: false\r\n #启用作业执行器\r\n async-executor-activate: false\r\n #启用异步执行器\r\n job-executor-activate: false\r\n jpa:\r\n open-in-view: false\r\n #配置freemarker\r\n freemarker:\r\n # 设置模板后缀名\r\n suffix: .ftl\r\n # 设置文档类型\r\n content-type: text/html\r\n # 设置页面编码格式\r\n charset: UTF-8\r\n # 设置页面缓存\r\n cache: false\r\n prefer-file-system-access: false\r\n # 设置ftl文件路径\r\n template-loader-path:\r\n - classpath:/templates\r\n # 设置静态文件路径,js,css等\r\n mvc:\r\n static-path-pattern: /**\r\n resource:\r\n static-locations: classpath:/static/,classpath:/public/\r\n autoconfigure:\r\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\r\n#mybatis plus 设置\r\nmybatis-plus:\r\n mapper-locations: classpath*:com.jero.modules.**/xml/*Mapper.xml\r\n global-config:\r\n # 关闭MP3.0自带的banner\r\n banner: false\r\n db-config:\r\n #主键类型 0:\"数据库ID自增\",1:\"该类型为未设置主键类型\", 2:\"用户输入ID\",3:\"全局唯一ID (数字类型唯一ID)\", 4:\"全局唯一ID UUID\",5:\"字符串全局唯一ID (idWorker 的字符串表示)\";\r\n id-type: ASSIGN_ID\r\n # 默认数据库表下划线命名\r\n table-underline: true\r\n configuration:\r\n # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用\r\n #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\r\n # 返回类型为Map,显示null对应的字段\r\n call-setters-on-nulls: true', 'd695ddf9b45ff9f8e009803c93650263', '2021-03-03 13:01:42', '2021-03-03 13:01:42', NULL, '172.17.0.1', '', '', NULL, NULL, NULL, 'yaml', NULL); +INSERT INTO `config_info` VALUES (3, 'jero-gateway-router.json', 'DEFAULT_GROUP', '[{\r\n \"id\": \"jero-system\",\r\n \"order\": 0,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/sys/**\",\r\n \"_genkey_1\": \"/eoa/**\",\r\n \"_genkey_2\": \"/joa/**\",\r\n \"_genkey_3\": \"/jmreport/**\",\r\n \"_genkey_4\": \"/bigscreen/**\",\r\n \"_genkey_5\": \"/desform/**\",\r\n \"_genkey_6\": \"/online/**\",\r\n \"_genkey_8\": \"/act/**\",\r\n \"_genkey_9\": \"/plug-in/**\",\r\n \"_genkey_10\": \"/generic/**\",\r\n \"_genkey_11\": \"/v1/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jero-system\"\r\n}, {\r\n \"id\": \"jero-demo\",\r\n \"order\": 1,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/mock/**\",\r\n \"_genkey_1\": \"/test/**\",\r\n \"_genkey_2\": \"/bigscreen/template1/**\",\r\n \"_genkey_3\": \"/bigscreen/template2/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jero-demo\"\r\n}, {\r\n \"id\": \"jero-system-websocket\",\r\n \"order\": 2,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/websocket/**\",\r\n \"_genkey_1\": \"/eoaSocket/**\",\r\n \"_genkey_2\": \"/newsWebsocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jero-system\"\r\n}, {\r\n \"id\": \"jero-demo-websocket\",\r\n \"order\": 3,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/vxeSocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jero-demo\"\r\n}]', '82f4033ef6a51ce2ab6ce505be1b729a', '2021-03-03 13:02:14', '2021-03-03 13:02:14', NULL, '172.17.0.1', '', '', NULL, NULL, NULL, 'json', NULL); + +-- ---------------------------- +-- Table structure for config_info_aggr +-- ---------------------------- +DROP TABLE IF EXISTS `config_info_aggr`; +CREATE TABLE `config_info_aggr` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', + `group_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', + `datum_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'datum_id', + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '内容', + `gmt_modified` datetime(0) NOT NULL COMMENT '修改时间', + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_configinfoaggr_datagrouptenantdatum`(`data_id`, `group_id`, `tenant_id`, `datum_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '增加租户字段' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for config_info_beta +-- ---------------------------- +DROP TABLE IF EXISTS `config_info_beta`; +CREATE TABLE `config_info_beta` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', + `beta_ips` varchar(1024) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'betaIps', + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_configinfobeta_datagrouptenant`(`data_id`, `group_id`, `tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_beta' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for config_info_tag +-- ---------------------------- +DROP TABLE IF EXISTS `config_info_tag`; +CREATE TABLE `config_info_tag` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', + `tag_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_id', + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'content', + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT 'source user', + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'source ip', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_configinfotag_datagrouptenanttag`(`data_id`, `group_id`, `tenant_id`, `tag_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_info_tag' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for config_tags_relation +-- ---------------------------- +DROP TABLE IF EXISTS `config_tags_relation`; +CREATE TABLE `config_tags_relation` ( + `id` bigint(20) NOT NULL COMMENT 'id', + `tag_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'tag_name', + `tag_type` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tag_type', + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'data_id', + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', + `nid` bigint(20) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`nid`) USING BTREE, + UNIQUE INDEX `uk_configtagrelation_configidtag`(`id`, `tag_name`, `tag_type`) USING BTREE, + INDEX `idx_tenant_id`(`tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'config_tag_relation' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for group_capacity +-- ---------------------------- +DROP TABLE IF EXISTS `group_capacity`; +CREATE TABLE `group_capacity` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', + `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值', + `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量', + `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数,,0表示使用默认值', + `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量', + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_group_id`(`group_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '集群、各Group容量信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for his_config_info +-- ---------------------------- +DROP TABLE IF EXISTS `his_config_info`; +CREATE TABLE `his_config_info` ( + `id` bigint(64) UNSIGNED NOT NULL, + `nid` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, + `data_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `group_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `app_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'app_name', + `content` longtext CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `md5` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00', + `src_user` text CHARACTER SET utf8 COLLATE utf8_bin NULL, + `src_ip` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `op_type` char(10) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL, + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`nid`) USING BTREE, + INDEX `idx_gmt_create`(`gmt_create`) USING BTREE, + INDEX `idx_gmt_modified`(`gmt_modified`) USING BTREE, + INDEX `idx_did`(`data_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '多租户改造' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of his_config_info +-- ---------------------------- +INSERT INTO `his_config_info` VALUES (0, 1, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n datasource:\r\n druid:\r\n stat-view-servlet:\r\n enabled: true\r\n loginUsername: admin\r\n loginPassword: 123456\r\n allow:\r\n web-stat-filter:\r\n enabled: true\r\n dynamic:\r\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\r\n # 连接池的配置信息\r\n # 初始化大小,最小,最大\r\n initial-size: 5\r\n min-idle: 5\r\n maxActive: 20\r\n # 配置获取连接等待超时的时间\r\n maxWait: 60000\r\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\r\n timeBetweenEvictionRunsMillis: 60000\r\n # 配置一个连接在池中最小生存的时间,单位是毫秒\r\n minEvictableIdleTimeMillis: 300000\r\n validationQuery: SELECT 1 FROM DUAL\r\n testWhileIdle: true\r\n testOnBorrow: false\r\n testOnReturn: false\r\n # 打开PSCache,并且指定每个连接上PSCache的大小\r\n poolPreparedStatements: true\r\n maxPoolPreparedStatementPerConnectionSize: 20\r\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\r\n filters: stat,wall,slf4j\r\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\r\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\r\n\r\n datasource:\r\n master:\r\n url: jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\r\n username: root\r\n password: root\r\n driver-class-name: com.mysql.cj.jdbc.Driver\r\n # 多数据源配置\r\n #multi-datasource1:\r\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\r\n #username: root\r\n #password: root\r\n #driver-class-name: com.mysql.cj.jdbc.Driver\r\n #redis 配置\r\n redis:\r\n database: 0\r\n host: 127.0.0.1\r\n lettuce:\r\n pool:\r\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\r\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\r\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\r\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\r\n shutdown-timeout: 100ms\r\n password:\r\n port: 4780\r\n #rabbitmq配置\r\n rabbitmq:\r\n host: 127.0.0.1\r\n username: guest\r\n password: guest\r\n port: 5672\r\n publisher-confirms: true\r\n publisher-returns: true\r\n virtual-host: /\r\n listener:\r\n simple:\r\n acknowledge-mode: manual\r\n #消费者的最小数量\r\n concurrency: 1\r\n #消费者的最大数量\r\n max-concurrency: 1\r\n #是否支持重试\r\n retry:\r\n enabled: true\r\n#jero专用配置\r\njero :\r\n # 本地:local\\Minio:minio\\阿里云:alioss\r\n uploadType: local\r\n path :\r\n #文件上传根目录 设置\r\n upload: D://opt//upFiles\r\n #webapp文件路径\r\n webapp: D://opt//webapp\r\n shiro:\r\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\r\n #阿里云oss存储配置\r\n oss:\r\n endpoint: oss-cn-beijing.aliyuncs.com\r\n accessKey: ??\r\n secretKey: ??\r\n bucketName: jeroos\r\n staticDomain: ??\r\n # ElasticSearch 6设置\r\n elasticsearch:\r\n cluster-name: jero-ES\r\n cluster-nodes: 127.0.0.1:9200\r\n check-enabled: false\r\n # 表单设计器配置\r\n desform:\r\n # 主题颜色(仅支持 16进制颜色代码)\r\n theme-color: \"#1890ff\"\r\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\r\n upload-type: system\r\n # 在线预览文件服务器地址配置\r\n file-view-domain: 127.0.0.1:8012\r\n # minio文件上传\r\n minio:\r\n minio_url: http://minio.jero.com\r\n minio_name: ??\r\n minio_pass: ??\r\n bucketName: otatest\r\n #大屏报表参数设置\r\n jmreport:\r\n mode: dev\r\n #是否需要校验token\r\n is_verify_token: false\r\n #必须校验方法\r\n verify_methods: remove,delete,save,add,update\r\n #Wps在线文档\r\n wps:\r\n domain: https://wwo.wps.cn/office/\r\n appid: ??\r\n appsecret: ??\r\n #xxl-job配置\r\n xxljob:\r\n enabled: false\r\n adminAddresses: http://127.0.0.1:9080/xxl-job-admin\r\n appname: ${spring.application.name}\r\n accessToken: \'\'\r\n address: 127.0.0.1:30007\r\n ip: 127.0.0.1\r\n port: 30007\r\n logPath: logs/jero/job/jobhandler/\r\n logRetentionDays: 30\r\n #自定义路由配置 yml nacos database\r\n route:\r\n config:\r\n data-id: jero-gateway-router\r\n group: DEFAULT_GROUP\r\n data-type: yml\r\n #分布式锁配置\r\n redisson:\r\n address: 127.0.0.1:4780\r\n password:\r\n type: STANDALONE\r\n enabled: true\r\n#Mybatis输出sql日志\r\nlogging:\r\n level:\r\n com.jero.modules.system.mapper : info\r\n#cas单点登录\r\ncas:\r\n prefixUrl: http://localhost:8888/cas\r\n#swagger\r\nknife4j:\r\n production: false\r\n basic:\r\n enable: false\r\n username: jero\r\n password: jero1314\r\n\r\n#第三方登录\r\njustauth:\r\n enabled: true\r\n type:\r\n GITHUB:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\r\n WECHAT_ENTERPRISE:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\r\n agent-id: 1000002\r\n DINGTALK:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\r\n cache:\r\n type: default\r\n prefix: \'demo::\'\r\n timeout: 1h', 'ee9e4d63cce2009104ccd100c8512c63', '2010-05-05 00:00:00', '2021-03-03 13:01:11', NULL, '172.17.0.1', 'I', ''); +INSERT INTO `his_config_info` VALUES (0, 2, 'jero.yaml', 'DEFAULT_GROUP', '', 'server:\r\n tomcat:\r\n max-swallow-size: -1\r\n error:\r\n include-exception: true\r\n include-stacktrace: ALWAYS\r\n include-message: ALWAYS\r\n compression:\r\n enabled: true\r\n min-response-size: 1024\r\n mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/*\r\nmanagement:\r\n health:\r\n mail:\r\n enabled: false\r\n endpoints:\r\n web:\r\n exposure:\r\n include: \"*\" #暴露所有节点\r\n health:\r\n sensitive: true #关闭过滤敏感信息\r\n endpoint:\r\n health:\r\n show-details: ALWAYS #显示详细信息\r\nspring:\r\n servlet:\r\n multipart:\r\n max-file-size: 10MB\r\n max-request-size: 10MB\r\n mail:\r\n host: smtp.163.com\r\n username: jeroos@163.com\r\n password: ??\r\n properties:\r\n mail:\r\n smtp:\r\n auth: true\r\n starttls:\r\n enable: true\r\n required: true\r\n ## quartz定时任务,采用数据库方式\r\n quartz:\r\n job-store-type: jdbc\r\n initialize-schema: embedded\r\n #设置自动启动,默认为 true\r\n auto-startup: true\r\n #启动时更新己存在的Job\r\n overwrite-existing-jobs: true\r\n properties:\r\n org:\r\n quartz:\r\n scheduler:\r\n instanceName: MyScheduler\r\n instanceId: AUTO\r\n jobStore:\r\n class: org.quartz.impl.jdbcjobstore.JobStoreTX\r\n driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate\r\n tablePrefix: QRTZ_\r\n isClustered: true\r\n misfireThreshold: 60000\r\n clusterCheckinInterval: 10000\r\n threadPool:\r\n class: org.quartz.simpl.SimpleThreadPool\r\n threadCount: 10\r\n threadPriority: 5\r\n threadsInheritContextClassLoaderOfInitializingThread: true\r\n #json 时间戳统一转换\r\n jackson:\r\n date-format: yyyy-MM-dd HH:mm:ss\r\n time-zone: GMT+8\r\n aop:\r\n proxy-target-class: true\r\n activiti:\r\n check-process-definitions: false\r\n #启用作业执行器\r\n async-executor-activate: false\r\n #启用异步执行器\r\n job-executor-activate: false\r\n jpa:\r\n open-in-view: false\r\n #配置freemarker\r\n freemarker:\r\n # 设置模板后缀名\r\n suffix: .ftl\r\n # 设置文档类型\r\n content-type: text/html\r\n # 设置页面编码格式\r\n charset: UTF-8\r\n # 设置页面缓存\r\n cache: false\r\n prefer-file-system-access: false\r\n # 设置ftl文件路径\r\n template-loader-path:\r\n - classpath:/templates\r\n # 设置静态文件路径,js,css等\r\n mvc:\r\n static-path-pattern: /**\r\n resource:\r\n static-locations: classpath:/static/,classpath:/public/\r\n autoconfigure:\r\n exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure\r\n#mybatis plus 设置\r\nmybatis-plus:\r\n mapper-locations: classpath*:com.jero.modules.**/xml/*Mapper.xml\r\n global-config:\r\n # 关闭MP3.0自带的banner\r\n banner: false\r\n db-config:\r\n #主键类型 0:\"数据库ID自增\",1:\"该类型为未设置主键类型\", 2:\"用户输入ID\",3:\"全局唯一ID (数字类型唯一ID)\", 4:\"全局唯一ID UUID\",5:\"字符串全局唯一ID (idWorker 的字符串表示)\";\r\n id-type: ASSIGN_ID\r\n # 默认数据库表下划线命名\r\n table-underline: true\r\n configuration:\r\n # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用\r\n #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl\r\n # 返回类型为Map,显示null对应的字段\r\n call-setters-on-nulls: true', 'd695ddf9b45ff9f8e009803c93650263', '2010-05-05 00:00:00', '2021-03-03 13:01:42', NULL, '172.17.0.1', 'I', ''); +INSERT INTO `his_config_info` VALUES (0, 3, 'jero-gateway-router.json', 'DEFAULT_GROUP', '', '[{\r\n \"id\": \"jero-system\",\r\n \"order\": 0,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/sys/**\",\r\n \"_genkey_1\": \"/eoa/**\",\r\n \"_genkey_2\": \"/joa/**\",\r\n \"_genkey_3\": \"/jmreport/**\",\r\n \"_genkey_4\": \"/bigscreen/**\",\r\n \"_genkey_5\": \"/desform/**\",\r\n \"_genkey_6\": \"/online/**\",\r\n \"_genkey_8\": \"/act/**\",\r\n \"_genkey_9\": \"/plug-in/**\",\r\n \"_genkey_10\": \"/generic/**\",\r\n \"_genkey_11\": \"/v1/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jero-system\"\r\n}, {\r\n \"id\": \"jero-demo\",\r\n \"order\": 1,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/mock/**\",\r\n \"_genkey_1\": \"/test/**\",\r\n \"_genkey_2\": \"/bigscreen/template1/**\",\r\n \"_genkey_3\": \"/bigscreen/template2/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb://jero-demo\"\r\n}, {\r\n \"id\": \"jero-system-websocket\",\r\n \"order\": 2,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/websocket/**\",\r\n \"_genkey_1\": \"/eoaSocket/**\",\r\n \"_genkey_2\": \"/newsWebsocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jero-system\"\r\n}, {\r\n \"id\": \"jero-demo-websocket\",\r\n \"order\": 3,\r\n \"predicates\": [{\r\n \"name\": \"Path\",\r\n \"args\": {\r\n \"_genkey_0\": \"/vxeSocket/**\"\r\n }\r\n }],\r\n \"filters\": [],\r\n \"uri\": \"lb:ws://jero-demo\"\r\n}]', '82f4033ef6a51ce2ab6ce505be1b729a', '2010-05-05 00:00:00', '2021-03-03 13:02:14', NULL, '172.17.0.1', 'I', ''); +INSERT INTO `his_config_info` VALUES (1, 4, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\r\n datasource:\r\n druid:\r\n stat-view-servlet:\r\n enabled: true\r\n loginUsername: admin\r\n loginPassword: 123456\r\n allow:\r\n web-stat-filter:\r\n enabled: true\r\n dynamic:\r\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\r\n # 连接池的配置信息\r\n # 初始化大小,最小,最大\r\n initial-size: 5\r\n min-idle: 5\r\n maxActive: 20\r\n # 配置获取连接等待超时的时间\r\n maxWait: 60000\r\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\r\n timeBetweenEvictionRunsMillis: 60000\r\n # 配置一个连接在池中最小生存的时间,单位是毫秒\r\n minEvictableIdleTimeMillis: 300000\r\n validationQuery: SELECT 1 FROM DUAL\r\n testWhileIdle: true\r\n testOnBorrow: false\r\n testOnReturn: false\r\n # 打开PSCache,并且指定每个连接上PSCache的大小\r\n poolPreparedStatements: true\r\n maxPoolPreparedStatementPerConnectionSize: 20\r\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\r\n filters: stat,wall,slf4j\r\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\r\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\r\n\r\n datasource:\r\n master:\r\n url: jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\r\n username: root\r\n password: root\r\n driver-class-name: com.mysql.cj.jdbc.Driver\r\n # 多数据源配置\r\n #multi-datasource1:\r\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\r\n #username: root\r\n #password: root\r\n #driver-class-name: com.mysql.cj.jdbc.Driver\r\n #redis 配置\r\n redis:\r\n database: 0\r\n host: 127.0.0.1\r\n lettuce:\r\n pool:\r\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\r\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\r\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\r\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\r\n shutdown-timeout: 100ms\r\n password:\r\n port: 4780\r\n #rabbitmq配置\r\n rabbitmq:\r\n host: 127.0.0.1\r\n username: guest\r\n password: guest\r\n port: 5672\r\n publisher-confirms: true\r\n publisher-returns: true\r\n virtual-host: /\r\n listener:\r\n simple:\r\n acknowledge-mode: manual\r\n #消费者的最小数量\r\n concurrency: 1\r\n #消费者的最大数量\r\n max-concurrency: 1\r\n #是否支持重试\r\n retry:\r\n enabled: true\r\n#jero专用配置\r\njero :\r\n # 本地:local\\Minio:minio\\阿里云:alioss\r\n uploadType: local\r\n path :\r\n #文件上传根目录 设置\r\n upload: D://opt//upFiles\r\n #webapp文件路径\r\n webapp: D://opt//webapp\r\n shiro:\r\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\r\n #阿里云oss存储配置\r\n oss:\r\n endpoint: oss-cn-beijing.aliyuncs.com\r\n accessKey: ??\r\n secretKey: ??\r\n bucketName: jeroos\r\n staticDomain: ??\r\n # ElasticSearch 6设置\r\n elasticsearch:\r\n cluster-name: jero-ES\r\n cluster-nodes: 127.0.0.1:9200\r\n check-enabled: false\r\n # 表单设计器配置\r\n desform:\r\n # 主题颜色(仅支持 16进制颜色代码)\r\n theme-color: \"#1890ff\"\r\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\r\n upload-type: system\r\n # 在线预览文件服务器地址配置\r\n file-view-domain: 127.0.0.1:8012\r\n # minio文件上传\r\n minio:\r\n minio_url: http://minio.jero.com\r\n minio_name: ??\r\n minio_pass: ??\r\n bucketName: otatest\r\n #大屏报表参数设置\r\n jmreport:\r\n mode: dev\r\n #是否需要校验token\r\n is_verify_token: false\r\n #必须校验方法\r\n verify_methods: remove,delete,save,add,update\r\n #Wps在线文档\r\n wps:\r\n domain: https://wwo.wps.cn/office/\r\n appid: ??\r\n appsecret: ??\r\n #xxl-job配置\r\n xxljob:\r\n enabled: false\r\n adminAddresses: http://127.0.0.1:9080/xxl-job-admin\r\n appname: ${spring.application.name}\r\n accessToken: \'\'\r\n address: 127.0.0.1:30007\r\n ip: 127.0.0.1\r\n port: 30007\r\n logPath: logs/jero/job/jobhandler/\r\n logRetentionDays: 30\r\n #自定义路由配置 yml nacos database\r\n route:\r\n config:\r\n data-id: jero-gateway-router\r\n group: DEFAULT_GROUP\r\n data-type: yml\r\n #分布式锁配置\r\n redisson:\r\n address: 127.0.0.1:4780\r\n password:\r\n type: STANDALONE\r\n enabled: true\r\n#Mybatis输出sql日志\r\nlogging:\r\n level:\r\n com.jero.modules.system.mapper : info\r\n#cas单点登录\r\ncas:\r\n prefixUrl: http://localhost:8888/cas\r\n#swagger\r\nknife4j:\r\n production: false\r\n basic:\r\n enable: false\r\n username: jero\r\n password: jero1314\r\n\r\n#第三方登录\r\njustauth:\r\n enabled: true\r\n type:\r\n GITHUB:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\r\n WECHAT_ENTERPRISE:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\r\n agent-id: 1000002\r\n DINGTALK:\r\n client-id: ??\r\n client-secret: ??\r\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\r\n cache:\r\n type: default\r\n prefix: \'demo::\'\r\n timeout: 1h', 'ee9e4d63cce2009104ccd100c8512c63', '2010-05-05 00:00:00', '2021-03-03 13:03:41', NULL, '172.17.0.1', 'U', ''); +INSERT INTO `his_config_info` VALUES (1, 5, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\n # 连接池的配置信息\n # 初始化大小,最小,最大\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # 配置获取连接等待超时的时间\n maxWait: 60000\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\n timeBetweenEvictionRunsMillis: 60000\n # 配置一个连接在池中最小生存的时间,单位是毫秒\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # 打开PSCache,并且指定每个连接上PSCache的大小\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\n filters: stat,wall,slf4j\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jero-boot-mysql:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 多数据源配置\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis 配置\n redis:\n database: 0\n host: jero-boot-redis\n lettuce:\n pool:\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\n shutdown-timeout: 100ms\n password:\n port: 4780\n #rabbitmq配置\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #消费者的最小数量\n concurrency: 1\n #消费者的最大数量\n max-concurrency: 1\n #是否支持重试\n retry:\n enabled: true\n#jero专用配置\njero :\n # 本地:local\\Minio:minio\\阿里云:alioss\n uploadType: local\n path :\n #文件上传根目录 设置\n upload: D://opt//upFiles\n #webapp文件路径\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #阿里云oss存储配置\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeroos\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jero-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表单设计器配置\n desform:\n # 主题颜色(仅支持 16进制颜色代码)\n theme-color: \"#1890ff\"\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\n upload-type: system\n # 在线预览文件服务器地址配置\n file-view-domain: 127.0.0.1:8012\n # minio文件上传\n minio:\n minio_url: http://minio.jero.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屏报表参数设置\n jmreport:\n mode: dev\n #是否需要校验token\n is_verify_token: false\n #必须校验方法\n verify_methods: remove,delete,save,add,update\n #Wps在线文档\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-job配置\n xxljob:\n enabled: false\n adminAddresses: http://jero-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n address: 127.0.0.1:30007\n ip: 127.0.0.1\n port: 30007\n logPath: logs/jero/job/jobhandler/\n logRetentionDays: 30\n #自定义路由配置 yml nacos database\n route:\n config:\n data-id: jero-gateway-router\n group: DEFAULT_GROUP\n data-type: yml\n #分布式锁配置\n redisson:\n address: jero-boot-redis:4780\n password:\n type: STANDALONE\n enabled: true\n#Mybatis输出sql日志\nlogging:\n level:\n com.jero.modules.system.mapper : info\n#cas单点登录\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n production: false\n basic:\n enable: false\n username: jero\n password: jero1314\n\n#第三方登录\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h', '14deb24a5927bbf4b7cc010b55cab792', '2010-05-05 00:00:00', '2021-03-03 13:07:28', NULL, '172.17.0.1', 'U', ''); +INSERT INTO `his_config_info` VALUES (1, 6, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\n # 连接池的配置信息\n # 初始化大小,最小,最大\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # 配置获取连接等待超时的时间\n maxWait: 60000\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\n timeBetweenEvictionRunsMillis: 60000\n # 配置一个连接在池中最小生存的时间,单位是毫秒\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # 打开PSCache,并且指定每个连接上PSCache的大小\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\n filters: stat,wall,slf4j\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jero-boot-mysql:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 多数据源配置\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis 配置\n redis:\n database: 0\n host: jero-boot-redis\n lettuce:\n pool:\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\n shutdown-timeout: 100ms\n password:\n port: 4780\n #rabbitmq配置\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #消费者的最小数量\n concurrency: 1\n #消费者的最大数量\n max-concurrency: 1\n #是否支持重试\n retry:\n enabled: true\n#jero专用配置\njero :\n # 本地:local\\Minio:minio\\阿里云:alioss\n uploadType: local\n path :\n #文件上传根目录 设置\n upload: D://opt//upFiles\n #webapp文件路径\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #阿里云oss存储配置\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeroos\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jero-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表单设计器配置\n desform:\n # 主题颜色(仅支持 16进制颜色代码)\n theme-color: \"#1890ff\"\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\n upload-type: system\n # 在线预览文件服务器地址配置\n file-view-domain: 127.0.0.1:8012\n # minio文件上传\n minio:\n minio_url: http://minio.jero.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屏报表参数设置\n jmreport:\n mode: dev\n #是否需要校验token\n is_verify_token: false\n #必须校验方法\n verify_methods: remove,delete,save,add,update\n #Wps在线文档\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-job配置\n xxljob:\n enabled: false\n adminAddresses: http://jero-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n address: jero-boot-system:30007\n ip: jero-boot-system\n port: 30007\n logPath: logs/jero/job/jobhandler/\n logRetentionDays: 30\n #自定义路由配置 yml nacos database\n route:\n config:\n data-id: jero-gateway-router\n group: DEFAULT_GROUP\n data-type: yml\n #分布式锁配置\n redisson:\n address: jero-boot-redis:4780\n password:\n type: STANDALONE\n enabled: true\n#Mybatis输出sql日志\nlogging:\n level:\n org.jero.modules.system.mapper : info\n#cas单点登录\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n production: false\n basic:\n enable: false\n username: jero\n password: jero1314\n\n#第三方登录\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h', '87a50a11f0eb57d6ee4b927a63619173', '2010-05-05 00:00:00', '2021-03-05 16:14:23', NULL, '172.17.0.1', 'U', ''); +INSERT INTO `his_config_info` VALUES (1, 7, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\n # 连接池的配置信息\n # 初始化大小,最小,最大\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # 配置获取连接等待超时的时间\n maxWait: 60000\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\n timeBetweenEvictionRunsMillis: 60000\n # 配置一个连接在池中最小生存的时间,单位是毫秒\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # 打开PSCache,并且指定每个连接上PSCache的大小\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\n filters: stat,wall,slf4j\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jero-boot-mysql:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 多数据源配置\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis 配置\n redis:\n database: 0\n host: jero-boot-redis\n lettuce:\n pool:\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\n shutdown-timeout: 100ms\n password:\n port: 4780\n #rabbitmq配置\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #消费者的最小数量\n concurrency: 1\n #消费者的最大数量\n max-concurrency: 1\n #是否支持重试\n retry:\n enabled: true\n#jero专用配置\njero :\n # 本地:local\\Minio:minio\\阿里云:alioss\n uploadType: local\n path :\n #文件上传根目录 设置\n upload: D://opt//upFiles\n #webapp文件路径\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #阿里云oss存储配置\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeroos\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jero-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表单设计器配置\n desform:\n # 主题颜色(仅支持 16进制颜色代码)\n theme-color: \"#1890ff\"\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\n upload-type: system\n # 在线预览文件服务器地址配置\n file-view-domain: 127.0.0.1:8012\n # minio文件上传\n minio:\n minio_url: http://minio.jero.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屏报表参数设置\n jmreport:\n mode: dev\n #是否需要校验token\n is_verify_token: false\n #必须校验方法\n verify_methods: remove,delete,save,add,update\n #Wps在线文档\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-job配置\n xxljob:\n enabled: true\n adminAddresses: http://jero-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n address: jero-boot-system:30007\n ip: jero-boot-system\n port: 30007\n logPath: logs/jero/job/jobhandler/\n logRetentionDays: 30\n #自定义路由配置 yml nacos database\n route:\n config:\n data-id: jero-gateway-router\n group: DEFAULT_GROUP\n data-type: yml\n #分布式锁配置\n redisson:\n address: jero-boot-redis:4780\n password:\n type: STANDALONE\n enabled: true\n#Mybatis输出sql日志\nlogging:\n level:\n org.jero.modules.system.mapper : info\n#cas单点登录\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n production: false\n basic:\n enable: false\n username: jero\n password: jero1314\n\n#第三方登录\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h', 'b41b822c64ba94a798ebde3419ab640b', '2010-05-05 00:00:00', '2021-03-05 16:45:46', NULL, '172.17.0.1', 'U', ''); +INSERT INTO `his_config_info` VALUES (1, 8, 'jero-dev.yaml', 'DEFAULT_GROUP', '', 'spring:\n datasource:\n druid:\n stat-view-servlet:\n enabled: true\n loginUsername: admin\n loginPassword: 123456\n allow:\n web-stat-filter:\n enabled: true\n dynamic:\n druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置)\n # 连接池的配置信息\n # 初始化大小,最小,最大\n initial-size: 5\n min-idle: 5\n maxActive: 20\n # 配置获取连接等待超时的时间\n maxWait: 60000\n # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒\n timeBetweenEvictionRunsMillis: 60000\n # 配置一个连接在池中最小生存的时间,单位是毫秒\n minEvictableIdleTimeMillis: 300000\n validationQuery: SELECT 1 FROM DUAL\n testWhileIdle: true\n testOnBorrow: false\n testOnReturn: false\n # 打开PSCache,并且指定每个连接上PSCache的大小\n poolPreparedStatements: true\n maxPoolPreparedStatementPerConnectionSize: 20\n # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,\'wall\'用于防火墙\n filters: stat,wall,slf4j\n # 通过connectProperties属性来打开mergeSql功能;慢SQL记录\n connectionProperties: druid.stat.mergeSql\\=true;druid.stat.slowSqlMillis\\=5000\n\n datasource:\n master:\n url: jdbc:mysql://jero-boot-mysql:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n username: root\n password: root\n driver-class-name: com.mysql.cj.jdbc.Driver\n # 多数据源配置\n #multi-datasource1:\n #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai\n #username: root\n #password: root\n #driver-class-name: com.mysql.cj.jdbc.Driver\n #redis 配置\n redis:\n database: 0\n host: jero-boot-redis\n lettuce:\n pool:\n max-active: 8 #最大连接数据库连接数,设 0 为没有限制\n max-idle: 8 #最大等待连接中的数量,设 0 为没有限制\n max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。\n min-idle: 0 #最小等待连接中的数量,设 0 为没有限制\n shutdown-timeout: 100ms\n password:\n port: 4780\n #rabbitmq配置\n rabbitmq:\n host: 127.0.0.1\n username: guest\n password: guest\n port: 5672\n publisher-confirms: true\n publisher-returns: true\n virtual-host: /\n listener:\n simple:\n acknowledge-mode: manual\n #消费者的最小数量\n concurrency: 1\n #消费者的最大数量\n max-concurrency: 1\n #是否支持重试\n retry:\n enabled: true\n#jero专用配置\njero :\n # 本地:local\\Minio:minio\\阿里云:alioss\n uploadType: local\n path :\n #文件上传根目录 设置\n upload: D://opt//upFiles\n #webapp文件路径\n webapp: D://opt//webapp\n shiro:\n excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/**\n #阿里云oss存储配置\n oss:\n endpoint: oss-cn-beijing.aliyuncs.com\n accessKey: ??\n secretKey: ??\n bucketName: jeroos\n staticDomain: ??\n # ElasticSearch 6设置\n elasticsearch:\n cluster-name: jero-ES\n cluster-nodes: 127.0.0.1:9200\n check-enabled: false\n # 表单设计器配置\n desform:\n # 主题颜色(仅支持 16进制颜色代码)\n theme-color: \"#1890ff\"\n # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置)\n upload-type: system\n # 在线预览文件服务器地址配置\n file-view-domain: 127.0.0.1:8012\n # minio文件上传\n minio:\n minio_url: http://minio.jero.com\n minio_name: ??\n minio_pass: ??\n bucketName: otatest\n #大屏报表参数设置\n jmreport:\n mode: dev\n #是否需要校验token\n is_verify_token: false\n #必须校验方法\n verify_methods: remove,delete,save,add,update\n #Wps在线文档\n wps:\n domain: https://wwo.wps.cn/office/\n appid: ??\n appsecret: ??\n #xxl-job配置\n xxljob:\n enabled: true\n adminAddresses: http://jero-boot-xxljob:9080/xxl-job-admin\n appname: ${spring.application.name}\n accessToken: \'\'\n #address: jero-boot-system:30007\n ip: jero-boot-system\n #port: 30007\n logPath: logs/jero/job/jobhandler/\n logRetentionDays: 30\n #自定义路由配置 yml nacos database\n route:\n config:\n data-id: jero-gateway-router\n group: DEFAULT_GROUP\n data-type: yml\n #分布式锁配置\n redisson:\n address: jero-boot-redis:4780\n password:\n type: STANDALONE\n enabled: true\n#Mybatis输出sql日志\nlogging:\n level:\n org.jero.modules.system.mapper : info\n#cas单点登录\ncas:\n prefixUrl: http://localhost:8888/cas\n#swagger\nknife4j:\n production: false\n basic:\n enable: false\n username: jero\n password: jero1314\n\n#第三方登录\njustauth:\n enabled: true\n type:\n GITHUB:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/github/callback\n WECHAT_ENTERPRISE:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/wechat_enterprise/callback\n agent-id: 1000002\n DINGTALK:\n client-id: ??\n client-secret: ??\n redirect-uri: http://sso.test.com:8080/jero-boot/thirdLogin/dingtalk/callback\n cache:\n type: default\n prefix: \'demo::\'\n timeout: 1h', '5265825f119e8058400d24581d81215f', '2010-05-05 00:00:00', '2021-03-05 16:46:22', NULL, '172.17.0.1', 'U', ''); +jero +-- ---------------------------- +-- Table structure for permissions +-- ---------------------------- +DROP TABLE IF EXISTS `permissions`; +CREATE TABLE `permissions` ( + `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `resource` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `action` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + UNIQUE INDEX `uk_role_permission`(`role`, `resource`, `action`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for roles +-- ---------------------------- +DROP TABLE IF EXISTS `roles`; +CREATE TABLE `roles` ( + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `role` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + UNIQUE INDEX `uk_username_role`(`username`, `role`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of roles +-- ---------------------------- +INSERT INTO `roles` VALUES ('nacos', 'ROLE_ADMIN'); + +-- ---------------------------- +-- Table structure for tenant_capacity +-- ---------------------------- +DROP TABLE IF EXISTS `tenant_capacity`; +CREATE TABLE `tenant_capacity` ( + `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '' COMMENT 'Tenant ID', + `quota` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '配额,0表示使用默认值', + `usage` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '使用量', + `max_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '聚合子配置最大个数', + `max_aggr_size` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大变更历史数量', + `gmt_create` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '创建时间', + `gmt_modified` datetime(0) NOT NULL DEFAULT '2010-05-05 00:00:00' COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_tenant_id`(`tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '租户容量信息表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for tenant_info +-- ---------------------------- +DROP TABLE IF EXISTS `tenant_info`; +CREATE TABLE `tenant_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `kp` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT 'kp', + `tenant_id` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_id', + `tenant_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT '' COMMENT 'tenant_name', + `tenant_desc` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'tenant_desc', + `create_source` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT 'create_source', + `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', + `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uk_tenant_info_kptenantid`(`kp`, `tenant_id`) USING BTREE, + INDEX `idx_tenant_id`(`tenant_id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = 'tenant_info' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Table structure for users +-- ---------------------------- +DROP TABLE IF EXISTS `users`; +CREATE TABLE `users` ( + `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `password` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `enabled` tinyint(1) NOT NULL, + PRIMARY KEY (`username`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of users +-- ---------------------------- +INSERT INTO `users` VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', 1); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/db/tables_xxl_job.sql b/db/tables_xxl_job.sql new file mode 100644 index 00000000..52e015c4 --- /dev/null +++ b/db/tables_xxl_job.sql @@ -0,0 +1,119 @@ +# +# XXL-JOB v2.2.0 +# Copyright (c) 2015-present, xuxueli. + +CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; +use `xxl_job`; + +SET NAMES utf8mb4; + +CREATE TABLE `xxl_job_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_cron` varchar(128) NOT NULL COMMENT '任务执行CRON', + `job_desc` varchar(255) NOT NULL, + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `author` varchar(64) DEFAULT NULL COMMENT '作者', + `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', + `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', + `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', + `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', + `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', + `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', + `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', + `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', + `trigger_code` int(11) NOT NULL COMMENT '调度-结果', + `trigger_msg` text COMMENT '调度-日志', + `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', + `handle_code` int(11) NOT NULL COMMENT '执行-状态', + `handle_msg` text COMMENT '执行-日志', + `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', + PRIMARY KEY (`id`), + KEY `I_trigger_time` (`trigger_time`), + KEY `I_handle_code` (`handle_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log_report` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', + `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', + `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', + `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', + PRIMARY KEY (`id`), + UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_logglue` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_registry` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `registry_group` varchar(50) NOT NULL, + `registry_key` varchar(255) NOT NULL, + `registry_value` varchar(255) NOT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_group` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', + `title` varchar(12) NOT NULL COMMENT '执行器名称', + `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', + `address_list` varchar(512) DEFAULT NULL COMMENT '执行器地址列表,多地址逗号分隔', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '账号', + `password` varchar(50) NOT NULL COMMENT '密码', + `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', + `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', + PRIMARY KEY (`id`), + UNIQUE KEY `i_username` (`username`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_lock` ( + `lock_name` varchar(50) NOT NULL COMMENT '锁名称', + PRIMARY KEY (`lock_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + + +INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL); +INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_cron`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '0 0 0 * * ? *', '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); +INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); +INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); + +commit; + diff --git a/db/增量SQL/2.4升级到2.4.2增量mysql.sql b/db/增量SQL/2.4升级到2.4.2增量mysql.sql new file mode 100644 index 00000000..5585807b --- /dev/null +++ b/db/增量SQL/2.4升级到2.4.2增量mysql.sql @@ -0,0 +1,28 @@ +INSERT INTO SYS_DICT_ITEM(ID, DICT_ID, ITEM_TEXT, ITEM_VALUE, DESCRIPTION, SORT_ORDER, STATUS, CREATE_BY, CREATE_TIME, UPDATE_BY, UPDATE_TIME) VALUES ('1334440962954936321', '1209733563293962241', 'MYSQL5.7', '4', NULL, '1', '1', 'admin', '2020-12-03 18:16:02', 'admin', '2020-12-03 18:16:02'); +UPDATE SYS_DICT_ITEM SET ITEM_TEXT = 'MySQL5.5' WHERE ID = '1209733775114702850'; +UPDATE SYS_DICT_ITEM SET SORT_ORDER = '3' WHERE ID = '1209733839933476865'; +UPDATE SYS_DICT_ITEM SET SORT_ORDER = '4' WHERE ID = '1209733903020003330'; + +ALTER TABLE `sys_gateway_route` +CHANGE COLUMN `persist` `persistable` int(3) NULL DEFAULT NULL COMMENT '是否为保留数据:0-否 1-是' AFTER `strip_prefix`; + +DROP TABLE IF EXISTS `test_online_link`; +CREATE TABLE `test_online_link` ( + `id` varchar(32) NOT NULL, + `pid` varchar(32) DEFAULT NULL COMMENT 'pid', + `name` varchar(255) DEFAULT NULL COMMENT 'name', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +INSERT INTO `test_online_link` VALUES ('1', NULL, '中国'); +INSERT INTO `test_online_link` VALUES ('10', '8', '庐阳区'); +INSERT INTO `test_online_link` VALUES ('11', '7', '黄山市'); +INSERT INTO `test_online_link` VALUES ('2', '1', '山东省'); +INSERT INTO `test_online_link` VALUES ('3', '2', '济南市'); +INSERT INTO `test_online_link` VALUES ('4', '3', '历城区'); +INSERT INTO `test_online_link` VALUES ('5', '3', '长青区'); +INSERT INTO `test_online_link` VALUES ('6', '2', '青岛市'); +INSERT INTO `test_online_link` VALUES ('7', '1', '安徽省'); +INSERT INTO `test_online_link` VALUES ('8', '7', '合肥市'); +INSERT INTO `test_online_link` VALUES ('9', '8', '包河区'); + +update ONL_CGFORM_FIELD set DB_TYPE = 'Date' WHERE DB_TYPE = 'date'; \ No newline at end of file diff --git a/db/增量SQL/jimureport/jimureport.mysql5.7.create.sql b/db/增量SQL/jimureport/jimureport.mysql5.7.create.sql new file mode 100644 index 00000000..a54fec45 --- /dev/null +++ b/db/增量SQL/jimureport/jimureport.mysql5.7.create.sql @@ -0,0 +1,1641 @@ +/* + Navicat Premium Data Transfer + + Source Server : mysql5.7 + Source Server Type : MySQL + Source Server Version : 50727 + Source Host : 127.0.0.1:3306 + Source Schema : jero-boot + + Target Server Type : MySQL + Target Server Version : 50727 + File Encoding : 65001 + + Date: 13/01/2021 14:36:01 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for jimu_report +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report`; +CREATE TABLE `jimu_report` ( + `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键', + `code` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编码', + `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名称', + `note` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '说明', + `status` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态', + `type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型', + `json_str` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT 'json字符串', + `api_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求地址', + `thumb` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '缩略图', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `del_flag` tinyint(1) NULL DEFAULT NULL COMMENT '删除标识0-正常,1-已删除', + `api_method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求方法0-get,1-post', + `api_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求编码', + `template` tinyint(1) NULL DEFAULT NULL COMMENT '是否是模板 0-是,1-不是', + `view_count` bigint(15) NULL DEFAULT NULL COMMENT '浏览次数', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_jmreport_code`(`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '在线excel设计器' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report +-- ---------------------------- +INSERT INTO `jimu_report` VALUES ('1314846205892759552', '20201010163252', 'XXX有限公司员工登记表', NULL, NULL, 'printinfo', '{\"area\":{\"sri\":8,\"sci\":10,\"eri\":8,\"eci\":10,\"width\":146,\"height\":34},\"printElWidth\":794,\"excel_config_id\":\"1314846205892759552\",\"printElHeight\":1011,\"rows\":{\"0\":{\"cells\":{\"1\":{\"merge\":[0,8]},\"10\":{}},\"height\":22},\"1\":{\"cells\":{\"2\":{\"style\":87,\"text\":\" \"},\"3\":{\"style\":87,\"text\":\" \"},\"4\":{\"style\":87,\"text\":\" \"},\"5\":{\"style\":87,\"text\":\" \"},\"6\":{\"style\":87,\"text\":\" \"},\"7\":{\"style\":87,\"text\":\" \"},\"8\":{\"style\":87,\"text\":\" \"},\"9\":{\"style\":87,\"text\":\" \"}},\"height\":24},\"2\":{\"cells\":{\"1\":{\"text\":\"所在部门\",\"style\":93},\"2\":{\"text\":\"${yuangongjiben.department}\",\"style\":23,\"merge\":[0,2]},\"3\":{\"style\":13,\"text\":\" \"},\"4\":{\"style\":13,\"text\":\" \"},\"5\":{\"text\":\"职务\",\"style\":93},\"6\":{\"text\":\"${yuangongjiben.post}\",\"style\":23},\"7\":{\"text\":\"填写日期\",\"style\":93},\"8\":{\"text\":\"${yuangongjiben.data}\",\"style\":23,\"merge\":[0,1]},\"9\":{\"style\":12,\"text\":\" \"}},\"isDrag\":true,\"height\":36},\"3\":{\"cells\":{\"1\":{\"text\":\"姓名\",\"style\":93},\"2\":{\"text\":\"${yuangongjiben.name}\",\"style\":23},\"3\":{\"text\":\"性别\",\"style\":93},\"4\":{\"text\":\"${yuangongjiben.sex}\",\"style\":23},\"5\":{\"text\":\"出生日期\",\"style\":93},\"6\":{\"text\":\"${yuangongjiben.birth}\",\"style\":23},\"7\":{\"text\":\"政治面貌\",\"style\":93},\"8\":{\"text\":\"${yuangongjiben.political}\",\"style\":130,\"merge\":[0,1]}},\"isDrag\":true,\"height\":33},\"4\":{\"cells\":{\"1\":{\"text\":\"机关\",\"style\":93},\"2\":{\"text\":\"${yuangongjiben.office}\",\"style\":23},\"3\":{\"style\":93,\"text\":\"民族\"},\"4\":{\"text\":\"${yuangongjiben.nation}\",\"style\":23},\"5\":{\"style\":93,\"text\":\"健康状况\"},\"6\":{\"text\":\"${yuangongjiben.health}\",\"style\":23},\"7\":{\"style\":93,\"text\":\"户籍类型\"},\"8\":{\"text\":\"${yuangongjiben.register}\",\"style\":26},\"9\":{\"style\":35,\"text\":\" \",\"merge\":[3,0],\"virtual\":\"1KT8bnqRT4bi8Z7b\"}},\"isDrag\":true,\"height\":31},\"5\":{\"cells\":{\"1\":{\"text\":\"最高学历\",\"style\":93},\"2\":{\"text\":\"${yuangongjiben.education}\",\"style\":23},\"3\":{\"text\":\"所学专业\",\"style\":93},\"4\":{\"text\":\"${yuangongjiben.major}\",\"style\":23,\"merge\":[0,2]},\"5\":{\"style\":12,\"text\":\" \"},\"6\":{\"style\":12,\"text\":\" \"},\"7\":{\"text\":\"毕业时间\",\"style\":93},\"8\":{\"text\":\"${yuangongjiben.gdata}\",\"style\":23}},\"isDrag\":true,\"height\":35},\"6\":{\"cells\":{\"1\":{\"text\":\"电子邮箱\",\"style\":93},\"2\":{\"text\":\"${yuangongjiben.mailbox}\",\"style\":23},\"3\":{\"text\":\"手机号\",\"style\":93},\"4\":{\"text\":\"${yuangongjiben.telphone}\",\"style\":23,\"merge\":[0,2]},\"5\":{\"style\":12,\"text\":\" \"},\"6\":{\"style\":12,\"text\":\" \"},\"7\":{\"text\":\"家庭电话\",\"style\":93},\"8\":{\"text\":\"${yuangongjiben.homephone}\",\"style\":23}},\"isDrag\":true,\"height\":38},\"7\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"第一次参加工作时间\",\"style\":93},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.pworktime}\",\"style\":133,\"merge\":[0,2]},\"4\":{\"style\":134,\"text\":\" \"},\"5\":{\"style\":134,\"text\":\" \"},\"6\":{\"style\":93,\"text\":\"入职时间\"},\"7\":{\"text\":\"${yuangongjiben.entrytime}\",\"style\":24,\"merge\":[0,1]},\"8\":{\"style\":13,\"text\":\" \"}},\"isDrag\":true,\"height\":27},\"8\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"毕业院校\",\"style\":93},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.school}\",\"style\":24,\"merge\":[0,2]},\"4\":{\"style\":13,\"text\":\" \"},\"5\":{\"style\":13,\"text\":\" \"},\"6\":{\"style\":93,\"text\":\"身份证号\"},\"7\":{\"text\":\"${yuangongjiben.idcard}\",\"style\":24,\"merge\":[0,2]}},\"isDrag\":true,\"height\":34},\"9\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"入党(团)时间、地点\",\"style\":94},\"2\":{\"style\":95,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.entrytime}\",\"style\":24,\"merge\":[0,2]},\"4\":{\"style\":13,\"text\":\" \"},\"5\":{\"style\":13,\"text\":\" \"},\"6\":{\"text\":\"婚姻状况\",\"style\":93},\"7\":{\"text\":\"${yuangongjiben.marital}\",\"style\":23},\"8\":{\"text\":\"有无子女\",\"style\":93},\"9\":{\"text\":\"${yuangongjiben.children}\",\"style\":23}},\"isDrag\":true,\"height\":33},\"10\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"户口所在街道名称\",\"style\":93},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.hukoustreet}\",\"style\":24,\"merge\":[0,2]},\"4\":{\"style\":13,\"text\":\" \"},\"5\":{\"style\":13,\"text\":\" \"},\"6\":{\"merge\":[0,1],\"text\":\"户口所在地邮编\",\"style\":93},\"7\":{\"style\":37,\"text\":\" \"},\"8\":{\"text\":\"${yuangongjiben.hukounum}\",\"style\":23,\"merge\":[0,1]},\"9\":{\"text\":\" \",\"style\":7}},\"isDrag\":true,\"height\":38},\"11\":{\"cells\":{\"1\":{\"text\":\"户口所在地地址\",\"style\":96,\"merge\":[2,1]},\"3\":{\"text\":\"${yuangongjiben.hukoudi}\",\"style\":26,\"merge\":[2,6]},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"}},\"isDrag\":true},\"12\":{\"cells\":{\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"}}},\"13\":{\"cells\":{\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"12\":{\"text\":\"\"}},\"isDrag\":true},\"14\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"现居住地址\",\"style\":98},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.currentdi}\",\"style\":26,\"merge\":[0,2]},\"4\":{\"text\":\" \",\"style\":7},\"5\":{\"text\":\" \",\"style\":7},\"6\":{\"style\":98,\"merge\":[0,1],\"text\":\"现居住地址邮编\"},\"7\":{\"style\":39,\"text\":\" \"},\"8\":{\"text\":\"${yuangongjiben.currentnum}\",\"style\":26,\"merge\":[0,1]},\"9\":{\"text\":\" \",\"style\":7}},\"isDrag\":true,\"height\":33},\"15\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"是否参加社保\",\"style\":98},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.socialsecurity}\",\"style\":27,\"merge\":[0,1]},\"4\":{\"text\":\" \",\"style\":7},\"5\":{\"text\":\"有无公积金\",\"style\":98},\"6\":{\"text\":\"${yuangongjiben.providentfund}\",\"style\":27,\"merge\":[0,1]},\"7\":{\"text\":\" \",\"style\":7},\"8\":{\"text\":\"兴趣爱好\",\"style\":98},\"9\":{\"text\":\"${yuangongjiben.hobby}\",\"style\":27}},\"isDrag\":true,\"height\":34},\"16\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"参加社保类型\",\"style\":98},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.sbtype}\",\"style\":116,\"merge\":[0,6]},\"4\":{\"style\":117,\"text\":\" \"},\"5\":{\"style\":117,\"text\":\" \"},\"6\":{\"style\":117,\"text\":\" \"},\"7\":{\"style\":117,\"text\":\" \"},\"8\":{\"style\":117,\"text\":\" \"},\"9\":{\"style\":117,\"text\":\" \"}},\"isDrag\":true,\"height\":30},\"17\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"个人档案存放地\",\"style\":98},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"${yuangongjiben.archivesdi}\",\"style\":116,\"merge\":[0,6]},\"4\":{\"style\":117,\"text\":\" \"},\"5\":{\"style\":117,\"text\":\" \"},\"6\":{\"style\":117,\"text\":\" \"},\"7\":{\"style\":117,\"text\":\" \"},\"8\":{\"style\":117,\"text\":\" \"},\"9\":{\"style\":117,\"text\":\" \"}},\"isDrag\":true,\"height\":33},\"18\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":7},\"2\":{\"text\":\" \",\"style\":7},\"3\":{\"text\":\" \",\"style\":7},\"4\":{\"text\":\" \",\"style\":7},\"5\":{\"text\":\" \",\"style\":7},\"6\":{\"text\":\" \",\"style\":7},\"7\":{\"text\":\" \",\"style\":7},\"8\":{\"text\":\" \",\"style\":7},\"9\":{\"text\":\" \",\"style\":7}}},\"19\":{\"cells\":{\"1\":{\"merge\":[0,4],\"text\":\"学历、经历(从高中开始写)\",\"style\":99},\"2\":{\"style\":99,\"text\":\" \"},\"3\":{\"style\":99,\"text\":\" \"},\"4\":{\"style\":99,\"text\":\" \"},\"5\":{\"style\":99,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}}},\"20\":{\"cells\":{\"1\":{\"text\":\"由_年_月\",\"merge\":[0,1],\"style\":36},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"merge\":[0,1],\"text\":\"至_年_月\",\"style\":38},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"merge\":[0,1],\"text\":\"就读学校\",\"style\":38},\"6\":{\"style\":39,\"text\":\" \"},\"7\":{\"merge\":[0,1],\"text\":\"专业\",\"style\":38},\"8\":{\"style\":39,\"text\":\" \"},\"9\":{\"text\":\"担任职务\",\"style\":38},\"10\":{\"style\":112,\"text\":\" \"}}},\"21\":{\"cells\":{\"1\":{\"style\":90,\"merge\":[0,1],\"text\":\"#{xueli.kdate}\"},\"2\":{\"style\":6},\"3\":{\"style\":90,\"text\":\"#{xueli.jdate}\",\"merge\":[0,1]},\"5\":{\"style\":90,\"text\":\"#{xueli.jstudent}\",\"merge\":[0,1]},\"7\":{\"style\":90,\"text\":\"#{xueli.zhuanye}\",\"merge\":[0,1]},\"9\":{\"style\":90,\"text\":\"#{xueli.zhiwu}\"},\"10\":{\"style\":112,\"text\":\" \"}},\"isDrag\":true},\"22\":{\"cells\":{\"1\":{\"style\":7,\"text\":\" \"},\"2\":{\"style\":7,\"text\":\" \"},\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}}},\"23\":{\"cells\":{\"1\":{\"merge\":[0,4],\"text\":\"工作经历\",\"style\":124},\"2\":{\"style\":124,\"text\":\" \"},\"3\":{\"style\":124,\"text\":\" \"},\"4\":{\"style\":124,\"text\":\" \"},\"5\":{\"style\":124,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}},\"height\":27},\"24\":{\"cells\":{\"1\":{\"text\":\"由_年_月\",\"merge\":[0,1],\"style\":36},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"merge\":[0,1],\"text\":\"至_年_月\",\"style\":38},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"text\":\"工作单位及职称\",\"style\":38,\"merge\":[0,1]},\"7\":{\"merge\":[0,1],\"text\":\"证明人\",\"style\":38},\"8\":{\"style\":39,\"text\":\" \"},\"9\":{\"text\":\"联系方式\",\"style\":38},\"10\":{\"style\":112,\"text\":\" \"}}},\"25\":{\"cells\":{\"1\":{\"text\":\"#{uu.kdate}\",\"style\":90,\"merge\":[0,1]},\"2\":{\"text\":\" \",\"style\":6},\"3\":{\"text\":\"#{uu.jdate}\",\"style\":90,\"merge\":[0,1]},\"5\":{\"text\":\"#{uu.jstudent}\",\"style\":90,\"merge\":[0,1]},\"7\":{\"text\":\"#{uu.zmname}\",\"style\":90,\"merge\":[0,1]},\"9\":{\"text\":\"#{uu.zmphone}\",\"style\":90},\"10\":{\"style\":112,\"text\":\" \"}},\"isDrag\":true},\"26\":{\"cells\":{\"1\":{\"style\":7,\"text\":\" \"},\"2\":{\"style\":7,\"text\":\" \"},\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}}},\"27\":{\"cells\":{\"1\":{\"merge\":[0,4],\"text\":\"职称/资格、证书\",\"style\":125},\"2\":{\"style\":125,\"text\":\" \"},\"3\":{\"style\":125,\"text\":\" \"},\"4\":{\"style\":125,\"text\":\" \"},\"5\":{\"style\":125,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}},\"height\":46},\"28\":{\"cells\":{\"1\":{\"text\":\"发证时间\",\"merge\":[0,1],\"style\":36},\"2\":{\"style\":37,\"text\":\" \"},\"3\":{\"merge\":[0,1],\"text\":\"职称名称\",\"style\":38},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"text\":\"级别\",\"style\":38,\"merge\":[0,1]},\"7\":{\"text\":\"发证单位\",\"style\":38,\"merge\":[0,1]},\"9\":{\"text\":\"备注\",\"style\":38},\"10\":{\"style\":112,\"text\":\" \"}}},\"29\":{\"cells\":{\"1\":{\"text\":\"#{zhengshu.fdate}\",\"style\":90,\"merge\":[0,1]},\"2\":{\"text\":\" \",\"style\":6},\"3\":{\"text\":\"#{zhengshu.zcname}\",\"style\":90,\"merge\":[0,1]},\"5\":{\"text\":\"#{zhengshu.jibie}\",\"style\":90,\"merge\":[0,1]},\"7\":{\"text\":\"#{zhengshu.danwei}\",\"style\":90,\"merge\":[0,1]},\"9\":{\"text\":\"#{zhengshu.beizhu}\",\"style\":90},\"10\":{\"style\":112,\"text\":\" \"}},\"isDrag\":true},\"30\":{\"cells\":{\"1\":{\"style\":7,\"text\":\" \"},\"2\":{\"style\":7,\"text\":\" \"},\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}}},\"31\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"家庭成员\",\"style\":125},\"2\":{\"style\":125,\"text\":\" \"},\"3\":{\"style\":7,\"text\":\" \"},\"4\":{\"style\":7,\"text\":\" \"},\"5\":{\"style\":7,\"text\":\" \"},\"6\":{\"style\":7,\"text\":\" \"},\"7\":{\"style\":7,\"text\":\" \"},\"8\":{\"style\":7,\"text\":\" \"},\"9\":{\"style\":7,\"text\":\" \"},\"10\":{\"style\":112,\"text\":\" \"}},\"height\":42},\"32\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"姓名\",\"style\":38},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"merge\":[0,1],\"text\":\"关系\",\"style\":38},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"text\":\"年龄\",\"style\":38},\"6\":{\"text\":\"工作单位\",\"style\":38,\"merge\":[0,1]},\"8\":{\"text\":\"政治面貌\",\"style\":38},\"9\":{\"text\":\"联系方式\",\"style\":38},\"10\":{\"style\":112,\"text\":\" \"}}},\"33\":{\"cells\":{\"1\":{\"text\":\"#{jtcy.name}\",\"style\":90,\"merge\":[0,1]},\"2\":{\"style\":6,\"text\":\" \"},\"3\":{\"text\":\"#{jtcy.guanxi}\",\"style\":90,\"merge\":[0,1]},\"4\":{\"style\":6,\"text\":\" \"},\"5\":{\"text\":\"#{jtcy.age}\",\"style\":90},\"6\":{\"text\":\"#{jtcy.danwei}\",\"style\":90,\"merge\":[0,1]},\"8\":{\"text\":\"#{jtcy.zzmm}\",\"style\":90},\"9\":{\"text\":\"#{jtcy.phone}\",\"style\":90},\"10\":{\"style\":112,\"text\":\" \"}},\"isDrag\":true},\"34\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":7},\"2\":{\"text\":\" \",\"style\":7},\"3\":{\"text\":\" \",\"style\":7},\"4\":{\"text\":\" \",\"style\":7},\"5\":{\"text\":\" \",\"style\":7},\"6\":{\"text\":\" \",\"style\":7},\"7\":{\"text\":\" \",\"style\":7},\"8\":{\"text\":\" \",\"style\":7},\"9\":{\"text\":\" \",\"style\":7},\"10\":{\"style\":112,\"text\":\" \"}}},\"35\":{\"cells\":{\"1\":{\"merge\":[0,2],\"text\":\"所获奖励\",\"style\":125},\"2\":{\"text\":\" \",\"style\":125},\"3\":{\"text\":\" \",\"style\":125},\"4\":{\"text\":\" \",\"style\":7},\"5\":{\"text\":\" \",\"style\":7},\"6\":{\"text\":\" \",\"style\":7},\"7\":{\"text\":\" \",\"style\":7},\"8\":{\"text\":\" \",\"style\":7},\"9\":{\"text\":\" \",\"style\":7},\"10\":{\"style\":112,\"text\":\" \"}},\"height\":47},\"36\":{\"cells\":{\"1\":{\"text\":\"时间\",\"style\":90,\"merge\":[0,2]},\"4\":{\"style\":90,\"text\":\"地点\",\"merge\":[0,2]},\"7\":{\"style\":90,\"text\":\"所获得的奖励名称\",\"merge\":[0,2]},\"10\":{\"style\":112,\"text\":\" \"}}},\"37\":{\"cells\":{\"1\":{\"text\":\"#{jiangli.date}\",\"style\":90,\"merge\":[0,2]},\"4\":{\"text\":\"#{jiangli.didian}\",\"style\":90,\"merge\":[0,2]},\"7\":{\"text\":\"#{jiangli.mingcheng}\",\"style\":90,\"merge\":[0,2]},\"10\":{\"style\":112,\"text\":\" \"}},\"isDrag\":true},\"len\":98},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":885,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true}},{\"align\":\"center\",\"font\":{\"name\":\"仿宋\"}},{\"font\":{\"name\":\"仿宋\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":12}},{\"font\":{\"name\":\"宋体\",\"size\":12}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":8}},{\"font\":{\"name\":\"宋体\",\"size\":8}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10}},{\"font\":{\"name\":\"宋体\",\"size\":10}},{\"align\":\"center\",\"font\":{\"name\":\"隶书\",\"size\":10}},{\"font\":{\"name\":\"隶书\",\"size\":10}},{\"align\":\"center\",\"font\":{\"name\":\"华文中宋\",\"size\":10}},{\"font\":{\"name\":\"华文中宋\",\"size\":10}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\",\"size\":10}},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":10}},{\"textwrap\":true},{\"textwrap\":true,\"align\":\"center\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"bold\":true}},{\"font\":{\"bold\":true,\"size\":12}},{\"font\":{\"bold\":true,\"size\":10}},{\"font\":{\"bold\":true,\"size\":10},\"align\":\"center\"},{\"font\":{\"bold\":true},\"align\":\"center\"},{\"font\":{\"bold\":true,\"size\":10},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true,\"size\":10,\"name\":\"宋体\"},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true,\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"font\":{\"bold\":true,\"name\":\"宋体\"},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true},\"border\":{\"top\":[\"medium\",\"#000\"]}},{\"border\":{\"top\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]}},{\"border\":{\"left\":[\"medium\",\"#000\"]}},{\"border\":{\"right\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]}},{\"border\":{\"top\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"Microsoft YaHei\"},\"border\":{\"top\":[\"medium\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"Microsoft YaHei\"}},{\"border\":{\"top\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"right\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"name\":\"Microsoft YaHei\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"bold\":true,\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true,\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\",\"size\":8},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":8}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\",\"size\":8}},{\"border\":{\"top\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"宋体\"},\"border\":{\"top\":[\"medium\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":8},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"medium\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10,\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10,\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10,\"bold\":true}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"bold\":true}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\",\"bold\":true}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"宋体\"},\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"left\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true,\"name\":\"宋体\"},\"border\":{\"top\":[\"thin\",\"#ffffff\"]}},{\"border\":{\"top\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"left\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"left\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"left\",\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"right\"},{\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"right\",\"valign\":\"bottom\"},{\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"left\",\"valign\":\"bottom\"},{\"font\":{\"name\":\"宋体\",\"bold\":true},\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10,\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"format\":\"datetime\"},{\"font\":{\"name\":\"宋体\",\"size\":10},\"format\":\"datetime\"},{\"font\":{\"name\":\"宋体\",\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"format\":\"normal\"},{\"font\":{\"name\":\"宋体\",\"size\":10},\"format\":\"normal\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":59},\"1\":{\"width\":71},\"2\":{\"width\":69},\"3\":{\"width\":89},\"4\":{\"width\":64},\"5\":{\"width\":47},\"6\":{\"width\":68},\"7\":{\"width\":100},\"8\":{\"width\":70},\"9\":{\"width\":102},\"10\":{\"width\":146},\"11\":{\"width\":85},\"len\":27},\"merges\":[\"I3:J3\",\"C3:E3\",\"B2:J2\",\"E6:G6\",\"E7:G7\",\"B8:C8\",\"H8:I8\",\"B9:C9\",\"B10:C10\",\"D10:F10\",\"D8:F8\",\"D9:F9\",\"B11:C11\",\"D11:F11\",\"G11:H11\",\"I11:J11\",\"D12:J14\",\"B15:C15\",\"D15:F15\",\"G15:H15\",\"I15:J15\",\"B16:C16\",\"B17:C17\",\"B18:C18\",\"D17:J17\",\"D18:J18\",\"B20:F20\",\"B21:C21\",\"D21:E21\",\"F21:G21\",\"H21:I21\",\"B22:C22\",\"B24:F24\",\"B25:C25\",\"D25:E25\",\"H25:I25\",\"B26:C26\",\"B28:F28\",\"B29:C29\",\"D29:E29\",\"B30:C30\",\"B32:C32\",\"B33:C33\",\"D33:E33\",\"B34:C34\",\"D34:E34\",\"B36:D36\",\"D16:E16\",\"G16:H16\",\"LAAAAAABJ1:A38\",\"B1:J1\",\"I4:J4\",\"H9:J9\",\"H22:I22\",\"F22:G22\",\"D22:E22\",\"D26:E26\",\"H26:I26\",\"D30:E30\",\"H30:I30\",\"F30:G30\",\"E37:G37\",\"E38:G38\",\"B38:D38\",\"B37:D37\",\"H37:J37\",\"H38:J38\",\"F29:G29\",\"H29:I29\",\"F25:G25\",\"F26:G26\",\"G33:H33\",\"G34:H34\",\"B12:C14\",\"J5:J8\"],\"imgList\":[{\"row\":4,\"col\":9,\"width\":\"101\",\"height\":\"126\",\"src\":\"excel_online/QQ截图20210113140514_1610517928204.png\",\"layer_id\":\"1KT8bnqRT4bi8Z7b\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[4,9]]}]}', NULL, 'https://static.jero.com/designreport/images/1122_1607312336469.png', 'admin', '2020-10-10 16:32:53', 'admin', '2021-01-13 14:12:38', 0, NULL, NULL, 1, 579); +INSERT INTO `jimu_report` VALUES ('1316944968992034816', '20201016113231', '员工信息登记', NULL, NULL, 'printinfo', '{\"area\":false,\"printElWidth\":787,\"excel_config_id\":\"1316944968992034816\",\"printElHeight\":1047,\"rows\":{\"1\":{\"cells\":{\"0\":{\"text\":\"员工信息登记表\",\"merge\":[0,6],\"style\":28},\"1\":{\"style\":21,\"text\":\" \"},\"2\":{\"style\":21,\"text\":\" \"},\"3\":{\"style\":21,\"text\":\" \"},\"4\":{\"style\":21,\"text\":\" \"},\"5\":{\"style\":21,\"text\":\" \"},\"6\":{\"style\":21,\"text\":\" \"}},\"height\":46},\"2\":{\"cells\":{\"0\":{\"text\":\"编号:\",\"style\":29},\"1\":{\"text\":\"${employee.num}\",\"style\":30,\"merge\":[0,3]},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\" \",\"style\":24},\"5\":{\"text\":\"填写日期:\",\"style\":29},\"6\":{\"text\":\"${employee.create_time}\",\"style\":36}},\"isDrag\":true,\"height\":44},\"3\":{\"cells\":{\"0\":{\"text\":\"姓名:\",\"style\":29},\"1\":{\"text\":\"${employee.name}\",\"style\":30},\"2\":{\"text\":\"性别:\",\"style\":29},\"3\":{\"text\":\"${employee.sex}\",\"style\":30},\"4\":{\"text\":\"出生年月:\",\"style\":29},\"5\":{\"text\":\"${employee.birthday}\",\"style\":36},\"6\":{\"style\":3,\"text\":\" \",\"merge\":[4,0],\"virtual\":\"Ym8ny6lYTdutY5tT\"}},\"isDrag\":true,\"height\":42},\"4\":{\"cells\":{\"0\":{\"text\":\"民族:\",\"style\":29},\"1\":{\"text\":\"${employee.nation}\",\"style\":30},\"2\":{\"text\":\"政治面貌:\",\"style\":29},\"3\":{\"text\":\"${employee.political}\",\"style\":30},\"4\":{\"text\":\"籍贯:\",\"style\":29},\"5\":{\"text\":\"${employee.native_place}\",\"style\":30}},\"isDrag\":true,\"height\":38},\"5\":{\"cells\":{\"0\":{\"text\":\"身高(cm):\",\"style\":29},\"1\":{\"text\":\"${employee.height}\",\"style\":30},\"2\":{\"text\":\"体重(kg):\",\"style\":29},\"3\":{\"text\":\"${employee.weight}\",\"style\":30},\"4\":{\"text\":\"健康状况:\",\"style\":29},\"5\":{\"text\":\"${employee.health}\",\"style\":30}},\"isDrag\":true,\"height\":38},\"6\":{\"cells\":{\"0\":{\"text\":\"身份证号:\",\"style\":29},\"1\":{\"text\":\"${employee.id_card}\",\"style\":30,\"merge\":[0,2]},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\"学历:\",\"style\":29},\"5\":{\"text\":\"${employee.education}\",\"style\":30}},\"isDrag\":true,\"height\":40},\"7\":{\"cells\":{\"0\":{\"text\":\"毕业学校:\",\"style\":29},\"1\":{\"text\":\"${employee.school}\",\"style\":30,\"merge\":[0,2]},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\"专业:\",\"style\":29},\"5\":{\"text\":\"${employee.major}\",\"style\":30}},\"isDrag\":true,\"height\":44},\"8\":{\"cells\":{\"0\":{\"text\":\"联系地址:\",\"style\":29},\"1\":{\"text\":\"${employee.address}\",\"style\":30,\"merge\":[0,2]},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\"邮编:\",\"style\":29},\"5\":{\"text\":\"${employee.zip_code}\",\"style\":30,\"merge\":[0,1]},\"6\":{\"text\":\" \",\"style\":24}},\"isDrag\":true,\"height\":45},\"9\":{\"cells\":{\"0\":{\"text\":\"Email:\",\"style\":29},\"1\":{\"text\":\"${employee.email}\",\"style\":30,\"merge\":[0,2]},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\"手机号:\",\"style\":29},\"5\":{\"text\":\"${employee.phone}\",\"style\":30,\"merge\":[0,1]},\"6\":{\"text\":\" \",\"style\":24}},\"isDrag\":true,\"height\":40},\"10\":{\"cells\":{\"0\":{\"text\":\"外语语种:\",\"style\":29},\"1\":{\"text\":\"${employee.foreign_language}\",\"style\":30},\"2\":{\"text\":\"外语水平:\",\"style\":29},\"3\":{\"text\":\"${employee.foreign_language_level}\",\"style\":30},\"4\":{\"text\":\"计算机水平:\",\"style\":29},\"5\":{\"text\":\"${employee.computer_level}\",\"style\":30,\"merge\":[0,1]},\"6\":{\"text\":\" \",\"style\":24}},\"isDrag\":true,\"height\":41},\"11\":{\"cells\":{\"0\":{\"text\":\"毕业时间:\",\"style\":29},\"1\":{\"text\":\"${employee.graduation_time}\",\"style\":34},\"2\":{\"text\":\"到职时间:\",\"style\":29},\"3\":{\"text\":\"${employee.arrival_time}\",\"style\":34},\"4\":{\"text\":\"职称:\",\"style\":29},\"5\":{\"text\":\"${employee.positional_titles}\",\"style\":30,\"merge\":[0,1]},\"6\":{\"text\":\" \",\"style\":24}},\"isDrag\":true,\"height\":42},\"12\":{\"cells\":{\"0\":{\"text\":\"教育经历:\",\"style\":32},\"1\":{\"text\":\"\",\"style\":35,\"merge\":[0,5]},\"2\":{\"text\":\" \",\"style\":40},\"3\":{\"text\":\" \",\"style\":40},\"4\":{\"text\":\" \",\"style\":40},\"5\":{\"text\":\" \",\"style\":40},\"6\":{\"text\":\" \",\"style\":40}},\"isDrag\":true,\"height\":39},\"13\":{\"cells\":{\"0\":{\"text\":\"${employee.education_experience}\",\"style\":33,\"merge\":[0,6]},\"1\":{\"style\":27,\"text\":\" \"},\"2\":{\"style\":27,\"text\":\" \"},\"3\":{\"style\":27,\"text\":\" \"},\"4\":{\"style\":27,\"text\":\" \"},\"5\":{\"style\":27,\"text\":\" \"},\"6\":{\"style\":27,\"text\":\" \"}},\"isDrag\":true,\"height\":70},\"14\":{\"cells\":{\"0\":{\"text\":\"工作经历:\",\"style\":32},\"1\":{\"merge\":[0,5],\"style\":30,\"text\":\" \"},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\" \",\"style\":24},\"5\":{\"text\":\" \",\"style\":24},\"6\":{\"text\":\" \",\"style\":24}},\"height\":43},\"15\":{\"cells\":{\"0\":{\"text\":\"${employee.work_experience}\",\"style\":30,\"merge\":[0,6]},\"1\":{\"text\":\" \",\"style\":24},\"2\":{\"text\":\" \",\"style\":24},\"3\":{\"text\":\" \",\"style\":24},\"4\":{\"text\":\" \",\"style\":24},\"5\":{\"text\":\" \",\"style\":24},\"6\":{\"text\":\" \",\"style\":24}},\"isDrag\":true,\"height\":61},\"17\":{\"cells\":{\"1\":{\"text\":\"\",\"style\":37}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[\"sex1\"],\"freeze\":\"A1\",\"dataRectWidth\":787,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true}},{\"font\":{\"bold\":true}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":false}},{\"font\":{\"bold\":false}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true},\"align\":\"right\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16},\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]},\"font\":{\"bold\":true},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]},\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]},\"font\":{\"bold\":false}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16},\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":true},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":false}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16,\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":true,\"name\":\"宋体\"},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"bold\":false,\"name\":\"宋体\"}},{\"font\":{\"bold\":false,\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16,\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":true,\"name\":\"宋体\"},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"date2\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"date\"},{\"format\":\"date2\"},{\"font\":{\"name\":\"宋体\"},\"format\":\"date2\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"time\"},{\"font\":{\"name\":\"宋体\"},\"format\":\"normal\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":76},\"1\":{\"width\":132},\"2\":{\"width\":86},\"3\":{\"width\":134},\"5\":{\"width\":123},\"6\":{\"width\":136},\"len\":26},\"merges\":[\"A2:G2\",\"B3:E3\",\"B7:D7\",\"B8:D8\",\"B9:D9\",\"B10:D10\",\"F9:G9\",\"F10:G10\",\"F11:G11\",\"F12:G12\",\"B13:G13\",\"A14:G14\",\"B15:G15\",\"A16:G16\",\"G4:G8\"],\"imgList\":[{\"row\":3,\"col\":6,\"width\":\"135\",\"height\":\"192\",\"src\":\"https://static.jero.com/designreport/images/QQ截图20210108095848_1610071294294.png\",\"layer_id\":\"Ym8ny6lYTdutY5tT\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[3,6]]}]}', NULL, 'https://static.jero.com/designreport/images/1133_1607312428261.png', 'admin', '2020-10-16 11:32:32', 'admin', '2021-01-13 14:34:09', 0, NULL, NULL, 1, 1394); +INSERT INTO `jimu_report` VALUES ('1331429368098066432', '20201125104813', '制作业产能监控大屏', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":2,\"col\":5,\"width\":\"908\",\"height\":\"218\",\"config\":\"{\\\"yAxis\\\":[{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"},{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"}],\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"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\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"计划生产\\\",\\\"实际完成量\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"right\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"grid\\\":{\\\"top\\\":56,\\\"left\\\":34,\\\"bottom\\\":37,\\\"right\\\":53},\\\"series\\\":[{\\\"barWidth\\\":8,\\\"itemStyle\\\":{\\\"color\\\":\\\"#70BDD1\\\"},\\\"barMinHeight\\\":2,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"计划生产\\\",\\\"data\\\":[100,130,140,108,200,130,160,180,200,300,110,120,130,140,150,100,100,100,100,100,200,300,110,120,130,140,105,120,150,100],\\\"typeData\\\":[{\\\"name\\\":\\\"实际完成量\\\",\\\"type\\\":\\\"line\\\"}]},{\\\"itemStyle\\\":{\\\"color\\\":\\\"#D69071\\\"},\\\"symbolSize\\\":8,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"line\\\",\\\"yAxisIndex\\\":1,\\\"name\\\":\\\"实际完成量\\\",\\\"data\\\":[100,130,140,108,200,130,160,180,200,300,110,120,130,140,150,100,100,100,100,100,200,300,110,120,130,140,105,120,150,100],\\\"typeData\\\":[{\\\"name\\\":\\\"实际完成量\\\",\\\"type\\\":\\\"line\\\"}]}],\\\"chartType\\\":\\\"linebar\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"crossStyle\\\":{\\\"color\\\":\\\"#999\\\"},\\\"type\\\":\\\"cross\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"text\\\":\\\"日生产效率监控\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":\\\"#104C7E\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331474698436915202\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"rishengchan\",\"chartType\":\"mixed.linebar\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"Or4klM9AZS51JMuK\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[2,5],[2,6],[2,7],[2,8],[2,9],[2,10],[2,11],[2,12],[2,13]]},{\"row\":2,\"col\":1,\"width\":\"459\",\"height\":\"217\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"ARD\\\",\\\"RLD\\\",\\\"LCL\\\",\\\"ULC\\\",\\\"SQPS\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"计划值\\\",\\\"完成值\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"right\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":42,\\\"bottom\\\":42,\\\"right\\\":42},\\\"series\\\":[{\\\"barWidth\\\":9,\\\"data\\\":[1000,1300,1400,1080,1000],\\\"name\\\":\\\"计划值\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#216055\\\",\\\"barBorderRadius\\\":13},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]},{\\\"barWidth\\\":9,\\\"data\\\":[1300,1600,1800,1500,1200],\\\"name\\\":\\\"完成值\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#287E75\\\",\\\"barBorderRadius\\\":13},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"text\\\":\\\"指标计划值和完成值\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":\\\"#104C7E\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331447376279285762\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"jihua\",\"chartType\":\"bar.multi.horizontal\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"VbAARZSMlEAikJif\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[2,1],[2,2],[2,3],[2,4]]},{\"row\":11,\"col\":1,\"width\":\"298\",\"height\":\"148\",\"config\":\"{\\\"series\\\":[{\\\"axisLabel\\\":{\\\"color\\\":\\\"auto\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":10}},\\\"pointer\\\":{\\\"show\\\":true},\\\"data\\\":[{\\\"name\\\":\\\"完成率\\\",\\\"value\\\":80}],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":10,\\\"color\\\":[[0.2,\\\"rgba(183,243,214,1)\\\"],[0.8,\\\"rgba(232,240,61,1)\\\"],[1,\\\"rgba(64,150,241,1)\\\"]]}},\\\"name\\\":\\\"业务指标\\\",\\\"axisTick\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"length\\\":4},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"width\\\":3},\\\"length\\\":8},\\\"itemStyle\\\":{\\\"color\\\":\\\"#D0D2D3\\\"},\\\"detail\\\":{\\\"formatter\\\":\\\"{value}%\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"auto\\\",\\\"fontSize\\\":\\\"14\\\"}},\\\"type\\\":\\\"gauge\\\",\\\"radius\\\":\\\"79%\\\",\\\"title\\\":{\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"shadowBlur\\\":10,\\\"fontSize\\\":\\\"10\\\",\\\"shadowColor\\\":\\\"#000\\\"}},\\\"axisLine_lineStyle_color\\\":[[0.2,\\\"rgba(183,243,214,1)\\\"],[0.8,\\\"rgba(232,240,61,1)\\\"],[1,\\\"rgba(64,150,241,1)\\\"]]}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"上海\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331491194517106690\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bing1\",\"chartType\":\"gauge.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"lNI3TJORqfhUpaK2\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[11,1],[11,2],[11,3]]},{\"row\":11,\"col\":4,\"width\":\"362\",\"height\":\"149\",\"config\":\"{\\\"series\\\":[{\\\"pointer\\\":{\\\"show\\\":true},\\\"startAngle\\\":190,\\\"data\\\":[{\\\"name\\\":\\\"完成率\\\",\\\"value\\\":60}],\\\"endAngle\\\":-10,\\\"itemStyle\\\":{\\\"color\\\":\\\"#D0D2D3\\\"},\\\"type\\\":\\\"gauge\\\",\\\"title\\\":{\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#000\\\",\\\"shadowBlur\\\":10,\\\"fontSize\\\":20,\\\"shadowColor\\\":\\\"#000\\\"}},\\\"axisLabel\\\":{\\\"color\\\":\\\"auto\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":10}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":10,\\\"color\\\":[[0.2,\\\"rgba(128,211,243,1)\\\"],[0.8,\\\"rgba(64,246,66,1)\\\"],[1,\\\"rgba(237,56,247,1)\\\"]]}},\\\"name\\\":\\\"业务指标\\\",\\\"axisTick\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"length\\\":4},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"width\\\":3},\\\"length\\\":8},\\\"detail\\\":{\\\"formatter\\\":\\\"{value}%\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"auto\\\",\\\"fontSize\\\":\\\"14\\\"}},\\\"axisLine_lineStyle_color\\\":[[0.2,\\\"rgba(128,211,243,1)\\\"],[0.8,\\\"rgba(64,246,66,1)\\\"],[1,\\\"rgba(237,56,247,1)\\\"]],\\\"radius\\\":\\\"79%\\\"}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"北京\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331493951013695490\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bing2\",\"chartType\":\"gauge.simple180\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"M3GodY7v2JCBfnGC\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[11,4],[11,5],[11,6],[11,7]]},{\"row\":11,\"col\":7,\"width\":\"402\",\"height\":\"148\",\"config\":\"{\\\"series\\\":[{\\\"pointer\\\":{\\\"show\\\":true},\\\"startAngle\\\":190,\\\"data\\\":[{\\\"name\\\":\\\"成绩\\\",\\\"value\\\":60}],\\\"endAngle\\\":-10,\\\"itemStyle\\\":{\\\"color\\\":\\\"#D0D2D3\\\"},\\\"type\\\":\\\"gauge\\\",\\\"title\\\":{\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#000\\\",\\\"shadowBlur\\\":10,\\\"fontSize\\\":20,\\\"shadowColor\\\":\\\"#000\\\"}},\\\"axisLabel\\\":{\\\"color\\\":\\\"auto\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":10}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":10,\\\"color\\\":[[0.2,\\\"rgba(45,140,240,1)\\\"],[0.8,\\\"rgba(237,203,102,1)\\\"],[1,\\\"#C23531\\\"]]}},\\\"name\\\":\\\"业务指标\\\",\\\"axisTick\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"length\\\":4},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"width\\\":3},\\\"length\\\":8},\\\"detail\\\":{\\\"formatter\\\":\\\"{value}%\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"auto\\\",\\\"fontSize\\\":\\\"14\\\"}},\\\"axisLine_lineStyle_color\\\":[[0.2,\\\"#91c7ae\\\"],[0.8,\\\"#63869E\\\"],[1,\\\"#C23531\\\"]],\\\"radius\\\":\\\"79%\\\"}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"深圳\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"chartType\":\"gauge.simple180\"},\"layer_id\":\"xyRbp6UANWOKoRvq\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[11,7],[11,8],[11,9],[11,10],[11,11]]},{\"row\":11,\"col\":11,\"width\":\"298\",\"height\":\"153\",\"config\":\"{\\\"series\\\":[{\\\"axisLabel\\\":{\\\"color\\\":\\\"auto\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":10}},\\\"pointer\\\":{\\\"show\\\":true},\\\"data\\\":[{\\\"name\\\":\\\"完成率\\\",\\\"value\\\":50}],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":10,\\\"color\\\":[[0.2,\\\"#91c7ae\\\"],[0.8,\\\"#63869E\\\"],[1,\\\"#C23531\\\"]]}},\\\"name\\\":\\\"业务指标\\\",\\\"axisTick\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"length\\\":4},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"width\\\":3},\\\"length\\\":8},\\\"itemStyle\\\":{\\\"color\\\":\\\"#D0D2D3\\\"},\\\"detail\\\":{\\\"formatter\\\":\\\"{value}%\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"auto\\\",\\\"fontSize\\\":\\\"14\\\"}},\\\"type\\\":\\\"gauge\\\",\\\"radius\\\":\\\"78%\\\",\\\"title\\\":{\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"shadowBlur\\\":10,\\\"fontSize\\\":20,\\\"shadowColor\\\":\\\"#000\\\"}},\\\"axisLine_lineStyle_color\\\":[[0.2,\\\"#91c7ae\\\"],[0.8,\\\"#63869E\\\"],[1,\\\"#C23531\\\"]]}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"上海\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"chartType\":\"gauge.simple\"},\"layer_id\":\"19iwE10hJoRRKvbh\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[11,11],[11,12]]},{\"row\":17,\"col\":10,\"width\":\"401\",\"height\":\"223\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"制冷剂\\\",\\\"冷凝机\\\",\\\"电机\\\",\\\"压缩机\\\",\\\"分离机\\\",\\\"电动机\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":45,\\\"left\\\":34,\\\"bottom\\\":44,\\\"right\\\":26},\\\"series\\\":[{\\\"barWidth\\\":14,\\\"data\\\":[14,10,8,2,0,0],\\\"showBackground\\\":true,\\\"name\\\":\\\"销量\\\",\\\"backgroundStyle\\\":{\\\"color\\\":\\\"#C6C4C4\\\"},\\\"itemStyle\\\":{\\\"barBorderRadius\\\":6,\\\"color\\\":\\\"#EDCB66\\\"},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"各机型已开工天数\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":\\\"rgba(16,76,126,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331486475245629441\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"kaigong\",\"chartType\":\"bar.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"ZT3srpW2drL8WBl1\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[17,10],[17,11],[17,12],[17,13]]},{\"row\":17,\"col\":1,\"width\":\"957\",\"height\":\"226\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"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\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":60,\\\"left\\\":35,\\\"bottom\\\":43,\\\"right\\\":35},\\\"series\\\":[{\\\"areaStyle\\\":{\\\"color\\\":\\\"#4D9F78\\\",\\\"opacity\\\":0.2},\\\"data\\\":[100,75,40,58,40,30,60,80,20,30,10,50,80,40,50,100,100,100,100,80,90,30,10,50,70,80,95,80,80,90],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":true,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#3B816C\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"日生产计划完成率\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(16,76,126,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331483873661464578\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"wanchenglv\",\"chartType\":\"line.area\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"0Nsiok8oY1DR0gRU\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[17,1],[17,2],[17,3],[17,4],[17,5],[17,6],[17,7],[17,8],[17,9]]}],\"area\":{\"sri\":21,\"sci\":4,\"eri\":21,\"eci\":4,\"width\":161,\"height\":25},\"printElWidth\":1800,\"excel_config_id\":\"1331429368098066432\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\"制作业产能监控大屏\",\"merge\":[0,11],\"style\":44},\"2\":{\"style\":44,\"text\":\" \"},\"3\":{\"style\":44,\"text\":\" \"},\"4\":{\"style\":44,\"text\":\" \"},\"5\":{\"style\":44,\"text\":\" \"},\"6\":{\"style\":44,\"text\":\" \"},\"7\":{\"style\":44,\"text\":\" \"},\"8\":{\"style\":44,\"text\":\" \"},\"9\":{\"style\":44,\"text\":\" \"},\"10\":{\"style\":44,\"text\":\" \"},\"11\":{\"style\":44,\"text\":\" \"},\"12\":{\"style\":44,\"text\":\" \"}},\"height\":60},\"1\":{\"cells\":{\"0\":{\"text\":\" \"},\"6\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"7\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"8\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"9\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"10\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"11\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"},\"12\":{\"style\":32,\"virtual\":\"Or4klM9AZS51JMuK\",\"text\":\" \"}},\"height\":43},\"2\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \",\"virtual\":\"VbAARZSMlEAikJif\"},\"2\":{\"text\":\" \",\"virtual\":\"VbAARZSMlEAikJif\"},\"3\":{\"text\":\" \",\"virtual\":\"VbAARZSMlEAikJif\"},\"4\":{\"text\":\" \",\"virtual\":\"VbAARZSMlEAikJif\"},\"5\":{\"style\":17,\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"6\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"7\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"8\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"9\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"10\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"11\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"12\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"},\"13\":{\"text\":\" \",\"virtual\":\"Or4klM9AZS51JMuK\"}},\"height\":24},\"3\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"4\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"5\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"6\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"12\":{\"text\":\" \"}},\"height\":25},\"7\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}},\"height\":23},\"8\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}},\"height\":20},\"9\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"10\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"11\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \",\"virtual\":\"lNI3TJORqfhUpaK2\"},\"2\":{\"text\":\" \",\"virtual\":\"lNI3TJORqfhUpaK2\"},\"3\":{\"text\":\" \",\"virtual\":\"lNI3TJORqfhUpaK2\"},\"4\":{\"text\":\" \",\"virtual\":\"M3GodY7v2JCBfnGC\"},\"5\":{\"text\":\" \",\"virtual\":\"M3GodY7v2JCBfnGC\"},\"6\":{\"text\":\" \",\"virtual\":\"M3GodY7v2JCBfnGC\"},\"7\":{\"text\":\" \",\"virtual\":\"xyRbp6UANWOKoRvq\"},\"8\":{\"text\":\" \",\"virtual\":\"xyRbp6UANWOKoRvq\"},\"9\":{\"text\":\" \",\"virtual\":\"xyRbp6UANWOKoRvq\"},\"10\":{\"text\":\" \",\"virtual\":\"xyRbp6UANWOKoRvq\"},\"11\":{\"text\":\" \",\"virtual\":\"19iwE10hJoRRKvbh\"},\"12\":{\"text\":\" \",\"virtual\":\"19iwE10hJoRRKvbh\"}},\"height\":20},\"12\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}},\"height\":25},\"13\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}},\"height\":31},\"14\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"15\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"16\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"17\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"2\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"3\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"4\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"5\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"6\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"7\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"8\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"9\":{\"text\":\" \",\"virtual\":\"0Nsiok8oY1DR0gRU\"},\"10\":{\"text\":\" \",\"virtual\":\"ZT3srpW2drL8WBl1\"},\"11\":{\"text\":\" \",\"virtual\":\"ZT3srpW2drL8WBl1\"},\"12\":{\"text\":\" \",\"virtual\":\"ZT3srpW2drL8WBl1\"},\"13\":{\"text\":\" \",\"virtual\":\"ZT3srpW2drL8WBl1\"}},\"height\":37},\"18\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"style\":34,\"text\":\"\",\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"2\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"3\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"4\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"5\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"6\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"7\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"8\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"9\":{\"text\":\" \",\"style\":34,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"10\":{\"style\":32,\"text\":\"\",\"virtual\":\"870QQK6Jl1k12wty\"},\"11\":{\"text\":\" \",\"style\":32,\"virtual\":\"870QQK6Jl1k12wty\"},\"12\":{\"text\":\" \",\"style\":32,\"virtual\":\"870QQK6Jl1k12wty\"}},\"height\":33},\"19\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \",\"style\":17,\"virtual\":\"qBhmWa1xF5KaKC1K\"},\"10\":{\"text\":\" \",\"style\":17,\"virtual\":\"870QQK6Jl1k12wty\"}}},\"20\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"21\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"22\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"23\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"24\":{\"cells\":{\"0\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"25\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"26\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"27\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"28\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1542,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg_1606963700202.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"黑体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"宋体\",\"bold\":true}},{\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"宋体\",\"bold\":false}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"left\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":12},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":12}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":12},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":12},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"name\":\"宋体\",\"size\":10.5}},{\"font\":{\"name\":\"宋体\",\"size\":10.5}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#ffffff\",\"bgcolor\":\"104c7e\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"color\":\"#ffffff\",\"bgcolor\":\"104c7e\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#ffffff\",\"bgcolor\":\"#104c7e\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"color\":\"#ffffff\",\"bgcolor\":\"#104c7e\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"border\":{\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#ffffff\",\"bgcolor\":\"\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":10.5,\"bold\":true},\"color\":\"#ffffff\",\"bgcolor\":\"\"},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"宋体\",\"bold\":true},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"size\":16,\"name\":\"宋体\",\"bold\":true},\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}}],\"validations\":[],\"cols\":{\"0\":{\"width\":80},\"4\":{\"width\":161},\"12\":{\"width\":201},\"len\":27},\"merges\":[\"B1:M1\",\"F2:M2\",\"B12:D17\",\"E12:G17\",\"H12:K17\",\"L12:M17\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201125133720_1606306665506.png', 'admin', '2020-11-25 10:48:14', 'admin', '2021-01-13 14:14:14', 0, NULL, NULL, 1, 1753); +INSERT INTO `jimu_report` VALUES ('1331503965770223616', '20201125155042', '房屋销售综合展示大屏', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":1,\"width\":\"338\",\"height\":\"378\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"缤纷南郡\\\",\\\"中航华府\\\",\\\"3中家属楼\\\",\\\"幸福家园\\\",\\\"水晶国际\\\",\\\"绿城小区\\\",\\\"缤纷南郡二期\\\",\\\"国奥家园\\\",\\\"西西胡同\\\",\\\"融创学府\\\",\\\"蓝湾国际\\\",\\\"广发小区\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"房子\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":60,\\\"left\\\":71,\\\"bottom\\\":39,\\\"right\\\":29},\\\"series\\\":[{\\\"barWidth\\\":13,\\\"data\\\":[2,2,2,3,4,3,3,5,2,7,4,8],\\\"name\\\":\\\"房子\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#67994B\\\",\\\"barBorderRadius\\\":7},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"各楼盘成交量排名\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg2_1606963303501.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331511745851731969\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"chengjiao\",\"chartType\":\"bar.multi.horizontal\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"5ggWQtDUvSopC4iL\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2],[1,3]]},{\"row\":1,\"col\":12,\"width\":\"327\",\"height\":\"152\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":34,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"高层\\\",\\\"小高层\\\",\\\"写字楼\\\",\\\"厂房\\\",\\\"公寓\\\",\\\"别墅\\\",\\\"厂房\\\",\\\"四合院\\\",\\\"loft\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":50,\\\"left\\\":30,\\\"bottom\\\":44,\\\"right\\\":24},\\\"series\\\":[{\\\"areaStyle\\\":null,\\\"data\\\":[20,25,10,5,9,1,5,1,20],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":false,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#D04672\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":true}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"房形分析\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1607938818911.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331922734933987329\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"fangyuan\",\"chartType\":\"line.smooth\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"nk6I2RCefm9scS1k\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,12],[1,13],[1,14],[1,15]]},{\"row\":7,\"col\":12,\"width\":\"324\",\"height\":\"215\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"1室\\\",\\\"2室\\\",\\\"3室\\\",\\\"4室\\\",\\\"5室\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"right\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"1室\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(53,165,180,1)\\\"}},{\\\"name\\\":\\\"2室\\\",\\\"value\\\":30,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(60,140,198,1)\\\"}},{\\\"name\\\":\\\"3室\\\",\\\"value\\\":20,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(93,144,81,1)\\\"}},{\\\"name\\\":\\\"4室\\\",\\\"value\\\":5,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(191,146,68,1)\\\"}},{\\\"name\\\":\\\"5室\\\",\\\"value\\\":3,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(188,69,117,1)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"160\\\",\\\"120\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":\\\"8\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"40%\\\",\\\"50%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"不同户型销售\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608536502813.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331919172472524801\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"huxingxiaoshou\",\"chartType\":\"pie.doughnut\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"MCJP8uqwe57YoCvF\"},\"layer_id\":\"MCJP8uqwe57YoCvF\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[7,12],[7,13],[7,14],[7,15]]},{\"row\":7,\"col\":4,\"width\":\"662\",\"height\":\"222\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\",\\\"7月\\\",\\\"8月\\\",\\\"9月\\\",\\\"10月\\\",\\\"11月\\\",\\\"12月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#A98E8E\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"成交量\\\",\\\"成交价\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#FBF8F8\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"grid\\\":{\\\"top\\\":58,\\\"left\\\":30,\\\"bottom\\\":43,\\\"right\\\":32},\\\"series\\\":[{\\\"barWidth\\\":15,\\\"stack\\\":\\\"1\\\",\\\"data\\\":[10,7,5,5,7,9,3,6,5,8,6,6],\\\"name\\\":\\\"成交量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#37A5B1\\\",\\\"barBorderRadius\\\":13},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":7,\\\"typeData\\\":[{\\\"name\\\":\\\"成交量\\\",\\\"type\\\":\\\"\\\",\\\"_index\\\":0,\\\"_rowKey\\\":136,\\\"stack\\\":\\\"1\\\"},{\\\"name\\\":\\\"成交价\\\",\\\"type\\\":\\\"\\\",\\\"stack\\\":\\\"1\\\",\\\"_index\\\":1,\\\"_rowKey\\\":139}]},{\\\"barWidth\\\":15,\\\"stack\\\":\\\"1\\\",\\\"data\\\":[5,5,12,5,5,5,5,10,5,5,5,5],\\\"name\\\":\\\"成交价\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#2E72A7\\\",\\\"barBorderRadius\\\":13},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":7,\\\"typeData\\\":[{\\\"name\\\":\\\"成交量\\\",\\\"type\\\":\\\"\\\",\\\"_index\\\":0,\\\"_rowKey\\\":136,\\\"stack\\\":\\\"1\\\"},{\\\"name\\\":\\\"成交价\\\",\\\"type\\\":\\\"\\\",\\\"stack\\\":\\\"1\\\",\\\"_index\\\":1,\\\"_rowKey\\\":139}]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"成交量和成交价趋势\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/QQ截图20201207201434_1607343287788.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331872643531526146\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"chengjiao1\",\"chartType\":\"bar.stack\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"Nf6Xud4fZqEfvQw4\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[7,4],[7,5],[7,6],[7,7],[7,8],[7,9],[7,10],[7,11]]},{\"row\":16,\"col\":12,\"width\":\"326\",\"height\":\"200\",\"config\":\"{\\\"radar\\\":[{\\\"indicator\\\":[{\\\"name\\\":\\\"房产证\\\",\\\"max\\\":520},{\\\"name\\\":\\\"购房发票\\\",\\\"max\\\":310},{\\\"name\\\":\\\"购房合同\\\",\\\"max\\\":380},{\\\"name\\\":\\\"预售合同\\\",\\\"max\\\":450},{\\\"name\\\":\\\"抵押合同\\\",\\\"max\\\":600},{\\\"name\\\":\\\"预收合同\\\",\\\"max\\\":350}],\\\"shape\\\":\\\"polygon\\\",\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"gray\\\",\\\"opacity\\\":0.5}},\\\"center\\\":[\\\"50%\\\",\\\"50%\\\"],\\\"name\\\":{\\\"formatter\\\":\\\"【{value}】\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#72ACD1\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"gray\\\",\\\"opacity\\\":0.5}}}],\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"售后产权\\\",\\\"单位产权\\\",\\\"个人产权\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"type\\\":\\\"radar\\\",\\\"data\\\":[{\\\"name\\\":\\\"售后产权\\\",\\\"value\\\":[43,100,280,350,500,250],\\\"areaStyle\\\":{\\\"color\\\":\\\"#3F9AFB\\\",\\\"opacity\\\":1},\\\"lineStyle\\\":{\\\"color\\\":\\\"#2D8CF0\\\"}},{\\\"name\\\":\\\"单位产权\\\",\\\"value\\\":[190,50,140,280,310,150],\\\"areaStyle\\\":{\\\"color\\\":\\\"#A6F65C\\\",\\\"opacity\\\":1},\\\"lineStyle\\\":{\\\"color\\\":\\\"#55FE4D\\\"}},{\\\"name\\\":\\\"个人产权\\\",\\\"value\\\":[420,210,160,0,120,130],\\\"areaStyle\\\":{\\\"color\\\":\\\"rgba(188,69,117,1)\\\",\\\"opacity\\\":1},\\\"lineStyle\\\":{\\\"color\\\":\\\"rgba(188,69,117,1)\\\"}}]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"不同产权、证件成交量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608274537110.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331916030221602818\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"btchanquan\",\"chartType\":\"radar.basic\",\"isTiming\":true,\"intervalTime\":\"10\",\"id\":\"IWoBtyiRxjkEbkfD\"},\"layer_id\":\"IWoBtyiRxjkEbkfD\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[16,12],[16,13],[16,14],[16,15]]},{\"row\":16,\"col\":1,\"width\":\"337\",\"height\":\"205\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"马小姐\\\",\\\"孙小姐\\\",\\\"王先生\\\",\\\"李先生\\\",\\\"赵小姐\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"房子\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":70,\\\"bottom\\\":40,\\\"right\\\":24},\\\"series\\\":[{\\\"barWidth\\\":13,\\\"data\\\":[20,15,12,10,7],\\\"name\\\":\\\"房子\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#37A5B1\\\",\\\"barBorderRadius\\\":7},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"销售量成交排行榜\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1606961907450.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331514838211407873\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"cjpaihang\",\"chartType\":\"bar.multi.horizontal\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"Cror94F1kmbP71ip\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[16,1],[16,2],[16,3]]},{\"row\":16,\"col\":4,\"width\":\"334\",\"height\":\"206\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"马小姐\\\",\\\"孙小姐\\\",\\\"王先生\\\",\\\"李先生\\\",\\\"赵小姐\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"房子\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":56,\\\"bottom\\\":38,\\\"right\\\":30},\\\"series\\\":[{\\\"barWidth\\\":13,\\\"data\\\":[20,15,12,10,7],\\\"name\\\":\\\"房子\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#2E72A7\\\",\\\"barBorderRadius\\\":7},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"销售员成交金额\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1606961918589.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331514838211407873\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"cjpaihang\",\"chartType\":\"bar.multi.horizontal\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"pBOwp0Q0g4iuJCVm\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[16,4],[16,5],[16,6],[16,7]]},{\"row\":16,\"col\":8,\"width\":\"324\",\"height\":\"206\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"简装\\\",\\\"中装\\\",\\\"精装\\\",\\\"豪装\\\",\\\"毛坯\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"简装\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(52,158,172,1)\\\"}},{\\\"name\\\":\\\"中装\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(56,131,185,1)\\\"}},{\\\"name\\\":\\\"精装\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(103,153,75,1)\\\"}},{\\\"name\\\":\\\"豪装\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(230,165,55,1)\\\"}},{\\\"name\\\":\\\"毛坯\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"180\\\",\\\"100\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"52%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"不同装修类型销售销量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608535503498.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1331878107552010242\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"zhuangxiu\",\"chartType\":\"pie.simple\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"rQgkcYfLy4x0EP6h\"},\"layer_id\":\"rQgkcYfLy4x0EP6h\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[16,8],[16,9],[16,10],[16,11]]}],\"area\":false,\"printElWidth\":794,\"excel_config_id\":\"1331503965770223616\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"0\":{\"text\":\"\"},\"1\":{\"style\":60,\"merge\":[0,13],\"text\":\"房屋销售综合展示大屏\"},\"2\":{\"style\":61,\"text\":\" \"},\"3\":{\"style\":61,\"text\":\" \"},\"4\":{\"style\":61,\"text\":\" \"},\"5\":{\"style\":61,\"text\":\" \"},\"6\":{\"style\":61,\"text\":\" \"},\"7\":{\"style\":61,\"text\":\" \"},\"8\":{\"style\":61,\"text\":\" \"},\"9\":{\"style\":61,\"text\":\" \"},\"10\":{\"style\":61,\"text\":\" \"},\"11\":{\"style\":61,\"text\":\" \"},\"12\":{\"style\":61,\"text\":\" \"},\"13\":{\"style\":61,\"text\":\" \"},\"14\":{\"style\":61,\"text\":\" \"}},\"height\":113},\"1\":{\"cells\":{\"1\":{\"merge\":[14,2],\"style\":43,\"text\":\" \",\"virtual\":\"5ggWQtDUvSopC4iL\"},\"2\":{\"text\":\" \",\"virtual\":\"5ggWQtDUvSopC4iL\"},\"3\":{\"text\":\" \",\"virtual\":\"5ggWQtDUvSopC4iL\"},\"4\":{\"style\":53,\"text\":\"成交量:\",\"merge\":[2,0],\"virtual\":\"5ggWQtDUvSopC4iL\"},\"5\":{\"text\":\"#{qingkuang.cjl}\",\"style\":64,\"merge\":[2,0]},\"7\":{\"style\":53,\"text\":\"成交金额:\",\"merge\":[2,0]},\"8\":{\"text\":\"#{qingkuang.cjje}\",\"style\":68,\"merge\":[2,0]},\"10\":{\"style\":53,\"text\":\"销售面积:\",\"merge\":[2,0]},\"11\":{\"text\":\"#{qingkuang.xsmj}\",\"style\":64,\"merge\":[2,0]},\"12\":{\"text\":\" \",\"virtual\":\"nk6I2RCefm9scS1k\"},\"13\":{\"text\":\" \",\"virtual\":\"nk6I2RCefm9scS1k\"},\"14\":{\"text\":\" \",\"virtual\":\"nk6I2RCefm9scS1k\"},\"15\":{\"text\":\" \",\"virtual\":\"nk6I2RCefm9scS1k\"}},\"isDrag\":true},\"2\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"style\":53,\"text\":\" \"},\"5\":{\"style\":64,\"text\":\" \"},\"7\":{\"style\":53,\"text\":\" \"},\"8\":{\"style\":68,\"text\":\" \"},\"10\":{\"style\":53,\"text\":\" \"},\"11\":{\"style\":64,\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"3\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"style\":53,\"text\":\" \"},\"5\":{\"style\":64,\"text\":\" \"},\"7\":{\"style\":53,\"text\":\" \"},\"8\":{\"style\":68,\"text\":\" \"},\"10\":{\"style\":53,\"text\":\" \"},\"11\":{\"style\":64,\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"4\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"style\":58,\"text\":\"成交均价:\",\"merge\":[2,0]},\"5\":{\"text\":\"#{qingkuang.cjjj}\",\"style\":65,\"merge\":[2,0]},\"7\":{\"style\":58,\"text\":\"售房佣金:\",\"merge\":[2,0]},\"8\":{\"text\":\"#{qingkuang.sfyj}\",\"style\":65,\"merge\":[2,0]},\"10\":{\"style\":58,\"text\":\"预定客户:\",\"merge\":[2,0]},\"11\":{\"text\":\"#{qingkuang.ydkh}\",\"style\":65,\"merge\":[2,0]},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}},\"isDrag\":true,\"height\":25},\"5\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"style\":58,\"text\":\" \"},\"5\":{\"style\":65,\"text\":\" \"},\"7\":{\"style\":58,\"text\":\" \"},\"8\":{\"style\":65,\"text\":\" \"},\"10\":{\"style\":58,\"text\":\" \"},\"11\":{\"style\":65,\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"6\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"style\":58,\"text\":\" \"},\"5\":{\"style\":65,\"text\":\" \"},\"7\":{\"style\":58,\"text\":\" \"},\"8\":{\"style\":65,\"text\":\" \"},\"10\":{\"style\":58,\"text\":\" \"},\"11\":{\"style\":65,\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"7\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"5\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"6\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"7\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"8\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"9\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"10\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"11\":{\"text\":\" \",\"virtual\":\"Nf6Xud4fZqEfvQw4\"},\"12\":{\"text\":\" \",\"virtual\":\"MCJP8uqwe57YoCvF\"},\"13\":{\"text\":\" \",\"virtual\":\"MCJP8uqwe57YoCvF\"},\"14\":{\"text\":\" \",\"virtual\":\"MCJP8uqwe57YoCvF\"},\"15\":{\"text\":\" \",\"virtual\":\"MCJP8uqwe57YoCvF\"}}},\"8\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"9\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"10\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"11\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"12\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"13\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"14\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"15\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"16\":{\"cells\":{\"1\":{\"style\":43,\"text\":\" \",\"merge\":[7,2],\"virtual\":\"Cror94F1kmbP71ip\"},\"2\":{\"text\":\" \",\"virtual\":\"Cror94F1kmbP71ip\"},\"3\":{\"text\":\" \",\"virtual\":\"Cror94F1kmbP71ip\"},\"4\":{\"text\":\" \",\"virtual\":\"pBOwp0Q0g4iuJCVm\"},\"5\":{\"text\":\" \",\"virtual\":\"pBOwp0Q0g4iuJCVm\"},\"6\":{\"text\":\" \",\"virtual\":\"pBOwp0Q0g4iuJCVm\"},\"7\":{\"text\":\" \",\"virtual\":\"pBOwp0Q0g4iuJCVm\"},\"8\":{\"text\":\" \",\"virtual\":\"rQgkcYfLy4x0EP6h\"},\"9\":{\"text\":\" \",\"virtual\":\"rQgkcYfLy4x0EP6h\"},\"10\":{\"text\":\" \",\"virtual\":\"rQgkcYfLy4x0EP6h\"},\"11\":{\"text\":\" \",\"virtual\":\"rQgkcYfLy4x0EP6h\"},\"12\":{\"text\":\" \",\"virtual\":\"IWoBtyiRxjkEbkfD\"},\"13\":{\"text\":\" \",\"virtual\":\"IWoBtyiRxjkEbkfD\"},\"14\":{\"text\":\" \",\"virtual\":\"IWoBtyiRxjkEbkfD\"},\"15\":{\"text\":\" \",\"virtual\":\"IWoBtyiRxjkEbkfD\"}}},\"17\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"18\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"19\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"20\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"21\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"22\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"23\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"24\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"}}},\"len\":98},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1546,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg_1606961893275.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"font\":{\"bold\":true}},{\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\"}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\"}},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":18}},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":18}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":16}},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":16}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":16},\"align\":\"center\"},{\"font\":{\"name\":\"Microsoft YaHei\",\"size\":16},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\"},{\"align\":\"right\"},{\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":14}},{\"align\":\"right\",\"font\":{\"size\":14}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":12}},{\"align\":\"right\",\"font\":{\"size\":12}},{\"align\":\"center\",\"font\":{\"size\":12}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\",\"font\":{\"size\":12}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":12}},{\"font\":{\"size\":12}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11}},{\"align\":\"right\",\"font\":{\"size\":11}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\",\"font\":{\"size\":11}},{\"align\":\"center\",\"font\":{\"size\":11}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":11}},{\"font\":{\"size\":11}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true}},{\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":16},\"align\":\"center\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\"},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":22},\"align\":\"center\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"font\":{\"size\":22}},{\"font\":{\"bold\":true,\"name\":\"Microsoft YaHei\",\"size\":22},\"align\":\"center\",\"color\":\"#000100\"},{\"color\":\"#000100\",\"font\":{\"size\":22}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\",\"font\":{\"size\":11},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"size\":11},\"color\":\"#ffffff\"},{\"font\":{\"size\":11},\"color\":\"#ffffff\"},{},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11,\"bold\":false},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":11,\"bold\":false},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":11,\"bold\":true,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"right\",\"font\":{\"size\":11,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":11,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"size\":11},\"color\":\"#ffffff\",\"border\":{\"right\":[\"thin\",\"#eee\"]}},{\"align\":\"right\",\"font\":{\"size\":16,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":15,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"size\":14},\"color\":\"#ffffff\"},{\"font\":{\"size\":14},\"color\":\"#ffffff\"},{\"align\":\"left\",\"font\":{\"size\":14},\"color\":\"#ffffff\"},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"right\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"宋体\"},\"color\":\"#ffffff\",\"valign\":\"top\"},{\"align\":\"left\",\"font\":{\"size\":14},\"color\":\"#ffffff\",\"valign\":\"top\"},{\"font\":{\"bold\":true,\"name\":\"宋体\",\"size\":22},\"align\":\"center\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"font\":{\"size\":22,\"name\":\"宋体\"}},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffffff\",\"valign\":\"top\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffffff\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffff01\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffff01\",\"valign\":\"top\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffffff\",\"bgcolor\":\"#ffff01\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffffff\",\"bgcolor\":\"\"},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"color\":\"#ffff01\",\"bgcolor\":\"\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":117},\"3\":{\"width\":140},\"4\":{\"width\":136},\"5\":{\"width\":79},\"6\":{\"width\":1},\"7\":{\"width\":123},\"8\":{\"width\":102},\"9\":{\"width\":24},\"11\":{\"width\":100},\"14\":{\"width\":124},\"len\":28},\"merges\":[\"B2:D16\",\"E8:L16\",\"B17:D24\",\"E17:H24\",\"E2:E4\",\"F2:F4\",\"E5:E7\",\"F5:F7\",\"H2:H4\",\"H5:H7\",\"I5:I7\",\"I2:I4\",\"K2:K4\",\"L2:L4\",\"K5:K7\",\"L5:L7\",\"M17:O24\",\"B1:O1\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201125161646_1606705892603.png', 'admin', '2020-11-25 15:50:43', 'admin', '2021-01-13 14:14:11', 0, NULL, NULL, 1, 693); +INSERT INTO `jimu_report` VALUES ('1333962561053396992', '20201202103422', '房地产大屏', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":1,\"width\":\"366\",\"height\":\"230\",\"config\":\"{\\\"yAxis\\\":[{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"},{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"}],\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"萧山\\\",\\\"主城\\\",\\\"余杭\\\",\\\"江东\\\",\\\"阜阳\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"出让资金(亿元)\\\",\\\"出让面积(万平方米)\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFD700\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":36,\\\"bottom\\\":65,\\\"right\\\":50},\\\"series\\\":[{\\\"barWidth\\\":15,\\\"itemStyle\\\":{\\\"color\\\":\\\"#2249B1\\\",\\\"barBorderRadius\\\":0},\\\"barMinHeight\\\":2,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"data\\\":[90,100,80,20,30],\\\"typeData\\\":[{\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"type\\\":\\\"bar\\\"},{\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"type\\\":\\\"line\\\"}]},{\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"itemStyle\\\":{\\\"color\\\":\\\"#D8807E\\\"},\\\"step\\\":false,\\\"smooth\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"line\\\",\\\"yAxisIndex\\\":1,\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"data\\\":[70,90,40,10,20],\\\"typeData\\\":[{\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"type\\\":\\\"bar\\\"},{\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"type\\\":\\\"line\\\"}]}],\\\"chartType\\\":\\\"linebar\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"crossStyle\\\":{\\\"color\\\":\\\"#999\\\"},\\\"type\\\":\\\"cross\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"土地出让面积走势\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1606877611717.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333968597264900097\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"mianji\",\"chartType\":\"mixed.linebar\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"MqcEkZ87DgSKlNKU\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2],[1,3],[1,4],[1,5]]},{\"row\":1,\"col\":13,\"width\":\"298\",\"height\":\"224\",\"config\":\"{\\\"yAxis\\\":[{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"},{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"}],\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"出让资金(亿元)\\\",\\\"出让面积(万平方米)\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFD700\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":49,\\\"bottom\\\":63,\\\"right\\\":61},\\\"series\\\":[{\\\"barWidth\\\":15,\\\"itemStyle\\\":{\\\"color\\\":\\\"#2249B1\\\",\\\"barBorderRadius\\\":0},\\\"barMinHeight\\\":2,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"bar\\\",\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"data\\\":[27000,11000,18000,17000,15000,22000],\\\"typeData\\\":[{\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"type\\\":\\\"line\\\"},{\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"type\\\":\\\"bar\\\"}]},{\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"itemStyle\\\":{\\\"color\\\":\\\"#D8807E\\\"},\\\"step\\\":false,\\\"smooth\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"},\\\"labelPositionArray\\\":[{\\\"value\\\":\\\"top\\\",\\\"text\\\":\\\"上方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"left\\\",\\\"text\\\":\\\"左边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"right\\\",\\\"text\\\":\\\"右边\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"bottom\\\",\\\"text\\\":\\\"下方\\\",\\\"type\\\":\\\"bar\\\"},{\\\"value\\\":\\\"inside\\\",\\\"text\\\":\\\"内部\\\",\\\"type\\\":\\\"bar\\\"}]},\\\"type\\\":\\\"line\\\",\\\"yAxisIndex\\\":1,\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"data\\\":[24312,25450,26161,26303,27156,27440],\\\"typeData\\\":[{\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"type\\\":\\\"line\\\"},{\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"type\\\":\\\"bar\\\"}]}],\\\"chartType\\\":\\\"linebar\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"crossStyle\\\":{\\\"color\\\":\\\"#999\\\"},\\\"type\\\":\\\"cross\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"土地出让面积成交走势\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1606887574795.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334008609356390402\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"churang1\",\"chartType\":\"mixed.linebar\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"rxyH40yMvbmwdgoU\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,13],[1,14],[1,15]]},{\"row\":1,\"col\":5,\"width\":\"680\",\"height\":\"421\",\"config\":\"{\\\"geo\\\":{\\\"map\\\":\\\"hangzhou\\\",\\\"zoom\\\":0.8,\\\"label\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"6\\\",\\\"show\\\":true},\\\"itemStyle\\\":{\\\"borderWidth\\\":0.5,\\\"areaColor\\\":\\\"#3BB7C4\\\",\\\"borderColor\\\":\\\"#000\\\"},\\\"emphasis\\\":{\\\"label\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"itemStyle\\\":{\\\"areaColor\\\":\\\"#2D5D81\\\"}},\\\"regions\\\":[],\\\"layoutSize\\\":600,\\\"roam\\\":true,\\\"layoutCenter\\\":[\\\"50%\\\",\\\"50%\\\"]},\\\"series\\\":[{\\\"encode\\\":{\\\"value\\\":[2]},\\\"data\\\":[{\\\"name\\\":\\\"西湖区\\\",\\\"value\\\":[120.147376,30.272934,120]},{\\\"name\\\":\\\"萧山区\\\",\\\"value\\\":[120.27069,30.162932,130]},{\\\"name\\\":\\\"余杭区\\\",\\\"value\\\":[120.301737,30.421187,56]},{\\\"name\\\":\\\"富阳区\\\",\\\"value\\\":[119.949869,30.049871,100]}],\\\"name\\\":\\\"\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"show\\\":true}},\\\"itemStyle\\\":{\\\"color\\\":\\\"#F6F469\\\"},\\\"coordinateSystem\\\":\\\"geo\\\",\\\"label\\\":{\\\"formatter\\\":\\\"{b}\\\",\\\"show\\\":false,\\\"position\\\":\\\"right\\\"},\\\"type\\\":\\\"scatter\\\",\\\"symbolSize\\\":8}],\\\"chartType\\\":\\\"map\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"主要城市空气质量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1335901385547431937\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"ditu\",\"chartType\":\"map.scatter\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"L8v349B78nEYLOh4\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12]]},{\"row\":10,\"col\":1,\"width\":\"365\",\"height\":\"203\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"1万以下\\\",\\\"1万-2万\\\",\\\"2万-3万\\\",\\\"3万-4万\\\",\\\"4万-5万\\\",\\\"5万-6万\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"1万以下\\\",\\\"value\\\":7800,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(239,223,133,1)\\\"}},{\\\"name\\\":\\\"1万-2万\\\",\\\"value\\\":35900,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(24,141,240,1)\\\"}},{\\\"name\\\":\\\"2万-3万\\\",\\\"value\\\":46800,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(136,232,137,1)\\\"}},{\\\"name\\\":\\\"3万-4万\\\",\\\"value\\\":25631,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(0,206,209,1)\\\"}},{\\\"name\\\":\\\"4万-5万\\\",\\\"value\\\":17583,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(217,96,172,1)\\\"}},{\\\"name\\\":\\\"5万-6万\\\",\\\"value\\\":1563,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(109,172,234,1)\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"180\\\",\\\"120\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"50%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"住宅成交量单价分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608534816945.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333974073679552514\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"danjia\",\"chartType\":\"pie.simple\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"ciJhTy5hoC2HlZ3v\"},\"layer_id\":\"ciJhTy5hoC2HlZ3v\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,1],[10,2],[10,3],[10,4],[10,5]]},{\"row\":10,\"col\":13,\"width\":\"301\",\"height\":\"203\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"80平\\\",\\\"80-100平\\\",\\\"100-120平\\\",\\\"120-140平\\\",\\\"140-180平\\\",\\\"180-250平\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"80平\\\",\\\"value\\\":20839,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(131,191,246,1)\\\"}},{\\\"name\\\":\\\"80-100平\\\",\\\"value\\\":35141,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(136,232,137,1)\\\"}},{\\\"name\\\":\\\"100-120平\\\",\\\"value\\\":27135,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(154,168,212,1)\\\"}},{\\\"name\\\":\\\"120-140平\\\",\\\"value\\\":17502,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(24,141,240,1)\\\"}},{\\\"name\\\":\\\"140-180平\\\",\\\"value\\\":14510,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(86,74,163,1)\\\"}},{\\\"name\\\":\\\"180-250平\\\",\\\"value\\\":9350,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(239,223,133,1)\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"180\\\",\\\"110\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"55%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"住宅成交量单价分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608535190322.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334013423209422849\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"zhuzhaichengjiao\",\"chartType\":\"pie.simple\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"ySncqf3fM8HfjJf0\"},\"layer_id\":\"ySncqf3fM8HfjJf0\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,13],[10,14],[10,15],[10,16]]},{\"row\":18,\"col\":13,\"width\":\"307\",\"height\":\"214\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":38,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"余杭\\\",\\\"大江东\\\",\\\"之江\\\",\\\"江干\\\",\\\"上城\\\",\\\"滨江\\\",\\\"拱墅\\\",\\\"西湖\\\",\\\"临安\\\",\\\"阜阳\\\",\\\"下沙\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":57,\\\"left\\\":53,\\\"bottom\\\":51,\\\"right\\\":39},\\\"series\\\":[{\\\"areaStyle\\\":null,\\\"data\\\":[23000,55000,32000,38000,45000,42000,41000,18000,22000,21000,30000],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":false,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#EEF349\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"各类型土地成交金额表\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1607936269772.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333977108195581953\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"junjia\",\"chartType\":\"line.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"tc7fqIIJW5HgcaGl\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[18,13],[18,14],[18,15],[18,16]]},{\"row\":18,\"col\":5,\"width\":\"350\",\"height\":\"215\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":true},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"出让资金(亿元)\\\",\\\"出让面积(万平方米)\\\",\\\"盈亏\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFD700\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":36,\\\"bottom\\\":59,\\\"right\\\":32},\\\"series\\\":[{\\\"barWidth\\\":8,\\\"stack\\\":\\\"1\\\",\\\"data\\\":[420,150,410,250,180,100],\\\"name\\\":\\\"出让资金(亿元)\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#2249B1\\\",\\\"barBorderRadius\\\":0},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]},{\\\"barWidth\\\":8,\\\"stack\\\":\\\"1\\\",\\\"data\\\":[410,139,330,190,250,13],\\\"name\\\":\\\"出让面积(万平方米)\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#D8807E\\\",\\\"barBorderRadius\\\":0},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]},{\\\"barWidth\\\":8,\\\"stack\\\":\\\"1\\\",\\\"data\\\":[-410,-139,-330,-190,-250,-13],\\\"name\\\":\\\"盈亏\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#88E889\\\",\\\"barBorderRadius\\\":0},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"各区域土地出让面积、成交金额对比\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1607393405721.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333980382663548929\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"churang\",\"chartType\":\"bar.stack.horizontal\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"FlAtAueGAEeNYmrK\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[18,5],[18,6],[18,7],[18,8]]},{\"row\":18,\"col\":9,\"width\":\"332\",\"height\":\"214\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#1E90FF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"供给\\\",\\\"需求\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFD700\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":54,\\\"bottom\\\":60,\\\"right\\\":28},\\\"series\\\":[{\\\"barWidth\\\":0,\\\"data\\\":[1000,3500,5032,1966,7964,11532],\\\"name\\\":\\\"供给\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#188DF0\\\",\\\"barBorderRadius\\\":0},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]},{\\\"barWidth\\\":0,\\\"data\\\":[12854,59873,83241,60075,42035,95812],\\\"name\\\":\\\"需求\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#88E889\\\",\\\"barBorderRadius\\\":0},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"新住宅供需\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1606880990858.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333983587241828354\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"xinzhuzhai\",\"chartType\":\"bar.multi\"},\"layer_id\":\"6mjMdjSCbjMXtpk5\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[18,9],[18,10],[18,11],[18,12]]},{\"row\":18,\"col\":1,\"width\":\"357\",\"height\":\"216\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":28,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"余杭\\\",\\\"大江东\\\",\\\"之江\\\",\\\"江干\\\",\\\"上城\\\",\\\"滨江\\\",\\\"拱墅\\\",\\\"西湖\\\",\\\"临安\\\",\\\"阜阳\\\",\\\"下沙\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":49,\\\"left\\\":51,\\\"bottom\\\":50,\\\"right\\\":30},\\\"series\\\":[{\\\"areaStyle\\\":null,\\\"data\\\":[23000,55000,32000,38000,45000,42000,41000,18000,22000,21000,30000],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":false,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#88E889\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"各区域住宅成交均价\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1607935883871.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1333977108195581953\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"junjia\",\"chartType\":\"line.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"m4YsRktrtZgDdIrS\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[18,1],[18,2],[18,3],[18,4]]}],\"area\":{\"sri\":0,\"sci\":1,\"eri\":0,\"eci\":15,\"width\":1346,\"height\":71},\"printElWidth\":13001,\"excel_config_id\":\"1333962561053396992\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"杭州房地产市场监控\",\"style\":3,\"merge\":[0,14]},\"2\":{\"style\":4},\"3\":{\"style\":4},\"4\":{\"style\":4},\"5\":{\"style\":4},\"6\":{\"style\":4},\"7\":{\"style\":4},\"8\":{\"style\":4},\"9\":{\"style\":4},\"10\":{\"style\":4},\"11\":{\"style\":4},\"12\":{\"style\":4},\"13\":{\"style\":4},\"14\":{\"style\":4},\"15\":{\"style\":4}},\"height\":71},\"1\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"MqcEkZ87DgSKlNKU\"},\"2\":{\"text\":\" \",\"virtual\":\"MqcEkZ87DgSKlNKU\"},\"3\":{\"text\":\" \",\"virtual\":\"MqcEkZ87DgSKlNKU\"},\"4\":{\"text\":\" \",\"virtual\":\"MqcEkZ87DgSKlNKU\"},\"5\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"6\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"7\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"8\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"9\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"10\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"11\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"12\":{\"text\":\" \",\"virtual\":\"L8v349B78nEYLOh4\"},\"13\":{\"text\":\" \",\"virtual\":\"rxyH40yMvbmwdgoU\"},\"14\":{\"text\":\" \",\"virtual\":\"rxyH40yMvbmwdgoU\"},\"15\":{\"text\":\" \",\"virtual\":\"rxyH40yMvbmwdgoU\"}}},\"10\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"ciJhTy5hoC2HlZ3v\"},\"2\":{\"text\":\" \",\"virtual\":\"ciJhTy5hoC2HlZ3v\"},\"3\":{\"text\":\" \",\"virtual\":\"ciJhTy5hoC2HlZ3v\"},\"4\":{\"text\":\" \",\"virtual\":\"ciJhTy5hoC2HlZ3v\"},\"5\":{\"text\":\" \",\"virtual\":\"ciJhTy5hoC2HlZ3v\"},\"13\":{\"text\":\" \",\"virtual\":\"ySncqf3fM8HfjJf0\"},\"14\":{\"text\":\" \",\"virtual\":\"ySncqf3fM8HfjJf0\"},\"15\":{\"text\":\" \",\"virtual\":\"ySncqf3fM8HfjJf0\"},\"16\":{\"text\":\" \",\"virtual\":\"ySncqf3fM8HfjJf0\"}}},\"18\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"m4YsRktrtZgDdIrS\"},\"2\":{\"text\":\" \",\"virtual\":\"m4YsRktrtZgDdIrS\"},\"3\":{\"text\":\" \",\"virtual\":\"m4YsRktrtZgDdIrS\"},\"4\":{\"text\":\" \",\"virtual\":\"m4YsRktrtZgDdIrS\"},\"5\":{\"text\":\" \",\"virtual\":\"FlAtAueGAEeNYmrK\"},\"6\":{\"text\":\" \",\"virtual\":\"FlAtAueGAEeNYmrK\"},\"7\":{\"text\":\" \",\"virtual\":\"FlAtAueGAEeNYmrK\"},\"8\":{\"text\":\" \",\"virtual\":\"FlAtAueGAEeNYmrK\"},\"9\":{\"text\":\" \",\"virtual\":\"6mjMdjSCbjMXtpk5\"},\"10\":{\"text\":\" \",\"virtual\":\"6mjMdjSCbjMXtpk5\"},\"11\":{\"text\":\" \",\"virtual\":\"6mjMdjSCbjMXtpk5\"},\"12\":{\"text\":\" \",\"virtual\":\"6mjMdjSCbjMXtpk5\"},\"13\":{\"text\":\" \",\"virtual\":\"tc7fqIIJW5HgcaGl\"},\"14\":{\"text\":\" \",\"virtual\":\"tc7fqIIJW5HgcaGl\"},\"15\":{\"text\":\" \",\"virtual\":\"tc7fqIIJW5HgcaGl\"},\"16\":{\"text\":\" \",\"virtual\":\"tc7fqIIJW5HgcaGl\"}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1517,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg_1606876512567.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"align\":\"center\"},{\"align\":\"center\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":18}}],\"validations\":[],\"cols\":{\"0\":{\"width\":71},\"4\":{\"width\":60},\"8\":{\"width\":51},\"12\":{\"width\":35},\"len\":26},\"merges\":[\"B1:P1\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201202142202_1606890135640.png', 'admin', '2020-12-02 10:34:22', 'admin', '2021-01-13 14:14:07', 0, NULL, NULL, 1, 562); +INSERT INTO `jimu_report` VALUES ('1334028738995818496', '20201202145702', '大数据可视化展示平台', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":6,\"width\":\"498\",\"height\":\"350\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\",\\\"7月\\\",\\\"8月\\\",\\\"9月\\\",\\\"10月\\\",\\\"11月\\\",\\\"12月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"2017\\\",\\\"2018\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"grid\\\":{\\\"top\\\":68,\\\"left\\\":35,\\\"bottom\\\":45,\\\"right\\\":31},\\\"series\\\":[{\\\"barWidth\\\":9,\\\"data\\\":[2,3,3,9,15,12,6,4,6,7,4,10],\\\"name\\\":\\\"2017\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#49BCF7\\\",\\\"barBorderRadius\\\":8},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]},{\\\"barWidth\\\":9,\\\"data\\\":[1,4,5,11,12,9,5,6,6,3,3,9],\\\"name\\\":\\\"2018\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#62C98D\\\",\\\"barBorderRadius\\\":8},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"柱形图标题\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":\\\"#020F4A\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334052375119273986\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"zhuxingtu1\",\"chartType\":\"bar.multi\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"aELaGxHbJDssfJ1j\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,6],[1,7],[1,8],[1,9],[1,10]]},{\"row\":1,\"col\":11,\"width\":\"407\",\"height\":\"174\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"图例1\\\",\\\"图例2\\\",\\\"图例3\\\",\\\"图例4\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":true,\\\"data\\\":[{\\\"name\\\":\\\"图例1\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(98,201,141,1)\\\"}},{\\\"name\\\":\\\"图例2\\\",\\\"value\\\":15,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(45,140,240,1)\\\"}},{\\\"name\\\":\\\"图例3\\\",\\\"value\\\":25,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(76,185,207,1)\\\"}},{\\\"name\\\":\\\"图例4\\\",\\\"value\\\":30,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(83,182,102,1)\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"radius\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"170\\\",\\\"90\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"50%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"饼图1\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334037720053325825\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bingtu1\",\"chartType\":\"pie.rose\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"hBFP1li6wk4SZKZy\"},\"layer_id\":\"hBFP1li6wk4SZKZy\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,11],[1,12],[1,13],[1,14],[1,15]]},{\"row\":4,\"col\":3,\"width\":\"214\",\"height\":\"151\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量结算率\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量结算率\\\",\\\"value\\\":80,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(73,188,247,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":20,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(220,222,224,1)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"110\\\",\\\"80\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"38%\\\",\\\"45%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"数据结算率1\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"12\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334060474135748610\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bingtu4\",\"chartType\":\"pie.doughnut\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"7jVBJ8HTXwnRttsp\"},\"layer_id\":\"7jVBJ8HTXwnRttsp\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[4,3],[4,4],[4,5]]},{\"row\":4,\"col\":1,\"width\":\"198\",\"height\":\"150\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量结算率\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量结算率\\\",\\\"value\\\":80,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(73,188,247,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":20,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(220,222,224,1)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"110\\\",\\\"80\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"38%\\\",\\\"45%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"数据结算率\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"12\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334060474135748610\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bingtu4\",\"chartType\":\"pie.doughnut\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"mHCyVw72XWRJdiO9\"},\"layer_id\":\"mHCyVw72XWRJdiO9\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[4,1],[4,2]]},{\"row\":8,\"col\":11,\"width\":\"408\",\"height\":\"164\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"orient\\\":\\\"vertical\\\",\\\"data\\\":[{\\\"name\\\":\\\"1月\\\",\\\"value\\\":9800,\\\"itemStyle\\\":{\\\"color\\\":\\\"#62C98D\\\"}},{\\\"name\\\":\\\"2月\\\",\\\"value\\\":3100,\\\"itemStyle\\\":{\\\"color\\\":\\\"#2F89CF\\\"}},{\\\"name\\\":\\\"3月\\\",\\\"value\\\":7800,\\\"itemStyle\\\":{\\\"color\\\":\\\"#F2E83B\\\"}},{\\\"name\\\":\\\"4月\\\",\\\"value\\\":1500,\\\"itemStyle\\\":{\\\"color\\\":\\\"#F691F8\\\"}},{\\\"name\\\":\\\"5月\\\",\\\"value\\\":500,\\\"itemStyle\\\":{\\\"color\\\":\\\"#A3DEEB\\\"}}],\\\"bottom\\\":26,\\\"itemStyle\\\":{\\\"borderColor\\\":\\\"#fff\\\",\\\"borderWidth\\\":1},\\\"sort\\\":\\\"ascending\\\",\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"labelLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"length\\\":10},\\\"type\\\":\\\"funnel\\\",\\\"top\\\":29,\\\"left\\\":\\\"9%\\\",\\\"gap\\\":2,\\\"name\\\":\\\"漏斗图\\\",\\\"width\\\":\\\"79%\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"fontSize\\\":20}}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}%\\\",\\\"show\\\":true,\\\"trigger\\\":\\\"item\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"漏斗图\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1335889985047478274\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"loudou\",\"chartType\":\"funnel.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"8IhEqgKnyGamOhrE\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,11],[8,12],[8,13],[8,14],[8,15]]},{\"row\":10,\"col\":1,\"width\":\"204\",\"height\":\"126\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"金额结算率1\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"金额结算率1\\\",\\\"value\\\":30,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(98,201,141,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":70,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(220,222,224,1)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"105\\\",\\\"70\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"金额结算率\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"12\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334063192933933058\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bingtu5\",\"chartType\":\"pie.doughnut\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"Py8YVZMoRcL4APDN\"},\"layer_id\":\"Py8YVZMoRcL4APDN\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,1],[10,2],[10,3]]},{\"row\":10,\"col\":3,\"width\":\"216\",\"height\":\"126\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"金额结算率2\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"金额结算率2\\\",\\\"value\\\":190,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(98,201,141,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":10,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(220,222,224,1)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"105\\\",\\\"70\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"金额结算率2\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(2,15,74,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334063880162254850\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"bingtu6\",\"chartType\":\"pie.doughnut\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"fMnJPCVW1ofDhOYl\"},\"layer_id\":\"fMnJPCVW1ofDhOYl\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,3],[10,4],[10,5],[10,6]]},{\"row\":15,\"col\":11,\"width\":\"410\",\"height\":\"273\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"value\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"1月\\\",\\\"2月\\\",\\\"3月\\\",\\\"4月\\\",\\\"5月\\\",\\\"6月\\\",\\\"7月\\\",\\\"8月\\\",\\\"9月\\\",\\\"10月\\\",\\\"11月\\\",\\\"12月\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\",\\\"boundaryGap\\\":true},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"2017\\\",\\\"2018\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":60,\\\"left\\\":39,\\\"bottom\\\":48,\\\"right\\\":35},\\\"series\\\":[{\\\"data\\\":[2,6,3,8,5,8,10,13,8,5,6,9],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"name\\\":\\\"2017\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#205ACF\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false,\\\"typeData\\\":[]},{\\\"data\\\":[5,2,6,4,5,12,5,17,9,2,6,3],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"name\\\":\\\"2018\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#62C98D\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false,\\\"typeData\\\":[]}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"多数据折线标题\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":\\\"#020F4A\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334043138246844418\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"zhexian1\",\"chartType\":\"line.multi\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartId\":\"\"},\"layer_id\":\"aXbsAJNPWFEfutG9\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,11],[15,12],[15,13],[15,14],[15,15]]},{\"row\":15,\"col\":6,\"width\":\"495\",\"height\":\"273\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#EEEEEE\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":49,\\\"left\\\":37,\\\"bottom\\\":41,\\\"right\\\":38},\\\"series\\\":[{\\\"data\\\":[[10,35],[20,10],[15,30],[10,10],[15,35],[5,10],[10,35],[20,15],[10,3],[20,40],[16,12],[43,10]],\\\"symbolSize\\\":37,\\\"itemStyle\\\":{\\\"color\\\":\\\"#62C98D\\\",\\\"opacity\\\":0.6},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"scatter\\\"}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"padding\\\":[5,20,5,20],\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"text\\\":\\\"散点图\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"14\\\",\\\"fontWeight\\\":\\\"normal\\\"},\\\"top\\\":10},\\\"backgroundColor\\\":\\\"#020F4A\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1335886666363158530\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"sandian\",\"chartType\":\"scatter.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"QFBt4au5CSQVFVAq\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,6],[15,7],[15,8],[15,9],[15,10]]}],\"area\":false,\"printElWidth\":794,\"excel_config_id\":\"1334028738995818496\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"merge\":[0,13],\"text\":\"大数据可视化展示平台\",\"style\":5},\"2\":{\"style\":5},\"3\":{\"style\":5},\"4\":{\"style\":5},\"5\":{\"style\":5},\"6\":{\"style\":5},\"7\":{\"style\":5},\"8\":{\"style\":5},\"9\":{\"style\":5},\"10\":{\"style\":5},\"11\":{\"style\":5},\"12\":{\"style\":5},\"13\":{\"style\":5},\"14\":{\"style\":5}},\"height\":84},\"1\":{\"cells\":{\"1\":{\"merge\":[1,1],\"text\":\"1922\",\"style\":49},\"2\":{\"style\":49},\"3\":{\"merge\":[1,1],\"text\":\"2047\",\"style\":49},\"4\":{\"style\":49},\"6\":{\"text\":\" \",\"virtual\":\"aELaGxHbJDssfJ1j\"},\"7\":{\"text\":\" \",\"virtual\":\"aELaGxHbJDssfJ1j\"},\"8\":{\"text\":\" \",\"virtual\":\"aELaGxHbJDssfJ1j\"},\"9\":{\"text\":\" \",\"virtual\":\"aELaGxHbJDssfJ1j\"},\"10\":{\"text\":\" \",\"virtual\":\"aELaGxHbJDssfJ1j\"},\"11\":{\"text\":\" \",\"virtual\":\"hBFP1li6wk4SZKZy\"},\"12\":{\"text\":\" \",\"virtual\":\"hBFP1li6wk4SZKZy\"},\"13\":{\"text\":\" \",\"virtual\":\"hBFP1li6wk4SZKZy\"},\"14\":{\"text\":\" \",\"virtual\":\"hBFP1li6wk4SZKZy\"},\"15\":{\"text\":\" \",\"virtual\":\"hBFP1li6wk4SZKZy\"}}},\"2\":{\"cells\":{\"1\":{\"style\":49},\"2\":{\"style\":49},\"3\":{\"style\":49},\"4\":{\"style\":49}}},\"3\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"总金额\",\"style\":68},\"2\":{\"style\":68},\"3\":{\"merge\":[0,1],\"style\":68,\"text\":\"数量\"},\"4\":{\"style\":68}}},\"4\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"mHCyVw72XWRJdiO9\"},\"2\":{\"text\":\" \",\"virtual\":\"mHCyVw72XWRJdiO9\"},\"3\":{\"text\":\" \",\"virtual\":\"7jVBJ8HTXwnRttsp\"},\"4\":{\"text\":\" \",\"virtual\":\"7jVBJ8HTXwnRttsp\"},\"5\":{\"text\":\" \",\"virtual\":\"7jVBJ8HTXwnRttsp\"}}},\"8\":{\"cells\":{\"11\":{\"text\":\" \",\"virtual\":\"8IhEqgKnyGamOhrE\"},\"12\":{\"text\":\" \",\"virtual\":\"8IhEqgKnyGamOhrE\"},\"13\":{\"text\":\" \",\"virtual\":\"8IhEqgKnyGamOhrE\"},\"14\":{\"text\":\" \",\"virtual\":\"8IhEqgKnyGamOhrE\"},\"15\":{\"text\":\" \",\"virtual\":\"8IhEqgKnyGamOhrE\"}}},\"9\":{\"cells\":{}},\"10\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"Py8YVZMoRcL4APDN\"},\"2\":{\"text\":\" \",\"virtual\":\"Py8YVZMoRcL4APDN\"},\"3\":{\"text\":\" \",\"virtual\":\"fMnJPCVW1ofDhOYl\"},\"4\":{\"text\":\" \",\"virtual\":\"fMnJPCVW1ofDhOYl\"},\"5\":{\"text\":\" \",\"virtual\":\"fMnJPCVW1ofDhOYl\"},\"6\":{\"text\":\" \",\"virtual\":\"fMnJPCVW1ofDhOYl\"}}},\"15\":{\"cells\":{\"1\":{\"text\":\"标题\",\"style\":72,\"merge\":[0,3]},\"2\":{\"style\":73},\"3\":{\"style\":73},\"4\":{\"style\":73},\"6\":{\"text\":\" \",\"virtual\":\"QFBt4au5CSQVFVAq\"},\"7\":{\"text\":\" \",\"virtual\":\"QFBt4au5CSQVFVAq\"},\"8\":{\"text\":\" \",\"virtual\":\"QFBt4au5CSQVFVAq\"},\"9\":{\"text\":\" \",\"virtual\":\"QFBt4au5CSQVFVAq\"},\"10\":{\"text\":\" \",\"virtual\":\"QFBt4au5CSQVFVAq\"},\"11\":{\"text\":\" \",\"virtual\":\"aXbsAJNPWFEfutG9\"},\"12\":{\"text\":\" \",\"virtual\":\"aXbsAJNPWFEfutG9\"},\"13\":{\"text\":\" \",\"virtual\":\"aXbsAJNPWFEfutG9\"},\"14\":{\"text\":\" \",\"virtual\":\"aXbsAJNPWFEfutG9\"},\"15\":{\"text\":\" \",\"virtual\":\"aXbsAJNPWFEfutG9\"}}},\"16\":{\"cells\":{\"1\":{\"text\":\"订单号\",\"style\":66},\"2\":{\"text\":\"订单金额\",\"style\":66},\"3\":{\"text\":\"计划时间\",\"style\":66},\"4\":{\"text\":\"当前状态\",\"style\":66}},\"height\":22},\"17\":{\"cells\":{\"1\":{\"style\":67,\"text\":\"#{biaoge.yname}\"},\"2\":{\"style\":67,\"text\":\"#{biaoge.ysex}\"},\"3\":{\"style\":67,\"text\":\"#{biaoge.yage}\"},\"4\":{\"style\":67,\"text\":\"#{biaoge.danwei}\"}},\"height\":22},\"18\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":17},\"19\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":19},\"20\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":19},\"21\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":19},\"22\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":19},\"23\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":17},\"24\":{\"cells\":{\"1\":{\"style\":8},\"2\":{\"style\":8},\"3\":{\"style\":8},\"4\":{\"style\":8}},\"height\":16},\"25\":{\"cells\":{\"1\":{\"style\":74},\"2\":{\"style\":74},\"3\":{\"style\":74},\"4\":{\"style\":74}},\"height\":18},\"26\":{\"cells\":{},\"height\":20},\"len\":102,\"NaN\":0},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1520,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg_1606894559245.jpg\",\"repeat\":\"repeat\",\"width\":\"1700\",\"height\":\"1080\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"align\":\"center\"},{\"align\":\"center\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"font\":{\"size\":22}},{\"align\":\"center\",\"font\":{\"size\":22}},{\"color\":\"#ffffff\",\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":18}},{\"font\":{\"size\":18}},{\"bgcolor\":\"#020F4A\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\"},{\"align\":\"center\",\"color\":\"#C7CD4F\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":24}},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":24}},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":22}},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":22}},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18}},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18}},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true}},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true}},{\"color\":\"#e\"},{\"color\":\"#e\'e\"},{\"color\":\"#e\'e\'e\"},{\"color\":\"#eee\"},{\"color\":\"#eee\",\"align\":\"center\"},{\"color\":\"#eee\",\"align\":\"center\",\"bgcolor\":\"#020F4A\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true},\"valign\":\"bottom\"},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true},\"valign\":\"bottom\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true},\"valign\":\"top\"},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18,\"bold\":true},\"valign\":\"top\"},{\"color\":\"#eee\",\"align\":\"center\",\"bgcolor\":\"#020F4A\",\"valign\":\"top\"},{\"color\":\"#C7CD4F\"},{\"color\":\"#C7CD4F\",\"font\":{\"size\":18}},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\'e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\'e\'e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\'e\'e\'e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\'e\'e\'e\'e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#e\'e\'e\'e\'e\'e\"},{\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"color\":\"#eeeeee\"},{\"color\":\"#0a0a0\"},{\"color\":\"#0a0a\"},{\"color\":\"#0a0\"},{\"color\":\"#0a\"},{\"color\":\"#0\"},{\"color\":\"#\"},{\"color\":\"\"},{\"color\":\"#0a0a0a\"},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18},\"valign\":\"bottom\"},{\"align\":\"center\",\"color\":\"#C7CD4F\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"#020F4A\"},{\"font\":{\"size\":18},\"bgcolor\":\"#020F4A\"},{\"font\":{\"size\":18},\"bgcolor\":\"#020F4A\",\"align\":\"center\"},{\"font\":{\"size\":18},\"bgcolor\":\"#020F4A\",\"align\":\"center\",\"valign\":\"bottom\"},{\"align\":\"center\",\"color\":\"#e\"},{\"align\":\"center\",\"color\":\"#e\'e\"},{\"align\":\"center\",\"color\":\"#e\'e\'e\"},{\"color\":\"#ffffff\",\"font\":{\"size\":18}},{\"color\":\"#ffffff\",\"font\":{\"size\":14}},{\"color\":\"#ffffff\",\"font\":{\"size\":12}},{\"color\":\"#ffffff\",\"font\":{\"size\":12,\"bold\":true}},{\"color\":\"#ffffff\",\"font\":{\"size\":12,\"bold\":false}},{\"color\":\"#ffffff\",\"font\":{\"size\":12,\"bold\":false},\"bgcolor\":\"#020F4A\"},{\"bgcolor\":\"#020F4A\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"bgcolor\":\"001259\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"bgcolor\":\"#001259\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"bgcolor\":\"020f4b\"},{\"color\":\"#ffffff\",\"align\":\"center\",\"bgcolor\":\"#020f4b\"},{\"bgcolor\":\"#020F4A\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"color\":\"#eee\",\"align\":\"center\",\"bgcolor\":\"#020F4A\",\"font\":{\"size\":8}},{\"bgcolor\":\"#020F4A\",\"font\":{\"size\":12}},{\"color\":\"#ffffff\",\"font\":{\"size\":10,\"bold\":false},\"bgcolor\":\"#020F4A\"},{\"bgcolor\":\"#020F4A\",\"font\":{\"size\":10}},{\"color\":\"#ffffff\",\"font\":{\"size\":11,\"bold\":false},\"bgcolor\":\"#020F4A\"},{\"bgcolor\":\"#020F4A\",\"font\":{\"size\":11}},{\"bgcolor\":\"\"}],\"validations\":[],\"cols\":{\"4\":{\"width\":103},\"5\":{\"width\":13},\"13\":{\"width\":104},\"len\":26},\"merges\":[\"AG101:MG101\",\"AG100:BG99\",\"AG98:BG98\",\"CG100:DG99\",\"CG98:DG98\",\"B2:C3\",\"D2:E3\",\"B4:C4\",\"D4:E4\",\"B1:O1\",\"B16:E16\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201203163957_1606984816365.png', 'admin', '2020-12-02 14:57:03', 'admin', '2021-01-13 14:14:02', 0, NULL, NULL, 1, 547); +INSERT INTO `jimu_report` VALUES ('1334074491629867008', '20201202175858', '乡村振兴普惠金融服务平台', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":5,\"width\":\"575\",\"height\":\"447\",\"config\":\"{\\\"geo\\\":{\\\"map\\\":\\\"shandong\\\",\\\"zoom\\\":0.8,\\\"label\\\":{\\\"color\\\":\\\"#19DEF4\\\",\\\"fontSize\\\":\\\"8\\\",\\\"show\\\":true},\\\"itemStyle\\\":{\\\"borderWidth\\\":0.5,\\\"areaColor\\\":\\\"#0C514B\\\",\\\"borderColor\\\":\\\"#000\\\"},\\\"emphasis\\\":{\\\"label\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"itemStyle\\\":{\\\"areaColor\\\":\\\"#0A2B34\\\"}},\\\"regions\\\":[],\\\"layoutSize\\\":600,\\\"roam\\\":true,\\\"layoutCenter\\\":[\\\"50%\\\",\\\"50%\\\"]},\\\"series\\\":[{\\\"encode\\\":{\\\"value\\\":[2]},\\\"data\\\":[{\\\"name\\\":\\\"济南市\\\",\\\"value\\\":[117.000923,36.675807,255]},{\\\"name\\\":\\\"青岛市\\\",\\\"value\\\":[120.355173,36.082982,300]},{\\\"name\\\":\\\"淄博市\\\",\\\"value\\\":[118.047648,36.814939,130]},{\\\"name\\\":\\\"枣庄市\\\",\\\"value\\\":[117.557964,34.856424,150]}],\\\"name\\\":\\\"\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"show\\\":true}},\\\"itemStyle\\\":{\\\"color\\\":\\\"#FFFF01\\\"},\\\"coordinateSystem\\\":\\\"geo\\\",\\\"label\\\":{\\\"formatter\\\":\\\"{b}\\\",\\\"show\\\":false,\\\"position\\\":\\\"right\\\"},\\\"type\\\":\\\"scatter\\\",\\\"symbolSize\\\":5}],\\\"chartType\\\":\\\"map\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"主要城市空气质量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1335909918854725633\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"ditu1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"map.scatter\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"fEn665Qht92lodc1\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11]]},{\"row\":3,\"col\":11,\"width\":\"362\",\"height\":\"168\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"玉米\\\",\\\"大豆\\\",\\\"花生\\\",\\\"高粱\\\",\\\"小麦\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":60,\\\"bottom\\\":40,\\\"right\\\":24},\\\"series\\\":[{\\\"areaStyle\\\":{\\\"color\\\":\\\"#6CE6BC\\\",\\\"opacity\\\":0.4},\\\"data\\\":[1000879,3400879,2300879,2400879,3000],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":true,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#9DE4D1\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"五年产业变化趋势\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#81E1B6\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(10,43,52,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334083843610648578\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"wunian\",\"chartType\":\"line.area\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"Kkx8cQxh41KDHQKJ\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[3,11],[3,12],[3,13],[3,14]]},{\"row\":8,\"col\":11,\"width\":\"359\",\"height\":\"213\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"玉米\\\",\\\"大豆\\\",\\\"花生\\\",\\\"高粱\\\",\\\"小麦\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":55,\\\"left\\\":64,\\\"bottom\\\":41,\\\"right\\\":23},\\\"series\\\":[{\\\"barWidth\\\":15,\\\"data\\\":[1000879,3400879,2300879,2400879,3000],\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":5,\\\"color\\\":\\\"#82F1B5\\\"},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"8\\\",\\\"fontWeight\\\":\\\"lighter\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":11,\\\"text\\\":\\\"农产品排名\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#7AEEBF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":\\\"rgba(10,43,52,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334083843610648578\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"wunian\",\"chartType\":\"bar.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"a7MjSGYTQuijDpR4\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,11],[8,12],[8,13],[8,14]]},{\"row\":13,\"col\":11,\"width\":\"361\",\"height\":\"235\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"玉米\\\",\\\"大豆\\\",\\\"花生\\\",\\\"高粱\\\",\\\"小麦\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"data\\\":[{\\\"name\\\":\\\"玉米\\\",\\\"value\\\":1000879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(20,235,167,1)\\\"}},{\\\"name\\\":\\\"大豆\\\",\\\"value\\\":3400879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(36,96,221,1)\\\"}},{\\\"name\\\":\\\"花生\\\",\\\"value\\\":2300879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(86,74,163,1)\\\"}},{\\\"name\\\":\\\"高粱\\\",\\\"value\\\":2400879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(253,223,80,1)\\\"}},{\\\"name\\\":\\\"小麦\\\",\\\"value\\\":3000,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(111,131,168,1)\\\"}}],\\\"bottom\\\":60,\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"minAngle\\\":0,\\\"right\\\":\\\"10%\\\",\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"pie\\\",\\\"autoSort\\\":false,\\\"isRose\\\":false,\\\"top\\\":60,\\\"left\\\":\\\"10%\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"radius\\\":\\\"90%\\\"}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"农业占比\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#14EBA7\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"rgba(10,43,52,1)\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1334083843610648578\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"wunian\",\"chartType\":\"pie.simple\",\"chartId\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"cvVQrHsdQLGGQu9k\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[13,11],[13,12],[13,13],[13,14]]}],\"area\":{\"sri\":10,\"sci\":1,\"eri\":10,\"eci\":1,\"width\":63,\"height\":62},\"printElWidth\":794,\"excel_config_id\":\"1334074491629867008\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"乡村振兴普惠金融服务平台\",\"style\":18,\"merge\":[0,8]},\"2\":{\"style\":19},\"4\":{\"style\":19},\"5\":{\"style\":19},\"6\":{\"style\":19},\"7\":{\"style\":19},\"8\":{\"style\":19},\"9\":{\"style\":19}},\"height\":57},\"1\":{\"cells\":{\"1\":{\"text\":\"Rural Revitalization-PRATT & WHITNEY FINANCIAL SERVICES PLATFORM\",\"style\":10,\"merge\":[0,3]},\"2\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"6\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"7\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"8\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"9\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"10\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"},\"11\":{\"text\":\" \",\"virtual\":\"fEn665Qht92lodc1\"}},\"height\":46},\"2\":{\"cells\":{\"1\":{\"text\":\"潍坊非常牛的企业\",\"style\":101,\"merge\":[1,3]},\"2\":{\"style\":102},\"3\":{\"style\":102},\"4\":{\"style\":102}},\"height\":20},\"3\":{\"cells\":{\"1\":{\"style\":102},\"2\":{\"style\":102},\"3\":{\"style\":102},\"4\":{\"style\":102},\"11\":{\"text\":\" \",\"virtual\":\"Kkx8cQxh41KDHQKJ\"},\"12\":{\"text\":\" \",\"virtual\":\"Kkx8cQxh41KDHQKJ\"},\"13\":{\"text\":\" \",\"virtual\":\"Kkx8cQxh41KDHQKJ\"},\"14\":{\"text\":\" \",\"virtual\":\"Kkx8cQxh41KDHQKJ\"}},\"height\":16},\"4\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"XnSfPgo35Nv22Thw\"},\"2\":{\"text\":\"12345\",\"style\":112,\"virtual\":\"XnSfPgo35Nv22Thw\"},\"3\":{\"text\":\" \",\"virtual\":\"sWakDse7OZ6sTEA0\"},\"4\":{\"text\":\"58963\",\"style\":113,\"virtual\":\"sWakDse7OZ6sTEA0\"}},\"height\":56},\"5\":{\"cells\":{\"2\":{\"text\":\"农牧耕田(亩)\",\"style\":98},\"4\":{\"text\":\"农牧耕田(亩)\",\"style\":57}},\"height\":19},\"6\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"B3anFjJ1WjdaI4dL\"},\"2\":{\"text\":\"123456\",\"style\":113,\"virtual\":\"B3anFjJ1WjdaI4dL\"},\"3\":{\"text\":\" \",\"virtual\":\"XcOdLHt5nq0gnV2s\"},\"4\":{\"text\":\"123456\",\"style\":113,\"virtual\":\"XcOdLHt5nq0gnV2s\"}},\"height\":59},\"7\":{\"cells\":{\"2\":{\"text\":\"农牧耕田(亩)\",\"style\":57},\"4\":{\"text\":\"农牧耕田(亩)\",\"style\":57},\"8\":{\"style\":94}},\"height\":16},\"8\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"DCJWFRnncFjlkJhg\"},\"2\":{\"text\":\"123456\",\"style\":113,\"virtual\":\"DCJWFRnncFjlkJhg\"},\"3\":{\"text\":\" \",\"virtual\":\"o4GJy5VBXOEAxVf5\"},\"4\":{\"text\":\"123456\",\"style\":113},\"11\":{\"text\":\" \",\"virtual\":\"a7MjSGYTQuijDpR4\"},\"12\":{\"text\":\" \",\"virtual\":\"a7MjSGYTQuijDpR4\"},\"13\":{\"text\":\" \",\"virtual\":\"a7MjSGYTQuijDpR4\"},\"14\":{\"text\":\" \",\"virtual\":\"a7MjSGYTQuijDpR4\"}},\"height\":61},\"9\":{\"cells\":{\"2\":{\"text\":\"农牧耕田(亩)\",\"style\":100},\"4\":{\"text\":\"农牧耕田(亩)\",\"style\":100}},\"height\":15},\"10\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"TrmeCgSZwslKMbfC\"},\"2\":{\"text\":\"123456\",\"style\":113,\"virtual\":\"TrmeCgSZwslKMbfC\"},\"3\":{\"text\":\" \",\"virtual\":\"QXdIZ7w5vyCKDLjv\"},\"4\":{\"text\":\"123456\",\"style\":113,\"virtual\":\"QXdIZ7w5vyCKDLjv\"}},\"height\":62},\"11\":{\"cells\":{\"2\":{\"text\":\"农牧耕田(亩)\",\"style\":100},\"4\":{\"text\":\"农牧耕田(亩)\",\"style\":57}},\"height\":15},\"12\":{\"cells\":{\"1\":{\"text\":\"龙头企业\",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":77,\"merge\":[0,2]},\"2\":{\"style\":77},\"3\":{\"style\":77},\"4\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"5\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"6\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"7\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"8\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"9\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52},\"10\":{\"text\":\" \",\"virtual\":\"7LFlMOg9juRt33q7\",\"style\":52}},\"height\":63},\"13\":{\"cells\":{\"1\":{\"style\":116,\"text\":\"排名\",\"merge\":[1,0]},\"2\":{\"style\":116,\"merge\":[1,1],\"text\":\"客户姓名\"},\"3\":{\"style\":117},\"4\":{\"style\":116,\"merge\":[1,1],\"text\":\"放款时间(min)\"},\"5\":{\"style\":116},\"6\":{\"style\":116,\"merge\":[1,1],\"text\":\"担保方式\"},\"7\":{\"style\":116},\"8\":{\"style\":116,\"merge\":[1,0],\"text\":\"放款金额\"},\"9\":{\"style\":116,\"merge\":[1,0],\"text\":\"法人机构\"},\"10\":{\"style\":116,\"merge\":[1,0],\"text\":\"客户经理\"},\"11\":{\"text\":\" \",\"virtual\":\"cvVQrHsdQLGGQu9k\"},\"12\":{\"text\":\" \",\"virtual\":\"cvVQrHsdQLGGQu9k\"},\"13\":{\"text\":\" \",\"virtual\":\"cvVQrHsdQLGGQu9k\"},\"14\":{\"text\":\" \",\"virtual\":\"cvVQrHsdQLGGQu9k\"}},\"height\":15},\"14\":{\"cells\":{\"1\":{\"style\":117},\"2\":{\"style\":117},\"3\":{\"style\":117},\"4\":{\"style\":116},\"5\":{\"style\":116},\"6\":{\"style\":116},\"7\":{\"style\":116},\"8\":{\"style\":116},\"9\":{\"style\":116},\"10\":{\"style\":116}},\"height\":22},\"15\":{\"cells\":{\"1\":{\"style\":118,\"text\":\"#{table2.name}\"},\"2\":{\"style\":118,\"merge\":[0,1],\"text\":\"#{table2.name}\"},\"3\":{\"style\":118},\"4\":{\"style\":118,\"merge\":[0,1],\"text\":\"#{table2.sj}\"},\"5\":{\"style\":118},\"6\":{\"style\":118,\"merge\":[0,1],\"text\":\"#{table2.type}\"},\"7\":{\"style\":118},\"8\":{\"style\":118,\"text\":\"#{table2.je}\"},\"9\":{\"style\":118,\"text\":\"#{table2.jg}\"},\"10\":{\"style\":118,\"text\":\"#{table2.jl}\"}},\"height\":19},\"16\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":20},\"17\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":22},\"18\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":21},\"19\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":20},\"20\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":20},\"21\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":21},\"22\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":20},\"23\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":19},\"24\":{\"cells\":{\"1\":{\"style\":93},\"2\":{\"style\":93},\"3\":{\"style\":93},\"4\":{\"style\":93},\"5\":{\"style\":93},\"6\":{\"style\":93},\"7\":{\"style\":93},\"8\":{\"style\":93},\"9\":{\"style\":93},\"10\":{\"style\":93}},\"height\":22},\"len\":99},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1504,\"background\":{\"path\":\"https://static.jero.com/designreport/images/57_1610364468144.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"font\":{\"size\":18}},{\"font\":{\"size\":18}},{\"color\":\"#ffffff\",\"font\":{\"size\":16}},{\"font\":{\"size\":16}},{\"color\":\"#ffffff\",\"font\":{\"size\":14}},{\"font\":{\"size\":14}},{\"color\":\"#ffffff\",\"font\":{\"size\":14},\"valign\":\"bottom\"},{\"font\":{\"size\":14},\"valign\":\"bottom\"},{\"color\":\"#ffffff\",\"font\":{\"size\":8}},{\"color\":\"#ffffff\",\"font\":{\"size\":8},\"valign\":\"top\"},{\"valign\":\"top\"},{\"color\":\"#ffffff\",\"font\":{\"size\":14},\"valign\":\"middle\"},{\"valign\":\"middle\"},{\"color\":\"#ffffff\",\"font\":{\"size\":16},\"valign\":\"middle\"},{\"valign\":\"middle\",\"font\":{\"size\":16}},{\"color\":\"#ffffff\",\"font\":{\"size\":18},\"valign\":\"middle\"},{\"valign\":\"middle\",\"font\":{\"size\":18}},{\"color\":\"#ffffff\",\"font\":{\"size\":18},\"valign\":\"bottom\"},{\"valign\":\"bottom\",\"font\":{\"size\":18}},{\"color\":\"#14EBA7\"},{\"color\":\"#14EBA7\",\"font\":{\"size\":16}},{\"color\":\"#14EBA7\",\"font\":{\"size\":16,\"bold\":true}},{\"color\":\"#14EBA7\",\"font\":{\"size\":16,\"bold\":true},\"bgcolor\":\"#0A2B34\"},{\"bgcolor\":\"#0A2B34\"},{\"color\":\"#ffffff\",\"font\":{\"size\":16},\"valign\":\"bottom\"},{\"color\":\"#ffffff\",\"font\":{\"size\":22},\"valign\":\"bottom\"},{\"color\":\"#e\"},{\"color\":\"#e\'e\"},{\"color\":\"#e\'e\'e\"},{\"color\":\"#eee\"},{\"color\":\"#eee\",\"font\":{\"size\":9}},{\"color\":\"#eee\",\"font\":{\"size\":8}},{\"color\":\"#0a0a0a\"},{\"color\":\"#0a0a0\"},{\"color\":\"#0a0a\"},{\"color\":\"#0a0\"},{\"color\":\"#0a\"},{\"color\":\"#0\"},{\"color\":\"#\"},{\"color\":\"#e\'e\'e\'e\"},{\"color\":\"#e\'e\'e\'e\'e\"},{\"color\":\"#e\'e\'e\'e\'e\'e\"},{\"color\":\"#eeeeee\"},{\"bgcolor\":\"#\"},{\"bgcolor\":\"#e\"},{\"bgcolor\":\"#e\'e\"},{\"bgcolor\":\"#e\'e\'e\"},{\"bgcolor\":\"#e\'e\'e\'e\"},{\"bgcolor\":\"#e\'e\'e\'e\'e\"},{\"bgcolor\":\"#e\'e\'e\'e\'e\'e\"},{\"bgcolor\":\"#eeeeee\"},{\"bgcolor\":\"\"},{\"bgcolor\":\"\",\"color\":\"#\"},{\"bgcolor\":\"\",\"color\":\"#e\"},{\"bgcolor\":\"\",\"color\":\"#e\'e\"},{\"bgcolor\":\"\",\"color\":\"#e\'e\'e\"},{\"bgcolor\":\"\",\"color\":\"#eee\"},{\"color\":\"#ffffff\",\"font\":{\"size\":18},\"bgcolor\":\"#0A2B34\"},{\"color\":\"#eeeeee\",\"bgcolor\":\"#0A2B34\"},{\"color\":\"#eee\",\"bgcolor\":\"#0A2B34\"},{\"color\":\"#eee\",\"font\":{\"size\":9},\"bgcolor\":\"#0A2B34\"},{\"color\":\"#ffffff\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"#0A2B34\"},{\"color\":\"#0A2B34\",\"font\":{\"size\":18}},{\"bgcolor\":\"#0A2B34\",\"font\":{\"size\":18}},{\"bgcolor\":\"#0A2B34\",\"font\":{\"size\":16}},{\"bgcolor\":\"#0A2B34\",\"font\":{\"size\":16},\"color\":\"#14EBA7\"},{\"color\":\"#14EBA7\",\"font\":{\"size\":16,\"bold\":false},\"bgcolor\":\"#0A2B34\"},{\"bgcolor\":\"#0A2B34\",\"font\":{\"bold\":false}},{\"font\":{\"bold\":false}},{\"bgcolor\":\"#0A2B34\",\"color\":\"#ffffff\"},{\"bgcolor\":\"#0A2B34\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#0A2B34\",\"align\":\"center\"},{\"align\":\"center\"},{\"bgcolor\":\"客户姓名\"},{\"bgcolor\":\"#ffffff\"},{\"bgcolor\":\"\",\"font\":{\"size\":16},\"color\":\"#14EBA7\"},{\"bgcolor\":\"#0A2B34\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\"},{\"valign\":\"bottom\"},{\"bgcolor\":\"#0A2B34\",\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"color\":\"#ffffff\",\"valign\":\"bottom\",\"align\":\"center\"},{\"bgcolor\":\"#0A2B34\",\"align\":\"center\",\"valign\":\"bottom\"},{\"align\":\"center\",\"valign\":\"bottom\"},{\"bgcolor\":\"#0A2B34\",\"valign\":\"bottom\"},{\"bgcolor\":\"1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\"},{\"valign\":\"bottom\",\"bgcolor\":\"1e2f37\"},{\"bgcolor\":\"1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"1e2f37\"},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\"},{\"valign\":\"bottom\",\"bgcolor\":\"#1e2f37\"},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#1e2f37\"},{\"color\":\"#ffff01\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"#0A2B34\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"bgcolor\":\"#0A2B34\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"\"},{\"color\":\"#eee\",\"font\":{\"size\":9},\"bgcolor\":\"\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"bgcolor\":\"\"},{\"color\":\"#eeeeee\",\"bgcolor\":\"\"},{\"color\":\"#14EBA7\",\"font\":{\"size\":16,\"bold\":false},\"bgcolor\":\"\"},{\"bgcolor\":\"\",\"font\":{\"bold\":false}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"size\":12}},{\"valign\":\"bottom\",\"bgcolor\":\"#1e2f37\",\"font\":{\"size\":12}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"size\":12,\"bold\":true}},{\"valign\":\"bottom\",\"bgcolor\":\"#1e2f37\",\"font\":{\"size\":12,\"bold\":true}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"bold\":true}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"size\":14}},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"\",\"align\":\"center\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"bottom\",\"bgcolor\":\"\",\"align\":\"left\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"top\",\"bgcolor\":\"\",\"align\":\"left\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"valign\":\"middle\",\"bgcolor\":\"\",\"align\":\"left\"},{\"color\":\"#ffff01\",\"font\":{\"size\":18},\"bgcolor\":\"\",\"valign\":\"middle\"},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"size\":12,\"bold\":false}},{\"valign\":\"bottom\",\"bgcolor\":\"#1e2f37\",\"font\":{\"size\":12,\"bold\":false}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"size\":10,\"bold\":false}},{\"valign\":\"bottom\",\"bgcolor\":\"#1e2f37\",\"font\":{\"size\":10,\"bold\":false}},{\"bgcolor\":\"#1e2f37\",\"color\":\"#ffffff\",\"align\":\"center\",\"font\":{\"size\":8}}],\"validations\":[],\"cols\":{\"1\":{\"width\":63},\"2\":{\"width\":118},\"3\":{\"width\":61},\"4\":{\"width\":129},\"5\":{\"width\":75},\"13\":{\"width\":158},\"len\":27},\"merges\":[\"B2:E2\",\"B1:J1\",\"B3:E4\",\"B13:D13\",\"B14:B15\",\"C14:D15\",\"E14:F15\",\"G14:H15\",\"I14:I15\",\"J14:J15\",\"K14:K15\",\"C16:D16\",\"E16:F16\",\"G16:H16\"],\"imgList\":[{\"row\":4,\"col\":3,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364690452.jpg\",\"layer_id\":\"sWakDse7OZ6sTEA0\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[4,3],[4,4]]},{\"row\":4,\"col\":1,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364695319.jpg\",\"layer_id\":\"XnSfPgo35Nv22Thw\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[4,1],[4,2]]},{\"row\":6,\"col\":3,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364684292.jpg\",\"layer_id\":\"XcOdLHt5nq0gnV2s\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,3],[6,4]]},{\"row\":6,\"col\":1,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364700977.jpg\",\"layer_id\":\"B3anFjJ1WjdaI4dL\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,1],[6,2]]},{\"row\":8,\"col\":3,\"width\":\"60\",\"height\":\"60\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364670434.jpg\",\"layer_id\":\"o4GJy5VBXOEAxVf5\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,3]]},{\"row\":8,\"col\":1,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364705821.jpg\",\"layer_id\":\"DCJWFRnncFjlkJhg\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,1],[8,2]]},{\"row\":10,\"col\":3,\"width\":\"63\",\"height\":\"58\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364642097.jpg\",\"layer_id\":\"QXdIZ7w5vyCKDLjv\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,3],[10,4]]},{\"row\":10,\"col\":1,\"width\":\"71\",\"height\":\"68\",\"src\":\"https://static.jero.com/designreport/images/64320_1610364710787.jpg\",\"layer_id\":\"TrmeCgSZwslKMbfC\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[10,1],[10,2]]}]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201203163924_1606984776379.png', 'admin', '2020-12-02 17:58:59', 'admin', '2021-01-13 14:15:29', 0, NULL, NULL, 1, 503); +INSERT INTO `jimu_report` VALUES ('1334378897302753280', '20201203140834', '区域销售表', NULL, NULL, 'datainfo', '{\"area\":false,\"printElWidth\":1580,\"excel_config_id\":\"1334378897302753280\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"区域销售表\",\"merge\":[0,22],\"style\":10},\"2\":{\"style\":10},\"3\":{\"style\":10},\"4\":{\"style\":10},\"5\":{\"style\":10},\"6\":{\"style\":10},\"7\":{\"style\":10},\"8\":{\"style\":10},\"9\":{\"style\":10},\"10\":{\"style\":10},\"11\":{\"style\":10},\"12\":{\"style\":10},\"13\":{\"style\":10},\"14\":{\"style\":10},\"15\":{\"style\":10},\"16\":{\"style\":10},\"17\":{\"style\":10},\"18\":{\"style\":10},\"19\":{\"style\":10},\"20\":{\"style\":10},\"21\":{\"style\":10},\"22\":{\"style\":10},\"23\":{\"style\":10}},\"height\":72},\"1\":{\"cells\":{\"0\":{\"style\":64},\"1\":{\"text\":\"区域\",\"merge\":[1,0],\"style\":65},\"2\":{\"text\":\"省份\",\"merge\":[1,0],\"style\":65},\"3\":{\"text\":\"1月\",\"merge\":[0,2],\"style\":65},\"4\":{\"style\":66,\"text\":\" \"},\"5\":{\"style\":66,\"text\":\" \"},\"6\":{\"text\":\"2月\",\"merge\":[0,2],\"style\":65},\"7\":{\"style\":66,\"text\":\" \"},\"8\":{\"style\":66,\"text\":\" \"},\"9\":{\"text\":\"3月\",\"merge\":[0,2],\"style\":65},\"10\":{\"style\":66,\"text\":\" \"},\"11\":{\"style\":66,\"text\":\" \"},\"12\":{\"text\":\"4月\",\"merge\":[0,2],\"style\":65},\"13\":{\"style\":66,\"text\":\" \"},\"14\":{\"style\":66,\"text\":\" \"},\"15\":{\"text\":\"5月\",\"merge\":[0,2],\"style\":65},\"16\":{\"style\":66,\"text\":\" \"},\"17\":{\"style\":66,\"text\":\" \"},\"18\":{\"text\":\"6月\",\"merge\":[0,2],\"style\":65},\"19\":{\"style\":66,\"text\":\" \"},\"20\":{\"style\":66,\"text\":\" \"},\"21\":{\"text\":\"总合计\",\"merge\":[0,2],\"style\":65},\"22\":{\"style\":66,\"text\":\" \"},\"23\":{\"style\":66,\"text\":\" \"},\"24\":{\"style\":64},\"25\":{\"style\":64}},\"height\":22},\"2\":{\"cells\":{\"0\":{\"style\":64},\"1\":{\"style\":66,\"text\":\" \"},\"2\":{\"style\":65,\"text\":\" \"},\"3\":{\"text\":\"销售额\",\"style\":65},\"4\":{\"text\":\"搭赠\",\"style\":65},\"5\":{\"text\":\"比例\",\"style\":65},\"6\":{\"text\":\"销售额\",\"style\":65},\"7\":{\"text\":\"搭赠\",\"style\":65},\"8\":{\"text\":\"比例\",\"style\":65},\"9\":{\"text\":\"销售额\",\"style\":65},\"10\":{\"text\":\"搭赠\",\"style\":65},\"11\":{\"text\":\"比例\",\"style\":65},\"12\":{\"text\":\"销售额\",\"style\":65},\"13\":{\"text\":\"搭赠\",\"style\":65},\"14\":{\"text\":\"比例\",\"style\":65},\"15\":{\"text\":\"销售额\",\"style\":65},\"16\":{\"text\":\"搭赠\",\"style\":65},\"17\":{\"text\":\"比例\",\"style\":65},\"18\":{\"text\":\"销售额\",\"style\":65},\"19\":{\"text\":\"搭赠\",\"style\":65},\"20\":{\"text\":\"比例\",\"style\":65},\"21\":{\"text\":\"销售额\",\"style\":65},\"22\":{\"text\":\"搭赠\",\"style\":65},\"23\":{\"text\":\"比例\",\"style\":65},\"24\":{\"style\":64},\"25\":{\"style\":64}},\"height\":24},\"3\":{\"cells\":{\"0\":{\"style\":67},\"1\":{\"text\":\"#{quyuxiaoshou.group(region)}\",\"style\":52,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{quyuxiaoshou.province}\",\"style\":53},\"3\":{\"text\":\"#{quyuxiaoshou.sales_1}\",\"style\":17},\"4\":{\"text\":\"#{quyuxiaoshou.gift_1}\",\"style\":17},\"5\":{\"text\":\"#{quyuxiaoshou.proportion_1}\",\"style\":17},\"6\":{\"text\":\"#{quyuxiaoshou.sales_2}\",\"style\":17},\"7\":{\"text\":\"#{quyuxiaoshou.gift_2}\",\"style\":17},\"8\":{\"text\":\"#{quyuxiaoshou.proportion_2}\",\"style\":17},\"9\":{\"text\":\"#{quyuxiaoshou.sales_3}\",\"style\":17},\"10\":{\"text\":\"#{quyuxiaoshou.gift_3}\",\"style\":17},\"11\":{\"text\":\"#{quyuxiaoshou.proportion_3}\",\"style\":17},\"12\":{\"text\":\"#{quyuxiaoshou.sales_4}\",\"style\":17},\"13\":{\"text\":\"#{quyuxiaoshou.gift_4}\",\"style\":17},\"14\":{\"text\":\"#{quyuxiaoshou.proportion_4}\",\"style\":17},\"15\":{\"text\":\"#{quyuxiaoshou.sales_5}\",\"style\":17},\"16\":{\"text\":\"#{quyuxiaoshou.gift_5}\",\"style\":17},\"17\":{\"text\":\"#{quyuxiaoshou.proportion_5}\",\"style\":15},\"18\":{\"text\":\"#{quyuxiaoshou.sales_6}\",\"style\":15},\"19\":{\"text\":\"#{quyuxiaoshou.gift_6}\",\"style\":15},\"20\":{\"text\":\"#{quyuxiaoshou.proportion_6}\",\"style\":15},\"21\":{\"text\":\"#{quyuxiaoshou.sales_z}\",\"style\":15},\"22\":{\"text\":\"#{quyuxiaoshou.gift_z}\",\"style\":15},\"23\":{\"text\":\"#{quyuxiaoshou.proportion_z}\",\"style\":15},\"24\":{\"style\":67},\"25\":{\"style\":67}},\"isDrag\":true,\"height\":56},\"4\":{\"cells\":{\"0\":{\"style\":64},\"1\":{\"style\":39,\"text\":\"总计\",\"merge\":[0,1]},\"3\":{\"style\":68,\"text\":\"=SUM(D4)\"},\"4\":{\"style\":69,\"text\":\"=SUM(E4)\"},\"5\":{\"style\":70,\"text\":\"=SUM(F4)\"},\"6\":{\"style\":69,\"text\":\"=SUM(G4)\"},\"7\":{\"style\":69,\"text\":\"=SUM(H4)\"},\"8\":{\"style\":70,\"text\":\"=SUM(I4)\"},\"9\":{\"style\":69,\"text\":\"=SUM(J4)\"},\"10\":{\"style\":69,\"text\":\"=SUM(K4)\"},\"11\":{\"style\":70,\"text\":\"=SUM(L4)\"},\"12\":{\"style\":69,\"text\":\"=SUM(M4)\"},\"13\":{\"style\":69,\"text\":\"=SUM(N4)\"},\"14\":{\"style\":70,\"text\":\"=SUM(O4)\"},\"15\":{\"style\":69,\"text\":\"=SUM(P4)\"},\"16\":{\"style\":69,\"text\":\"=SUM(Q4)\"},\"17\":{\"style\":70,\"text\":\"=SUM(R4)\"},\"18\":{\"style\":69,\"text\":\"=SUM(S4)\"},\"19\":{\"style\":69,\"text\":\"=SUM(T4)\"},\"20\":{\"style\":70,\"text\":\"=SUM(U4)\"},\"21\":{\"style\":69,\"text\":\"=SUM(V4)\"},\"22\":{\"style\":69,\"text\":\"=SUM(W4)\"},\"23\":{\"style\":69,\"text\":\"=SUM(X4)\"},\"24\":{\"style\":64},\"25\":{\"style\":64}},\"height\":38},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"quyuxiaoshou.region\",\"freeze\":\"A1\",\"dataRectWidth\":1554,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"bgcolor\":\"#02a274\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"bfbfbf\"],\"top\":[\"thin\",\"bfbfbf\"],\"left\":[\"thin\",\"bfbfbf\"],\"right\":[\"thin\",\"bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"bfbfbf\"],\"top\":[\"thin\",\"bfbfbf\"],\"left\":[\"thin\",\"bfbfbf\"],\"right\":[\"thin\",\"bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"隶书\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":true}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":true,\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":true,\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"华文中宋\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Arial\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"number\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":false,\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#aedac8\"},{\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10}},{\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":false,\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#ddefe8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10,\"name\":\"宋体\"}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":false,\"size\":10,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#ddefe8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#262626\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#aedac8\"},{\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10,\"name\":\"宋体\"}},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10,\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":false,\"size\":10,\"name\":\"Microsoft YaHei\"}},{\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"}}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":20},\"1\":{\"width\":84},\"2\":{\"width\":81},\"3\":{\"width\":75},\"4\":{\"width\":63},\"5\":{\"width\":59},\"6\":{\"width\":70},\"7\":{\"width\":57},\"8\":{\"width\":60},\"9\":{\"width\":75},\"10\":{\"width\":66},\"11\":{\"width\":64},\"12\":{\"width\":70},\"13\":{\"width\":61},\"14\":{\"width\":61},\"15\":{\"width\":70},\"16\":{\"width\":58},\"17\":{\"width\":63},\"18\":{\"width\":60},\"19\":{\"width\":63},\"20\":{\"width\":59},\"21\":{\"width\":73},\"22\":{\"width\":69},\"23\":{\"width\":73},\"len\":26},\"merges\":[\"B2:B3\",\"C2:C3\",\"D2:F2\",\"G2:I2\",\"J2:L2\",\"M2:O2\",\"P2:R2\",\"S2:U2\",\"V2:X2\",\"B1:X1\",\"B5:C5\"]}', NULL, 'https://static.jero.com/designreport/images/quyu_1607069899537.png', 'admin', '2020-12-03 14:08:34', 'admin', '2021-01-13 14:13:45', 0, NULL, NULL, 1, 432); +INSERT INTO `jimu_report` VALUES ('1334420681185566722', '202012031408346166', '学校经费一览表', NULL, NULL, 'datainfo', '{\"area\":{\"sri\":9,\"sci\":4,\"eri\":9,\"eci\":4,\"width\":63,\"height\":25},\"printElWidth\":1767,\"excel_config_id\":\"1334420681185566722\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"学校经费一览表\",\"merge\":[0,22],\"style\":10},\"2\":{\"style\":10},\"3\":{\"style\":10},\"4\":{\"style\":10},\"5\":{\"style\":10},\"6\":{\"style\":10},\"7\":{\"style\":10},\"8\":{\"style\":10},\"9\":{\"style\":10},\"10\":{\"style\":10},\"11\":{\"style\":10},\"12\":{\"style\":10},\"13\":{\"style\":10},\"14\":{\"style\":10},\"15\":{\"style\":10},\"16\":{\"style\":10},\"17\":{\"style\":10},\"18\":{\"style\":10},\"19\":{\"style\":10},\"20\":{\"style\":10},\"21\":{\"style\":10},\"22\":{\"style\":10},\"23\":{\"style\":10}},\"height\":72},\"1\":{\"cells\":{\"1\":{\"text\":\"学校类别\",\"style\":221,\"merge\":[4,0]},\"2\":{\"merge\":[4,0],\"style\":222,\"text\":\"学校名称\"},\"3\":{\"text\":\"财政教育经费投入(万元)\",\"merge\":[0,8],\"style\":84},\"4\":{\"style\":40,\"text\":\" \"},\"5\":{\"style\":40,\"text\":\" \"},\"6\":{\"style\":40,\"text\":\" \"},\"7\":{\"style\":40,\"text\":\" \"},\"8\":{\"style\":40,\"text\":\" \"},\"9\":{\"style\":40,\"text\":\" \"},\"10\":{\"style\":40,\"text\":\" \"},\"11\":{\"style\":40,\"text\":\" \"},\"12\":{\"text\":\"其他投入\",\"merge\":[0,7],\"style\":84},\"13\":{\"text\":\" \",\"style\":40},\"14\":{\"text\":\" \",\"style\":40},\"15\":{\"text\":\" \",\"style\":40},\"16\":{\"text\":\" \",\"style\":40},\"17\":{\"text\":\" \",\"style\":40},\"18\":{\"text\":\" \",\"style\":40},\"19\":{\"text\":\" \",\"style\":40},\"20\":{\"style\":84,\"text\":\"补充资料\",\"merge\":[0,4]},\"21\":{\"text\":\" \",\"style\":40},\"22\":{\"text\":\" \",\"style\":40},\"23\":{\"text\":\" \",\"style\":40},\"24\":{\"text\":\" \",\"style\":40}},\"height\":28},\"2\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":40},\"2\":{\"style\":222,\"text\":\" \"},\"3\":{\"text\":\"总计\",\"style\":117,\"merge\":[3,0]},\"4\":{\"text\":\"教育事业费\",\"style\":117,\"merge\":[0,6]},\"5\":{\"style\":118,\"text\":\" \"},\"6\":{\"style\":118,\"text\":\" \"},\"7\":{\"style\":118,\"text\":\" \"},\"8\":{\"style\":118,\"text\":\" \"},\"9\":{\"style\":118,\"text\":\" \"},\"10\":{\"style\":118,\"text\":\" \"},\"11\":{\"text\":\"基础拨款\",\"style\":117,\"merge\":[3,0]},\"12\":{\"text\":\"村投入\",\"style\":117,\"merge\":[0,4]},\"13\":{\"text\":\" \",\"style\":223},\"14\":{\"text\":\" \",\"style\":223},\"15\":{\"text\":\" \",\"style\":223},\"16\":{\"text\":\" \",\"style\":223},\"17\":{\"text\":\"社会捐款\",\"style\":117,\"merge\":[0,2]},\"18\":{\"text\":\" \",\"style\":223},\"19\":{\"text\":\" \",\"style\":223},\"20\":{\"style\":126,\"merge\":[0,4],\"text\":\"信息化建设\"},\"21\":{\"style\":122,\"text\":\" \"},\"22\":{\"style\":122,\"text\":\" \"},\"23\":{\"style\":122,\"text\":\" \"},\"24\":{\"style\":122,\"text\":\" \"}},\"height\":24},\"3\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":40},\"2\":{\"style\":222,\"text\":\" \"},\"3\":{\"style\":118,\"text\":\" \"},\"4\":{\"merge\":[0,1],\"text\":\"合计\",\"style\":121},\"5\":{\"style\":122,\"text\":\" \"},\"6\":{\"merge\":[2,0],\"text\":\"人员经费\",\"style\":121},\"7\":{\"merge\":[2,0],\"text\":\"日常公用费用\",\"style\":123},\"8\":{\"merge\":[0,2],\"text\":\"项目经费\",\"style\":121},\"9\":{\"style\":122,\"text\":\" \"},\"10\":{\"style\":122,\"text\":\" \"},\"11\":{\"style\":118,\"text\":\" \"},\"12\":{\"merge\":[2,0],\"text\":\"合计\",\"style\":121},\"13\":{\"merge\":[0,3],\"text\":\"其中\",\"style\":121},\"14\":{\"text\":\" \",\"style\":223},\"15\":{\"text\":\" \",\"style\":223},\"16\":{\"text\":\" \",\"style\":223},\"17\":{\"merge\":[2,0],\"text\":\"合计\",\"style\":121},\"18\":{\"merge\":[0,1],\"text\":\"其中\",\"style\":121},\"19\":{\"style\":122,\"text\":\" \"},\"20\":{\"merge\":[2,0],\"text\":\"本年投入金额(万元)\",\"style\":230},\"21\":{\"merge\":[0,1],\"text\":\"电脑数(台数)\",\"style\":121},\"22\":{\"style\":122,\"text\":\" \"},\"23\":{\"merge\":[0,1],\"text\":\"校园网数(个)\",\"style\":121},\"24\":{\"style\":122,\"text\":\" \"}}},\"4\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":40},\"2\":{\"style\":222,\"text\":\" \"},\"3\":{\"style\":118,\"text\":\" \"},\"4\":{\"merge\":[1,0],\"text\":\"金额\",\"style\":126},\"5\":{\"merge\":[1,0],\"text\":\"比上年增长(%)\",\"style\":127},\"6\":{\"style\":122,\"text\":\" \"},\"7\":{\"style\":123,\"text\":\" \"},\"8\":{\"merge\":[1,0],\"text\":\"合计\",\"style\":121},\"9\":{\"merge\":[0,1],\"text\":\"其中\",\"style\":121},\"10\":{\"style\":122,\"text\":\" \"},\"11\":{\"style\":118,\"text\":\" \"},\"12\":{\"style\":121,\"text\":\" \"},\"13\":{\"merge\":[1,0],\"text\":\"人员经费\",\"style\":131},\"14\":{\"merge\":[1,0],\"text\":\"日常公用费用\",\"style\":131},\"15\":{\"merge\":[1,0],\"text\":\"项目经费\",\"style\":131},\"16\":{\"merge\":[1,0],\"text\":\"基建投入\",\"style\":131},\"17\":{\"style\":121,\"text\":\" \"},\"18\":{\"merge\":[1,0],\"text\":\"项目经费\",\"style\":131},\"19\":{\"merge\":[1,0],\"text\":\"基础投入\",\"style\":131},\"20\":{\"style\":231,\"text\":\" \"},\"21\":{\"merge\":[1,0],\"text\":\"合计\",\"style\":121},\"22\":{\"merge\":[1,0],\"text\":\"本年购置数\",\"style\":121},\"23\":{\"style\":121,\"merge\":[1,0],\"text\":\"合计\"},\"24\":{\"merge\":[1,0],\"text\":\"本年建成数\",\"style\":121}}},\"5\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":40},\"2\":{\"style\":222,\"text\":\" \"},\"3\":{\"style\":118,\"text\":\" \"},\"4\":{\"style\":126,\"text\":\" \"},\"5\":{\"style\":129,\"text\":\" \"},\"6\":{\"style\":121,\"text\":\" \"},\"7\":{\"style\":130,\"text\":\" \"},\"8\":{\"style\":121,\"text\":\" \"},\"9\":{\"text\":\"标准化建设\",\"style\":131},\"10\":{\"text\":\"信息化建设\",\"style\":121},\"11\":{\"style\":118,\"text\":\" \"},\"12\":{\"style\":121,\"text\":\" \"},\"13\":{\"text\":\" \",\"style\":223},\"14\":{\"style\":131,\"text\":\" \"},\"15\":{\"text\":\" \",\"style\":223},\"16\":{\"style\":131,\"text\":\" \"},\"17\":{\"style\":121,\"text\":\" \"},\"18\":{\"text\":\" \",\"style\":223},\"19\":{\"style\":131,\"text\":\" \"},\"20\":{\"style\":231,\"text\":\" \"},\"21\":{\"style\":121,\"text\":\" \"},\"22\":{\"style\":122,\"text\":\" \"},\"23\":{\"style\":131,\"text\":\" \"},\"24\":{\"style\":122,\"text\":\" \"}}},\"6\":{\"cells\":{\"0\":{\"style\":236},\"1\":{\"text\":\"#{laiyuan.group(class)}\",\"style\":233,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{laiyuan.school}\",\"style\":234},\"3\":{\"style\":15,\"text\":\"=SUM(E7,I7)\"},\"4\":{\"style\":15,\"text\":\"=SUM(G7,H7)\"},\"5\":{\"text\":\"#{laiyuan.lv}\",\"style\":12},\"6\":{\"text\":\"#{laiyuan.renyuan_jy}\",\"style\":12},\"7\":{\"text\":\"#{laiyuan.richang_jy}\",\"style\":12},\"8\":{\"style\":12,\"text\":\"=SUM(J7,K7)\"},\"9\":{\"text\":\"#{laiyuan.biaozhun_jy}\",\"style\":12},\"10\":{\"text\":\"#{laiyuan.xinxi_jy}\",\"style\":12},\"11\":{\"text\":\"#{laiyuan.jichubokuan_jy}\",\"style\":12},\"12\":{\"style\":12,\"text\":\"=SUM(N7,O7)\"},\"13\":{\"text\":\"#{laiyuan.renyuan_ct}\",\"style\":12},\"14\":{\"text\":\"#{laiyuan.richang_ct}\",\"style\":12},\"15\":{\"text\":\"#{laiyuan.xiangmu_ct}\",\"style\":12},\"16\":{\"text\":\"#{laiyuan.jichubokuan_ct}\",\"style\":12},\"17\":{\"style\":12,\"text\":\"=SUM(S7,T7)\"},\"18\":{\"text\":\"#{laiyuan.xiangmu_sh}\",\"style\":12},\"19\":{\"text\":\"#{laiyuan.jichubokuan_sh}\",\"style\":12},\"20\":{\"style\":12,\"text\":\"=SUM(V7,X7)\"},\"21\":{\"style\":12,\"text\":\"#{laiyuan.diannao}\"},\"22\":{\"text\":\"#{laiyuan.diannao}\",\"style\":12},\"23\":{\"style\":12,\"text\":\"#{laiyuan.xiaoyuanwang}\"},\"24\":{\"text\":\"#{laiyuan.xiaoyuanwang}\",\"style\":12},\"25\":{\"style\":236}},\"isDrag\":true},\"7\":{\"cells\":{\"1\":{\"merge\":[0,1],\"text\":\"总计\",\"style\":226},\"2\":{\"style\":227,\"text\":\" \"},\"3\":{\"style\":228,\"text\":\"=SUM(D7)\"},\"4\":{\"style\":228,\"text\":\"=SUM(E7)\"},\"5\":{\"style\":228,\"text\":\"\"},\"6\":{\"style\":228,\"text\":\"=SUM(G7)\"},\"7\":{\"style\":228,\"text\":\"=SUM(H7)\"},\"8\":{\"style\":228,\"text\":\"=SUM(I7)\"},\"9\":{\"style\":228,\"text\":\"=SUM(J7)\"},\"10\":{\"style\":228,\"text\":\"=SUM(K7)\"},\"11\":{\"style\":228,\"text\":\"=SUM(L7)\"},\"12\":{\"style\":228,\"text\":\"=SUM(M7)\"},\"13\":{\"style\":229,\"text\":\"=SUM(N7)\"},\"14\":{\"style\":229,\"text\":\"=SUM(O7)\"},\"15\":{\"style\":229,\"text\":\"=SUM(P7)\"},\"16\":{\"style\":229,\"text\":\"=SUM(Q7)\"},\"17\":{\"style\":229,\"text\":\"=SUM(R7)\"},\"18\":{\"style\":229,\"text\":\"=SUM(S7)\"},\"19\":{\"style\":229,\"text\":\"=SUM(T7)\"},\"20\":{\"style\":229,\"text\":\"=SUM(U7)\"},\"21\":{\"style\":229,\"text\":\"=SUM(V8)\"},\"22\":{\"style\":229,\"text\":\"=SUM(W7)\"},\"23\":{\"style\":232,\"text\":\"=SUM(X7)\"},\"24\":{\"style\":229,\"text\":\"=SUM(Y7)\"}}},\"9\":{\"cells\":{\"4\":{\"lineStart\":\"leftbottom\",\"text\":\"\"}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"laiyuan.class\",\"freeze\":\"A1\",\"dataRectWidth\":1738,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"bgcolor\":\"#02a274\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"bfbfbf\"],\"top\":[\"thin\",\"bfbfbf\"],\"left\":[\"thin\",\"bfbfbf\"],\"right\":[\"thin\",\"bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"bfbfbf\"],\"top\":[\"thin\",\"bfbfbf\"],\"left\":[\"thin\",\"bfbfbf\"],\"right\":[\"thin\",\"bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"隶书\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":true}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":true,\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":true,\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"华文中宋\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Arial\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"number\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"font\":{\"bold\":false,\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"color\":\"#262626\",\"bgcolor\":\"#aedac8\"},{\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\",\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10}},{\"font\":{\"size\":10},\"bgcolor\":\"#aedac8\"},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":9}},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":9},\"align\":\"center\"},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#ffffff\"},{\"textwrap\":true},{\"textwrap\":true,\"font\":{\"size\":9}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"#02a274\"},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"color\":\"#000100\"},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"#02a274\",\"color\":\"#000100\"},{\"bgcolor\":\"\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"\",\"color\":\"#000100\"},{\"align\":\"center\",\"bgcolor\":\"\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"color\":\"#000100\",\"bgcolor\":\"\"},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\"},{\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\"},{\"textwrap\":true,\"align\":\"center\"},{\"font\":{\"size\":9},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"bgcolor\":\"\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#595959\"],\"top\":[\"thin\",\"#595959\"],\"left\":[\"thin\",\"#595959\"],\"right\":[\"thin\",\"#595959\"]}},{\"font\":{\"size\":9},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"bgcolor\":\"\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"font\":{\"size\":9},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"bgcolor\":\"\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#756f6f\"],\"top\":[\"thin\",\"#756f6f\"],\"left\":[\"thin\",\"#756f6f\"],\"right\":[\"thin\",\"#756f6f\"]}},{\"align\":\"center\",\"bgcolor\":\"\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"bgcolor\":\"\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10}},{\"color\":\"#000100\",\"font\":{\"size\":10}},{\"color\":\"#000100\",\"bgcolor\":\"\",\"font\":{\"size\":10}},{\"font\":{\"size\":10},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"font\":{\"size\":10},\"align\":\"center\"},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":10}},{\"bgcolor\":\"\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"bgcolor\":\"\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#000100\"},{\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"color\":\"#000100\",\"bgcolor\":\"\",\"align\":\"center\"},{\"font\":{\"size\":10},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"bgcolor\":\"\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"color\":\"#000100\",\"bgcolor\":\"\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10}},{\"color\":\"#000100\",\"font\":{\"size\":10},\"bgcolor\":\"#\"},{\"align\":\"center\",\"bgcolor\":\"#\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"bgcolor\":\"#\"},{\"font\":{\"size\":10},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"font\":{\"size\":10},\"align\":\"center\",\"bgcolor\":\"#\"},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"align\":\"center\",\"bgcolor\":\"#\"},{\"bgcolor\":\"#\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"#\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"#\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":10},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#\"},{\"align\":\"center\",\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":10}},{\"color\":\"#000100\",\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"bold\":false,\"size\":9}},{\"bgcolor\":\"#ddefe8\"},{\"font\":{\"size\":10},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"font\":{\"size\":10},\"align\":\"center\",\"bgcolor\":\"#ddefe8\"},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"align\":\"center\",\"bgcolor\":\"#ddefe8\"},{\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"textwrap\":true,\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10},\"bgcolor\":\"#ddefe8\"},{\"color\":\"#000100\",\"bgcolor\":\"#fffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#fffff\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fffff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fffff\"},{\"textwrap\":true,\"bgcolor\":\"#fffff\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fffff\"},{\"color\":\"#000100\",\"bgcolor\":\"#ffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#ffff\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffff\"},{\"textwrap\":true,\"bgcolor\":\"#ffff\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffff\"},{\"color\":\"#000100\",\"bgcolor\":\"#fff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#fff\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fff\"},{\"textwrap\":true,\"bgcolor\":\"#fff\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#fff\"},{\"color\":\"#000100\",\"bgcolor\":\"#ff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#ff\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ff\"},{\"textwrap\":true,\"bgcolor\":\"#ff\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ff\"},{\"color\":\"#000100\",\"bgcolor\":\"#f\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#f\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f\"},{\"textwrap\":true,\"bgcolor\":\"#f\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f\"},{\"color\":\"#000100\",\"bgcolor\":\"#\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"textwrap\":true,\"bgcolor\":\"#\"},{\"color\":\"#000100\",\"bgcolor\":\"#ddefe8\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"textwrap\":true,\"bgcolor\":\"#ddefe8\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"color\":\"#000100\",\"font\":{\"size\":9},\"bgcolor\":\"#ddefe8\"},{\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"font\":{\"size\":9},\"align\":\"center\",\"bgcolor\":\"#ddefe8\"},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"bgcolor\":\"#ddefe8\"},{\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"textwrap\":true,\"font\":{\"size\":9},\"bgcolor\":\"#ddefe8\",\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"textwrap\":true,\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":9},\"bgcolor\":\"#ddefe8\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"textwrap\":true,\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\"},{\"bgcolor\":\"#aedac8\"},{\"bgcolor\":\"#fffff\"},{\"bgcolor\":\"#ffff\"},{\"bgcolor\":\"#fff\"},{\"bgcolor\":\"#ff\"},{\"bgcolor\":\"#f\"},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Arial\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"bold\":false,\"size\":9}},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":9},\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"aedac8\"},{\"align\":\"center\",\"bgcolor\":\"aedac8\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"color\":\"#ffffff\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"color\":\"#ffffff\",\"font\":{\"size\":9}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":9}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"##aedac8\"},{\"bgcolor\":\"##aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8},\"align\":\"center\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":9}},{\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8}},{\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8},\"align\":\"left\"},{\"bgcolor\":\"#aedac8\",\"font\":{\"size\":8},\"align\":\"left\",\"valign\":\"middle\"},{\"align\":\"center\",\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"bold\":false,\"size\":10}},{\"bgcolor\":\"#02a274\",\"font\":{\"size\":10},\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"color\":\"#000100\",\"font\":{\"size\":10}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10},\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10}},{\"textwrap\":true,\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10}},{\"bgcolor\":\"#aedac8\",\"font\":{\"size\":10},\"align\":\"left\",\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"font\":{\"size\":9},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"font\":{\"size\":8}}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":20},\"1\":{\"width\":84},\"2\":{\"width\":132},\"3\":{\"width\":75},\"4\":{\"width\":63},\"5\":{\"width\":59},\"6\":{\"width\":70},\"7\":{\"width\":61},\"8\":{\"width\":60},\"9\":{\"width\":75},\"10\":{\"width\":75},\"11\":{\"width\":64},\"12\":{\"width\":70},\"13\":{\"width\":63},\"14\":{\"width\":86},\"15\":{\"width\":64},\"16\":{\"width\":58},\"17\":{\"width\":63},\"18\":{\"width\":60},\"19\":{\"width\":63},\"20\":{\"width\":59},\"21\":{\"width\":73},\"22\":{\"width\":82},\"23\":{\"width\":73},\"24\":{\"width\":86},\"len\":26},\"merges\":[\"B1:X1\",\"D3:D6\",\"E5:E6\",\"F5:F6\",\"E4:F4\",\"G4:G6\",\"H4:H6\",\"I5:I6\",\"J5:K5\",\"I4:K4\",\"E3:K3\",\"L3:L6\",\"D2:L2\",\"M4:M6\",\"N5:N6\",\"O5:O6\",\"P5:P6\",\"Q5:Q6\",\"N4:Q4\",\"M3:Q3\",\"R4:R6\",\"R3:T3\",\"S4:T4\",\"S5:S6\",\"T5:T6\",\"U4:U6\",\"V4:W4\",\"V5:V6\",\"W5:W6\",\"X4:Y4\",\"X5:X6\",\"Y5:Y6\",\"U3:Y3\",\"M2:T2\",\"U2:Y2\",\"B2:B6\",\"C2:C6\",\"B8:C8\"]}', NULL, 'https://static.jero.com/designreport/images/jingfei_1607069843358.png', 'admin', '2020-12-03 16:54:17', 'admin', '2021-01-13 14:13:42', 0, NULL, NULL, 1, 426); +INSERT INTO `jimu_report` VALUES ('1334457419857793024', '20201203192154', '超市各地区销售额', NULL, NULL, 'datainfo', '{\"area\":false,\"printElWidth\":2500,\"excel_config_id\":\"1334457419857793024\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"各地区商品销售额一栏表\",\"merge\":[0,18],\"style\":13}},\"height\":82},\"1\":{\"cells\":{\"1\":{\"text\":\"地区/类别/时间\",\"merge\":[1,1],\"style\":46},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"2020年\",\"style\":46,\"merge\":[0,12]},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"style\":39,\"text\":\" \"},\"6\":{\"style\":39,\"text\":\" \"},\"7\":{\"style\":39,\"text\":\" \"},\"8\":{\"style\":39,\"text\":\" \"},\"9\":{\"style\":39,\"text\":\" \"},\"10\":{\"style\":39,\"text\":\" \"},\"11\":{\"style\":39,\"text\":\" \"},\"12\":{\"style\":39,\"text\":\" \"},\"13\":{\"style\":39,\"text\":\" \"},\"14\":{\"style\":39,\"text\":\" \"},\"15\":{\"style\":39,\"text\":\" \"},\"16\":{\"text\":\"2019年\",\"style\":46,\"merge\":[0,9]},\"17\":{\"style\":39,\"text\":\" \"},\"18\":{\"style\":39,\"text\":\" \"},\"19\":{\"style\":39,\"text\":\" \"},\"20\":{\"style\":39,\"text\":\" \"},\"21\":{\"style\":39,\"text\":\" \"},\"22\":{\"style\":39,\"text\":\" \"},\"23\":{\"style\":39,\"text\":\" \"},\"24\":{\"style\":39,\"text\":\" \"},\"25\":{\"style\":39,\"text\":\" \"}}},\"2\":{\"cells\":{\"1\":{\"style\":39,\"text\":\" \"},\"2\":{\"style\":39,\"text\":\" \"},\"3\":{\"text\":\"12月\",\"style\":46},\"4\":{\"text\":\"11月\",\"style\":46},\"5\":{\"text\":\"10月\",\"style\":46},\"6\":{\"text\":\"9月\",\"style\":46},\"7\":{\"text\":\"8月\",\"style\":46},\"8\":{\"text\":\"7月\",\"style\":46},\"9\":{\"text\":\"6月\",\"style\":46},\"10\":{\"text\":\"5月\",\"style\":46},\"11\":{\"text\":\"4月\",\"style\":46},\"12\":{\"text\":\"3月\",\"style\":46},\"13\":{\"text\":\"2月\",\"style\":46},\"14\":{\"text\":\"1月\",\"style\":46},\"15\":{\"text\":\"本年小计\",\"style\":46},\"16\":{\"text\":\"12月\",\"style\":46},\"17\":{\"text\":\"11月\",\"style\":46},\"18\":{\"text\":\"10月\",\"style\":46},\"19\":{\"text\":\"9月\",\"style\":46},\"20\":{\"text\":\"8月\",\"style\":46},\"21\":{\"text\":\"7月\",\"style\":46},\"22\":{\"text\":\"6月\",\"style\":46},\"23\":{\"text\":\"5月\",\"style\":46},\"24\":{\"text\":\"4月\",\"style\":46},\"25\":{\"text\":\"本年小计\",\"style\":46},\"26\":{\"text\":\"2月\",\"style\":8},\"27\":{\"text\":\"1月\",\"style\":8},\"28\":{\"text\":\"本年小计\",\"style\":8}}},\"3\":{\"cells\":{\"1\":{\"text\":\"#{xiaoshou.group(diqu)}\",\"style\":51,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{xiaoshou.class}\",\"style\":51},\"3\":{\"text\":\"#{xiaoshou.sales_11}\",\"style\":20},\"4\":{\"text\":\"#{xiaoshou.sales_12}\",\"style\":20},\"5\":{\"text\":\"#{xiaoshou.sales_13}\",\"style\":20},\"6\":{\"text\":\"#{xiaoshou.sales_14}\",\"style\":20},\"7\":{\"text\":\"#{xiaoshou.sales_15}\",\"style\":20},\"8\":{\"text\":\"#{xiaoshou.sales_16}\",\"style\":20},\"9\":{\"text\":\"#{xiaoshou.sales_17}\",\"style\":20},\"10\":{\"text\":\"#{xiaoshou.sales_18}\",\"style\":20},\"11\":{\"text\":\"#{xiaoshou.sales_19}\",\"style\":20},\"12\":{\"text\":\"#{xiaoshou.sales_20}\",\"style\":20},\"13\":{\"text\":\"#{xiaoshou.sales_21}\",\"style\":20},\"14\":{\"text\":\"#{xiaoshou.sales_22}\",\"style\":20},\"15\":{\"style\":48,\"text\":\"=SUM(D4:O4)\"},\"16\":{\"text\":\"#{xiaoshou.sales_31}\",\"style\":20},\"17\":{\"text\":\"#{xiaoshou.sales_32}\",\"style\":20},\"18\":{\"text\":\"#{xiaoshou.sales_33}\",\"style\":20},\"19\":{\"text\":\"#{xiaoshou.sales_34}\",\"style\":20},\"20\":{\"text\":\"#{xiaoshou.sales_35}\",\"style\":20},\"21\":{\"text\":\"#{xiaoshou.sales_36}\",\"style\":20},\"22\":{\"text\":\"#{xiaoshou.sales_37}\",\"style\":20},\"23\":{\"text\":\"#{xiaoshou.sales_38}\",\"style\":20},\"24\":{\"text\":\"#{xiaoshou.sales_39}\",\"style\":20},\"25\":{\"style\":48,\"text\":\"=SUM(Q4:Y4)\"},\"26\":{\"style\":10,\"text\":\" \"},\"27\":{\"style\":10},\"28\":{\"style\":10}},\"isDrag\":true},\"4\":{\"cells\":{\"0\":{\"style\":3},\"1\":{\"merge\":[0,1],\"text\":\"合计\",\"style\":52},\"2\":{\"style\":52},\"3\":{\"text\":\"=SUM(D4)\",\"style\":55},\"4\":{\"text\":\"=SUM(E4)\",\"style\":55},\"5\":{\"text\":\"=SUM(F4)\",\"style\":55},\"6\":{\"text\":\"=SUM(G4)\",\"style\":55},\"7\":{\"text\":\"=SUM(H4)\",\"style\":55},\"8\":{\"text\":\"=SUM(I4)\",\"style\":55},\"9\":{\"text\":\"=SUM(J4)\",\"style\":55},\"10\":{\"text\":\"=SUM(K4)\",\"style\":55},\"11\":{\"text\":\"=SUM(L4)\",\"style\":55},\"12\":{\"text\":\"=SUM(M4)\",\"style\":55},\"13\":{\"text\":\"=SUM(N4)\",\"style\":55},\"14\":{\"text\":\"=SUM(O4)\",\"style\":55},\"15\":{\"text\":\"=SUM(P4)\",\"style\":55},\"16\":{\"text\":\"=SUM(Q4)\",\"style\":55},\"17\":{\"text\":\"=SUM(R4)\",\"style\":55},\"18\":{\"text\":\"=SUM(S4)\",\"style\":55},\"19\":{\"text\":\"=SUM(T4)\",\"style\":55},\"20\":{\"text\":\"=SUM(U4)\",\"style\":55},\"21\":{\"text\":\"=SUM(V4)\",\"style\":55},\"22\":{\"text\":\"=SUM(W4)\",\"style\":55},\"23\":{\"text\":\"=SUM(X4)\",\"style\":55},\"24\":{\"text\":\"=SUM(Y4)\",\"style\":55},\"25\":{\"text\":\"=SUM(Z4)\",\"style\":55}},\"isDrag\":true},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"xiaoshou.diqu\",\"freeze\":\"A1\",\"dataRectWidth\":2764,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"bgcolor\":\"#\"},{\"bgcolor\":\"#d7f2f9\"},{\"bgcolor\":\"#d7f2f9\",\"align\":\"center\"},{\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#\"},{\"bgcolor\":\"#d7f2f9\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"2896ea\"],\"top\":[\"thin\",\"2896ea\"],\"left\":[\"thin\",\"2896ea\"],\"right\":[\"thin\",\"2896ea\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"2896ea\"],\"top\":[\"thin\",\"2896ea\"],\"left\":[\"thin\",\"2896ea\"],\"right\":[\"thin\",\"2896ea\"]}},{\"border\":{\"bottom\":[\"thin\",\"2896ea\"],\"top\":[\"thin\",\"2896ea\"],\"left\":[\"thin\",\"2896ea\"],\"right\":[\"thin\",\"2896ea\"]}},{\"bgcolor\":\"#d7f2f9\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]}},{\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]}},{\"font\":{\"bold\":true}},{\"font\":{\"bold\":true,\"size\":16}},{\"font\":{\"bold\":true,\"size\":16},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]},\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#2896ea\"],\"top\":[\"thin\",\"#2896ea\"],\"left\":[\"thin\",\"#2896ea\"],\"right\":[\"thin\",\"#2896ea\"]}},{\"bgcolor\":\"#5b9cd6\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#9cc2e6\"],\"top\":[\"thin\",\"#9cc2e6\"],\"left\":[\"thin\",\"#9cc2e6\"],\"right\":[\"thin\",\"#9cc2e6\"]}},{\"border\":{\"bottom\":[\"thin\",\"#9cc2e6\"],\"top\":[\"thin\",\"#9cc2e6\"],\"left\":[\"thin\",\"#9cc2e6\"],\"right\":[\"thin\",\"#9cc2e6\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#9cc2e6\"],\"top\":[\"thin\",\"#9cc2e6\"],\"left\":[\"thin\",\"#9cc2e6\"],\"right\":[\"thin\",\"#9cc2e6\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]}},{\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#e7e5e6\"],\"top\":[\"thin\",\"#e7e5e6\"],\"left\":[\"thin\",\"#e7e5e6\"],\"right\":[\"thin\",\"#e7e5e6\"]}},{\"border\":{\"bottom\":[\"thin\",\"#e7e5e6\"],\"top\":[\"thin\",\"#e7e5e6\"],\"left\":[\"thin\",\"#e7e5e6\"],\"right\":[\"thin\",\"#e7e5e6\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#e7e5e6\"],\"top\":[\"thin\",\"#e7e5e6\"],\"left\":[\"thin\",\"#e7e5e6\"],\"right\":[\"thin\",\"#e7e5e6\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d0cecf\"],\"top\":[\"thin\",\"#d0cecf\"],\"left\":[\"thin\",\"#d0cecf\"],\"right\":[\"thin\",\"#d0cecf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d0cecf\"],\"top\":[\"thin\",\"#d0cecf\"],\"left\":[\"thin\",\"#d0cecf\"],\"right\":[\"thin\",\"#d0cecf\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#d0cecf\"],\"top\":[\"thin\",\"#d0cecf\"],\"left\":[\"thin\",\"#d0cecf\"],\"right\":[\"thin\",\"#d0cecf\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d0cecf\"],\"top\":[\"thin\",\"#d0cecf\"],\"left\":[\"thin\",\"#d0cecf\"],\"right\":[\"thin\",\"#d0cecf\"]},\"color\":\"#ffffff\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#afabac\"],\"top\":[\"thin\",\"#afabac\"],\"left\":[\"thin\",\"#afabac\"],\"right\":[\"thin\",\"#afabac\"]},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#afabac\"],\"top\":[\"thin\",\"#afabac\"],\"left\":[\"thin\",\"#afabac\"],\"right\":[\"thin\",\"#afabac\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#afabac\"],\"top\":[\"thin\",\"#afabac\"],\"left\":[\"thin\",\"#afabac\"],\"right\":[\"thin\",\"#afabac\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#f2f2f2\"],\"top\":[\"thin\",\"#f2f2f2\"],\"left\":[\"thin\",\"#f2f2f2\"],\"right\":[\"thin\",\"#f2f2f2\"]},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#f2f2f2\"],\"top\":[\"thin\",\"#f2f2f2\"],\"left\":[\"thin\",\"#f2f2f2\"],\"right\":[\"thin\",\"#f2f2f2\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#f2f2f2\"],\"top\":[\"thin\",\"#f2f2f2\"],\"left\":[\"thin\",\"#f2f2f2\"],\"right\":[\"thin\",\"#f2f2f2\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\"},{\"bgcolor\":\"#5b9cd6\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":8},\"align\":\"center\",\"bgcolor\":\"#d7f2f9\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\",\"bgcolor\":\"#deeaf6\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":8},\"align\":\"center\",\"format\":\"number\",\"bgcolor\":\"#bdd7ee\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":10},\"align\":\"center\",\"bgcolor\":\"#d7f2f9\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"font\":{\"size\":9},\"align\":\"center\",\"bgcolor\":\"#d7f2f9\"},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\"},{\"bgcolor\":\"#bdd7ee\"},{\"bgcolor\":\"#bdd7ee\",\"format\":\"number\"},{\"bgcolor\":\"#bdd7ee\",\"format\":\"number\",\"align\":\"center\"}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":21},\"1\":{\"width\":63},\"2\":{\"width\":85},\"3\":{\"width\":95},\"4\":{\"width\":83},\"5\":{\"width\":81},\"6\":{\"width\":88},\"7\":{\"width\":89},\"8\":{\"width\":87},\"9\":{\"width\":95},\"10\":{\"width\":92},\"11\":{\"width\":95},\"12\":{\"width\":96},\"13\":{\"width\":98},\"14\":{\"width\":98},\"15\":{\"width\":78},\"16\":{\"width\":110},\"17\":{\"width\":111},\"18\":{\"width\":102},\"19\":{\"width\":102},\"20\":{\"width\":114},\"21\":{\"width\":111},\"22\":{\"width\":113},\"23\":{\"width\":107},\"24\":{\"width\":115},\"25\":{\"width\":135},\"len\":26},\"merges\":[\"D2:P2\",\"B2:C3\",\"Q2:Z2\",\"B1:T1\",\"B5:C5\"]}', NULL, 'https://static.jero.com/designreport/images/chaoshi_1607069609875.png', 'admin', '2020-12-03 19:21:55', 'admin', '2021-01-13 14:13:37', 0, NULL, NULL, 1, 359); +INSERT INTO `jimu_report` VALUES ('1334696790477377536', '20201204111149', '学校收入一览表', NULL, NULL, 'datainfo', '{\"area\":{\"sri\":5,\"sci\":22,\"eri\":5,\"eci\":22,\"width\":81,\"height\":25},\"printElWidth\":1902,\"excel_config_id\":\"1334696790477377536\",\"printElHeight\":1114,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"学校收入一览表\",\"merge\":[0,13],\"style\":25},\"2\":{\"style\":25},\"3\":{\"style\":25},\"4\":{\"style\":25},\"5\":{\"style\":25},\"6\":{\"style\":25},\"7\":{\"style\":25},\"8\":{\"style\":25},\"9\":{\"style\":25},\"10\":{\"style\":25},\"11\":{\"style\":25},\"12\":{\"style\":25},\"13\":{\"style\":25},\"14\":{\"style\":25}},\"height\":71},\"1\":{\"cells\":{\"1\":{\"text\":\"校园信息\",\"merge\":[1,2],\"style\":40},\"2\":{\"style\":41},\"3\":{\"style\":41},\"4\":{\"text\":\"学生信息\",\"merge\":[1,2],\"style\":40},\"5\":{\"style\":41},\"6\":{\"style\":41},\"7\":{\"merge\":[1,5],\"style\":42,\"text\":\"收款信息\"},\"8\":{\"style\":41},\"9\":{\"style\":41},\"10\":{\"style\":41},\"11\":{\"style\":41},\"12\":{\"style\":41},\"13\":{\"merge\":[0,10],\"text\":\"确认收入信息\",\"style\":43},\"14\":{\"style\":43},\"15\":{\"style\":43},\"16\":{\"style\":43},\"17\":{\"style\":43},\"18\":{\"style\":43},\"19\":{\"style\":43},\"20\":{\"style\":43},\"21\":{\"style\":43},\"22\":{\"style\":43},\"23\":{\"style\":43}},\"height\":23},\"2\":{\"cells\":{\"1\":{\"style\":41},\"2\":{\"style\":41},\"3\":{\"style\":41},\"4\":{\"style\":41},\"5\":{\"style\":41},\"6\":{\"style\":41},\"7\":{\"style\":41},\"8\":{\"style\":41},\"9\":{\"style\":41},\"10\":{\"style\":41},\"11\":{\"style\":41},\"12\":{\"style\":41},\"13\":{\"merge\":[0,3],\"text\":\"2020.09\",\"style\":46},\"14\":{\"style\":47,\"text\":\" \"},\"15\":{\"style\":47,\"text\":\" \"},\"16\":{\"style\":47,\"text\":\" \"},\"17\":{\"merge\":[0,3],\"text\":\"2020.10\",\"style\":46},\"18\":{\"style\":47,\"text\":\" \"},\"19\":{\"style\":47,\"text\":\" \"},\"20\":{\"style\":47,\"text\":\" \"},\"21\":{\"text\":\"合计\",\"style\":46,\"merge\":[0,2]},\"22\":{\"text\":\" \",\"style\":41},\"23\":{\"text\":\" \",\"style\":41},\"24\":{\"style\":19}},\"height\":40},\"3\":{\"cells\":{\"0\":{\"style\":49},\"1\":{\"text\":\"所属城际\",\"style\":50},\"2\":{\"text\":\"所属校园\",\"style\":50},\"3\":{\"text\":\"NC帐套\",\"style\":50},\"4\":{\"text\":\"学号\",\"style\":50},\"5\":{\"text\":\"姓名\",\"style\":50},\"6\":{\"text\":\"性质\",\"style\":50},\"7\":{\"text\":\"缴费金额\",\"style\":50},\"8\":{\"text\":\"缴费时间\",\"style\":50},\"9\":{\"text\":\"缴费性质\",\"style\":50},\"10\":{\"text\":\"缴费所属期间\",\"style\":50},\"11\":{\"text\":\"缴费月份数\",\"style\":50},\"12\":{\"text\":\"缴费方式\",\"style\":50},\"13\":{\"text\":\"全部\",\"style\":50},\"14\":{\"text\":\"学费\",\"style\":50},\"15\":{\"text\":\"餐费\",\"style\":50},\"16\":{\"text\":\"校车费\",\"style\":50},\"17\":{\"text\":\"全部\",\"style\":50},\"18\":{\"text\":\"学费\",\"style\":50},\"19\":{\"text\":\"餐费\",\"style\":50},\"20\":{\"text\":\"校车费\",\"style\":50},\"21\":{\"text\":\"全部\",\"style\":50},\"22\":{\"text\":\"学费\",\"style\":50},\"23\":{\"text\":\"餐费\",\"style\":50},\"24\":{\"text\":\"校车费\",\"style\":9}}},\"4\":{\"cells\":{\"0\":{\"style\":32},\"1\":{\"text\":\"#{shouru.group(city)}\",\"style\":45,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{shouru.group(school)}\",\"style\":45,\"aggregate\":\"group\"},\"3\":{\"text\":\"#{shouru.group(ncnum)}\",\"style\":35,\"aggregate\":\"group\"},\"4\":{\"text\":\"#{shouru.num}\",\"style\":35},\"5\":{\"text\":\"#{shouru.name}\",\"style\":35},\"6\":{\"text\":\"#{shouru.class}\",\"style\":35},\"7\":{\"text\":\"#{shouru.pay}\",\"style\":35},\"8\":{\"text\":\"#{shouru.paytime}\",\"style\":35},\"9\":{\"text\":\"#{shouru.payclass}\",\"style\":35},\"10\":{\"text\":\"#{shouru.pay1}\",\"style\":35},\"11\":{\"text\":\"#{shouru.paymoth}\",\"style\":35},\"12\":{\"text\":\"#{shouru.pay2}\",\"style\":35},\"13\":{\"style\":33,\"text\":\"=SUM(O5:Q5)\"},\"14\":{\"text\":\"#{shouru.tuition_09}\",\"style\":35},\"15\":{\"text\":\"#{shouru.meals_09}\",\"style\":35},\"16\":{\"text\":\"#{shouru.busfee_09}\",\"style\":35},\"17\":{\"style\":33,\"text\":\"=SUM(S5:U5)\"},\"18\":{\"text\":\"#{shouru.tuition_10}\",\"style\":35},\"19\":{\"text\":\"#{shouru.meals_10}\",\"style\":35},\"20\":{\"text\":\"#{shouru.busfee_10}\",\"style\":35},\"21\":{\"style\":33,\"text\":\"=SUM(W5,X5)\"},\"22\":{\"style\":35,\"text\":\"=SUM(O5,S5)\"},\"23\":{\"style\":35,\"text\":\"=SUM(P5,T5)\"}},\"isDrag\":true,\"height\":25},\"5\":{\"cells\":{\"1\":{\"style\":66,\"text\":\"合计\"},\"2\":{\"text\":\" \",\"style\":66},\"3\":{\"style\":66,\"text\":\" \"},\"4\":{\"style\":66,\"text\":\" \"},\"5\":{\"style\":66,\"text\":\" \"},\"6\":{\"style\":66,\"text\":\" \"},\"7\":{\"style\":66,\"text\":\" \"},\"8\":{\"style\":66,\"text\":\" \"},\"9\":{\"style\":66,\"text\":\" \"},\"10\":{\"style\":66,\"text\":\" \"},\"11\":{\"style\":66,\"text\":\" \"},\"12\":{\"style\":66,\"text\":\" \"},\"13\":{\"style\":66,\"text\":\" \"},\"14\":{\"style\":66,\"text\":\" \"},\"15\":{\"style\":66,\"text\":\" \"},\"16\":{\"style\":66,\"text\":\" \"},\"17\":{\"style\":66,\"text\":\" \"},\"18\":{\"text\":\" \",\"style\":66},\"19\":{\"style\":66,\"text\":\" \"},\"20\":{\"style\":66,\"text\":\" \"},\"21\":{\"style\":15,\"text\":\"=SUM(V5)\"},\"22\":{\"style\":15,\"text\":\"=SUM(W5)\"},\"23\":{\"style\":15,\"text\":\"=SUM(X5)\"}}},\"9\":{\"cells\":{\"8\":{\"style\":22}}},\"11\":{\"cells\":{\"6\":{\"style\":3}}},\"len\":101},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A3\",\"widthPx\":1123,\"heightPx\":1512},\"dicts\":[],\"groupField\":\"shouru.city\",\"freeze\":\"A1\",\"dataRectWidth\":1981,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\"},{\"bgcolor\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"font\":{\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\",\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"font\":{\"size\":9}},{\"align\":\"center\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"#dff2f9\"},{\"bgcolor\":\"\"},{\"bgcolor\":\"#309fc6\"},{\"align\":\"center\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#dff2f9\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#b2ddec\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#dff2f9\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"b2ddec\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"¥b2ddec\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#b2ddec\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#dff2f9\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#dff2f9\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"size\":9}},{\"align\":\"center\",\"bgcolor\":\"\",\"color\":\"#ffffff\",\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#d7f2f9\",\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#d7f2f9\",\"font\":{\"size\":8},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#5b9cd6\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":8},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"font\":{\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":10}},{\"align\":\"center\",\"bgcolor\":\"#d7f2f9\",\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"size\":10}},{\"font\":{\"size\":12}},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":12}},{\"align\":\"center\",\"bgcolor\":\"#d7f2f9\",\"font\":{\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"size\":12}},{\"font\":{\"size\":10.5}},{\"align\":\"center\",\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":10.5},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"center\",\"font\":{\"size\":10.5}},{\"align\":\"center\",\"bgcolor\":\"#d7f2f9\",\"font\":{\"size\":10.5},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"size\":10.5}},{\"align\":\"left\",\"bgcolor\":\"#b2ddec\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"align\":\"left\"}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":37},\"1\":{\"width\":79},\"2\":{\"width\":87},\"3\":{\"width\":79},\"4\":{\"width\":92},\"5\":{\"width\":90},\"6\":{\"width\":77},\"7\":{\"width\":83},\"8\":{\"width\":89},\"9\":{\"width\":79},\"10\":{\"width\":89},\"11\":{\"width\":84},\"12\":{\"width\":76},\"13\":{\"width\":67},\"14\":{\"width\":74},\"15\":{\"width\":69},\"16\":{\"width\":74},\"17\":{\"width\":68},\"18\":{\"width\":76},\"19\":{\"width\":79},\"20\":{\"width\":78},\"21\":{\"width\":74},\"22\":{\"width\":81},\"len\":24},\"merges\":[\"B2:D3\",\"E2:G3\",\"H2:M3\",\"N3:Q3\",\"R3:U3\",\"V3:X3\",\"N2:X2\",\"B1:O1\"]}', NULL, 'https://static.jero.com/designreport/images/xuexiao_1607069724407.png', 'admin', '2020-12-04 11:11:50', 'admin', '2021-01-13 14:13:31', 0, NULL, NULL, 1, 419); +INSERT INTO `jimu_report` VALUES ('1334757703079301120', '20201204151358', '车间零件完工一览表', NULL, NULL, 'datainfo', '{\"area\":false,\"printElWidth\":1529,\"excel_config_id\":\"1334757703079301120\",\"printElHeight\":923,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"车间零件完工一览表\",\"merge\":[0,12],\"style\":23}},\"height\":81},\"1\":{\"cells\":{\"0\":{\"style\":11},\"1\":{\"text\":\"车间\",\"style\":22},\"2\":{\"text\":\"成品名称\",\"style\":22},\"3\":{\"text\":\"半成品名称\",\"style\":22},\"4\":{\"text\":\"完工时间\",\"style\":22},\"5\":{\"text\":\"状态\",\"style\":22},\"6\":{\"text\":\"成品属性\",\"style\":22},\"7\":{\"text\":\"工单号\",\"style\":22},\"8\":{\"text\":\"工单数量\",\"style\":22},\"9\":{\"text\":\"计划数量\",\"style\":22},\"10\":{\"text\":\"完成数量\",\"style\":22},\"11\":{\"text\":\"UPH\",\"style\":22},\"12\":{\"text\":\"H/C\",\"style\":22},\"13\":{\"text\":\"计划时间\",\"style\":22},\"14\":{\"text\":\"良率\",\"style\":22},\"15\":{\"text\":\"备注\",\"style\":22},\"16\":{\"style\":11},\"17\":{\"style\":11},\"18\":{\"style\":11},\"19\":{\"style\":11},\"20\":{\"style\":11},\"21\":{\"style\":11},\"22\":{\"style\":11},\"23\":{\"style\":11},\"24\":{\"style\":11},\"25\":{\"style\":11},\"26\":{\"style\":11}},\"height\":55},\"2\":{\"cells\":{\"0\":{\"style\":13},\"1\":{\"text\":\"#{chejian.group(city)}\",\"style\":16,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{chejian.finish}\",\"style\":14},\"3\":{\"text\":\"#{chejian.semifinish}\",\"style\":14},\"4\":{\"text\":\"#{chejian.time}\",\"style\":14},\"5\":{\"text\":\"#{chejian.state}\",\"style\":14},\"6\":{\"text\":\"#{chejian.attribute}\",\"style\":14},\"7\":{\"text\":\"#{chejian.num}\",\"style\":14},\"8\":{\"text\":\"#{chejian.gnum}\",\"style\":14},\"9\":{\"text\":\"#{chejian.jnum}\",\"style\":14},\"10\":{\"text\":\"#{chejian.wnum}\",\"style\":14},\"11\":{\"text\":\"#{chejian.uph}\",\"style\":14},\"12\":{\"text\":\"#{chejian.hc}\",\"style\":14},\"13\":{\"text\":\"#{chejian.jtime}\",\"style\":14},\"14\":{\"text\":\"#{chejian.yield}\",\"style\":14},\"15\":{\"text\":\"#{chejian.beizhu}\",\"style\":14},\"16\":{\"style\":13},\"17\":{\"style\":13},\"18\":{\"style\":13},\"19\":{\"style\":13},\"20\":{\"style\":13},\"21\":{\"style\":13},\"22\":{\"style\":13},\"23\":{\"style\":13},\"24\":{\"style\":13},\"25\":{\"style\":13},\"26\":{\"style\":13}},\"isDrag\":true,\"height\":35},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"chejian.city\",\"freeze\":\"A1\",\"dataRectWidth\":1494,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\"},{\"bgcolor\":\"#309fc6\"},{\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"font\":{\"bold\":true}},{\"font\":{\"bold\":true,\"size\":16}},{\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\",\"bgcolor\":\"#\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\",\"bgcolor\":\"#b2ddec\"},{\"font\":{\"size\":8}},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"font\":{\"size\":8},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"align\":\"center\",\"bgcolor\":\"#b2ddec\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8},\"align\":\"center\"},{\"align\":\"center\",\"bgcolor\":\"#309fc6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"font\":{\"bold\":true,\"size\":16},\"align\":\"center\"}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":45},\"1\":{\"width\":106},\"2\":{\"width\":121},\"3\":{\"width\":124},\"4\":{\"width\":87},\"5\":{\"width\":76},\"6\":{\"width\":82},\"7\":{\"width\":81},\"8\":{\"width\":69},\"9\":{\"width\":76},\"10\":{\"width\":81},\"15\":{\"width\":146},\"len\":27},\"merges\":[\"B1:N1\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201216185352_1608116050060.png', 'admin', '2020-12-04 15:13:58', 'admin', '2021-01-13 14:13:28', 0, NULL, NULL, 1, 508); +INSERT INTO `jimu_report` VALUES ('1337271712059887616', '20201211134332', '山东智慧旅游大屏', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":11,\"width\":\"297\",\"height\":\"323\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"河北\\\",\\\"北京\\\",\\\"上海\\\",\\\"山东\\\",\\\"深圳\\\",\\\"黑龙江\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"data\\\":[{\\\"name\\\":\\\"河北\\\",\\\"value\\\":\\\"1500\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(99,198,213,1)\\\"}},{\\\"name\\\":\\\"北京\\\",\\\"value\\\":\\\"3700\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(249,190,165,1)\\\"}},{\\\"name\\\":\\\"上海\\\",\\\"value\\\":\\\"1000\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(254,231,105,1)\\\"}},{\\\"name\\\":\\\"山东\\\",\\\"value\\\":\\\"450\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(100,122,185,1)\\\"}},{\\\"name\\\":\\\"深圳\\\",\\\"value\\\":\\\"5000\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(116,166,198,1)\\\"}},{\\\"name\\\":\\\"黑龙江\\\",\\\"value\\\":\\\"3600\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(243,137,130,1)\\\"}}],\\\"bottom\\\":60,\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"minAngle\\\":\\\"10\\\",\\\"right\\\":\\\"10%\\\",\\\"label\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"autoSort\\\":false,\\\"isRose\\\":false,\\\"top\\\":60,\\\"left\\\":\\\"10%\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"radius\\\":[\\\"40%\\\",\\\"49%\\\"]}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"游客来源分析\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FAF6F6\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608012847874.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338678877395881985\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"laiyuan1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"pie.simple\",\"chartId\":\"pie.rose\"},\"layer_id\":\"i5HQTS1CQ2VH6nEQ\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,11],[1,12],[1,13],[1,14]]},{\"row\":1,\"col\":1,\"width\":\"365\",\"height\":\"155\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"杭州\\\",\\\"南京\\\",\\\"苏州\\\",\\\"武汉\\\",\\\"南昌\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":40,\\\"left\\\":44,\\\"bottom\\\":25,\\\"right\\\":10},\\\"series\\\":[{\\\"barWidth\\\":10,\\\"data\\\":[\\\"888\\\",\\\"765\\\",\\\"698\\\",\\\"436\\\",\\\"415\\\"],\\\"name\\\":\\\"数量\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":5,\\\"color\\\":\\\"rgba(19,199,248,1)\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#12C2F2\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"游客来源排名\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608013138921.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338457100451328002\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"laiyuan\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"bar.multi.horizontal\",\"chartId\":\"bar.multi.horizontal\",\"isTiming\":false,\"intervalTime\":\"2\"},\"layer_id\":\"ndKvmqU3tX7y3naJ\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2],[1,3],[1,4],[1,5]]},{\"row\":1,\"col\":9,\"width\":\"184\",\"height\":\"177\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量\\\",\\\"value\\\":\\\"11120\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(99,198,213,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":\\\"8800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#E0E0E1\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"38%\\\",\\\"45%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"出行方式—飞机\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608290902593.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338675446962720769\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"fangshi1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"pie.doughnut\",\"id\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"1uidom5ErD4PeDUK\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,9],[1,10]]},{\"row\":2,\"col\":5,\"width\":\"531\",\"height\":\"302\",\"config\":\"{\\\"geo\\\":{\\\"map\\\":\\\"shandong\\\",\\\"zoom\\\":0.7,\\\"label\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"8\\\",\\\"show\\\":true},\\\"itemStyle\\\":{\\\"borderWidth\\\":0.5,\\\"areaColor\\\":\\\"#8BD0F7\\\",\\\"borderColor\\\":\\\"#000\\\"},\\\"emphasis\\\":{\\\"label\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"itemStyle\\\":{\\\"areaColor\\\":\\\"#378DBD\\\"}},\\\"regions\\\":[],\\\"layoutSize\\\":600,\\\"roam\\\":true,\\\"layoutCenter\\\":[\\\"50%\\\",\\\"50%\\\"]},\\\"series\\\":[{\\\"data\\\":[{\\\"name\\\":\\\"宜兴市\\\",\\\"value\\\":[119.820538,31.364384,\\\"250\\\"]},{\\\"name\\\":\\\"江阴市\\\",\\\"value\\\":[120.275891,31.910984,\\\"500\\\"]}],\\\"name\\\":\\\"pm2.5\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"show\\\":true}},\\\"itemStyle\\\":{\\\"color\\\":\\\"#EDF663\\\"},\\\"coordinateSystem\\\":\\\"geo\\\",\\\"label\\\":{\\\"formatter\\\":\\\"{b}\\\",\\\"show\\\":false,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"8\\\"}},\\\"type\\\":\\\"scatter\\\",\\\"symbolSize\\\":5}],\\\"chartType\\\":\\\"map\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"主要城市空气质量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#F0E426\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"1338720793164517378\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"ditu\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"map.scatter\",\"chartId\":\"\"},\"layer_id\":\"gqXehyaiANglaPQG\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[2,5],[2,6],[2,7],[2,8]]},{\"row\":7,\"col\":1,\"width\":\"365\",\"height\":\"178\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":30,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"灵山\\\",\\\"梅园\\\",\\\"三国派\\\",\\\"张山洞\\\",\\\"惠山古镇\\\",\\\"东林书院\\\",\\\"档口古镇\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":41,\\\"left\\\":45,\\\"bottom\\\":49,\\\"right\\\":26},\\\"series\\\":[{\\\"barWidth\\\":13,\\\"data\\\":[\\\"888\\\",\\\"4702\\\",\\\"4484\\\",\\\"4356\\\",\\\"3752\\\",\\\"2500\\\",\\\"1800\\\"],\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":5,\\\"color\\\":\\\"#43F2E8\\\"},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":\\\"5px\\\",\\\"text\\\":\\\"游客分布排行\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FBFBFB\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608012838022.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338667866760679426\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"fenbu1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"bar.simple\",\"chartId\":\"bar.simple\"},\"layer_id\":\"aZ4FsMHs0xbfUpYQ\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[7,1],[7,2],[7,3],[7,4],[7,5]]},{\"row\":8,\"col\":9,\"width\":\"184\",\"height\":\"154\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量\\\",\\\"value\\\":\\\"11120\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(254,231,105,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":\\\"8800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#E0E0E1\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"48%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"出行方式—火车\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608291176729.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338675446962720769\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"fangshi1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"pie.doughnut\",\"id\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"778X5NaIRavT5Nm1\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,9],[8,10]]},{\"row\":14,\"col\":9,\"width\":\"189\",\"height\":\"129\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"11\\\"}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量\\\",\\\"value\\\":\\\"11120\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(243,137,130,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":\\\"8800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#E0E0E1\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"出行方式—轮船\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608291366947.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338675446962720769\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"fangshi1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"pie.doughnut\",\"id\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"DNX66I155dmhuer0\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,9],[14,10],[14,11]]},{\"row\":14,\"col\":1,\"width\":\"367\",\"height\":\"277\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"宾馆\\\",\\\"景区\\\",\\\"餐饮\\\",\\\"商城\\\",\\\"商业街\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"orient\\\":\\\"vertical\\\",\\\"data\\\":[{\\\"name\\\":\\\"宾馆\\\",\\\"value\\\":\\\"4.5\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(44,222,250,1)\\\"}},{\\\"name\\\":\\\"景区\\\",\\\"value\\\":\\\"4.4\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(127,244,201,1)\\\"}},{\\\"name\\\":\\\"餐饮\\\",\\\"value\\\":\\\"3.2\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(252,209,1,1)\\\"}},{\\\"name\\\":\\\"商城\\\",\\\"value\\\":\\\"2.3\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(239,134,127,1)\\\"}},{\\\"name\\\":\\\"商业街\\\",\\\"value\\\":\\\"2\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(105,127,193,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":\\\"1.8\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(115,164,196,1)\\\"}}],\\\"bottom\\\":27,\\\"itemStyle\\\":{\\\"borderColor\\\":\\\"#fff\\\",\\\"borderWidth\\\":1},\\\"sort\\\":\\\"descending\\\",\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"inside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"12\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"labelLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"length\\\":10},\\\"type\\\":\\\"funnel\\\",\\\"top\\\":59,\\\"left\\\":\\\"10%\\\",\\\"gap\\\":3,\\\"name\\\":\\\"漏斗图\\\",\\\"width\\\":\\\"72%\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"fontSize\\\":20}}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"trigger\\\":\\\"item\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"停留时长分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FBF8F8\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608012824514.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338669749617299458\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"yanshi\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"funnel.simple\",\"chartId\":\"bar.simple\"},\"layer_id\":\"7WtIijKkXSWV8mJp\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,1],[14,2],[14,3],[14,4],[14,5]]},{\"row\":14,\"col\":5,\"width\":\"531\",\"height\":\"277\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFEFE\\\",\\\"fontSize\\\":12}},\\\"data\\\":[\\\"10.1\\\",\\\"10.2\\\",\\\"10.3\\\",\\\"10.4\\\",\\\"10.5\\\",\\\"10.6\\\",\\\"10.7\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":49,\\\"left\\\":43,\\\"bottom\\\":42,\\\"right\\\":27},\\\"series\\\":[{\\\"areaStyle\\\":null,\\\"data\\\":[\\\"3200\\\",\\\"3000\\\",\\\"3500\\\",\\\"3800\\\",\\\"2800\\\",\\\"3100\\\",\\\"3700\\\"],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":false,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#01E4FE\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"游客趋势分析\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608012808605.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338724105821622274\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"qushi\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"line.simple\",\"chartId\":\"line.simple\"},\"layer_id\":\"ZrPvcA8ReTCrfWyy\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,5],[14,6],[14,7],[14,8]]},{\"row\":14,\"col\":11,\"width\":\"300\",\"height\":\"275\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"1\\\",\\\"2\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"layout\\\":\\\"circular\\\",\\\"lineStyle\\\":{\\\"curveness\\\":0.3,\\\"color\\\":\\\"source\\\"},\\\"data\\\":[{\\\"name\\\":\\\"江苏\\\",\\\"value\\\":\\\"500\\\",\\\"category\\\":0,\\\"type\\\":\\\"1\\\"},{\\\"name\\\":\\\"广东\\\",\\\"value\\\":\\\"300\\\",\\\"category\\\":1,\\\"type\\\":\\\"2\\\"},{\\\"name\\\":\\\"浙江\\\",\\\"value\\\":\\\"100\\\",\\\"category\\\":2,\\\"type\\\":\\\"1\\\"},{\\\"name\\\":\\\"湖北\\\",\\\"value\\\":\\\"1000\\\",\\\"category\\\":2,\\\"type\\\":\\\"1\\\"},{\\\"name\\\":\\\"湖南\\\",\\\"value\\\":\\\"888\\\",\\\"category\\\":2,\\\"type\\\":\\\"1\\\"}],\\\"center\\\":[320,150],\\\"name\\\":\\\"关系图\\\",\\\"links\\\":[{\\\"source\\\":\\\"江苏\\\",\\\"target\\\":\\\"广东\\\"},{\\\"source\\\":\\\"广东\\\",\\\"target\\\":\\\"湖北\\\"},{\\\"source\\\":\\\"湖南\\\",\\\"target\\\":\\\"江苏\\\"},{\\\"source\\\":\\\"广东\\\",\\\"target\\\":\\\"浙江\\\"},{\\\"source\\\":\\\"浙江\\\",\\\"target\\\":\\\"广东\\\"},{\\\"source\\\":\\\"浙江\\\",\\\"target\\\":\\\"湖北\\\"},{\\\"source\\\":\\\"浙江\\\",\\\"target\\\":\\\"湖南\\\"},{\\\"source\\\":\\\"湖南\\\",\\\"target\\\":\\\"浙江\\\"},{\\\"source\\\":\\\"湖南\\\",\\\"target\\\":\\\"湖北\\\"},{\\\"source\\\":\\\"湖南\\\",\\\"target\\\":\\\"广东\\\"},{\\\"source\\\":\\\"湖北\\\",\\\"target\\\":\\\"江苏\\\"}],\\\"categories\\\":[{\\\"name\\\":\\\"1\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"\\\"}},{\\\"name\\\":\\\"2\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"\\\"}},{\\\"name\\\":\\\"1\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"\\\"}}],\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"type\\\":\\\"graph\\\",\\\"roam\\\":true}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"来源关系分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608291719728.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338687259901169665\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"xianlu\",\"dataId1\":\"1338687435562815489\",\"source\":\"from_name\",\"target\":\"to_name\",\"chartType\":\"graph.simple\",\"isTiming\":true,\"intervalTime\":\"5\",\"id\":\"\"},\"layer_id\":\"ejghiJGsHBsY5lsY\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,11],[14,12],[14,13],[14,14]]},{\"row\":19,\"col\":9,\"width\":\"189\",\"height\":\"148\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"数量\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"数量\\\",\\\"value\\\":\\\"11120\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(116,166,198,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":\\\"8800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#E0E0E1\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"出行方式—其他\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#ffffff\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":{\\\"src\\\":\\\"https://static.jero.com/designreport/images/bg1_1608291475210.png\\\"}}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"dataId\":\"1338675446962720769\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"fangshi1\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"chartType\":\"pie.doughnut\",\"id\":\"\",\"isTiming\":true,\"intervalTime\":\"5\"},\"layer_id\":\"SyZNSbb9ooxZvyH1\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[19,9],[19,10],[19,11]]}],\"area\":{\"sri\":15,\"sci\":1,\"eri\":96,\"eci\":10,\"width\":1082,\"height\":2050},\"printElWidth\":794,\"excel_config_id\":\"1337271712059887616\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"山东智慧旅游大屏\",\"style\":5,\"merge\":[0,12]},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6},\"5\":{\"style\":6},\"6\":{\"style\":6},\"7\":{\"style\":6},\"8\":{\"style\":6},\"9\":{\"style\":6},\"10\":{\"style\":6},\"11\":{\"style\":6},\"12\":{\"style\":6},\"13\":{\"style\":6}},\"height\":96},\"1\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"ndKvmqU3tX7y3naJ\"},\"2\":{\"text\":\" \",\"virtual\":\"ndKvmqU3tX7y3naJ\"},\"3\":{\"text\":\" \",\"virtual\":\"ndKvmqU3tX7y3naJ\"},\"4\":{\"text\":\" \",\"virtual\":\"ndKvmqU3tX7y3naJ\"},\"5\":{\"text\":\" \",\"virtual\":\"ndKvmqU3tX7y3naJ\"},\"9\":{\"text\":\" \",\"virtual\":\"1uidom5ErD4PeDUK\"},\"10\":{\"text\":\" \",\"virtual\":\"1uidom5ErD4PeDUK\"},\"11\":{\"text\":\" \",\"virtual\":\"i5HQTS1CQ2VH6nEQ\"},\"12\":{\"text\":\" \",\"virtual\":\"i5HQTS1CQ2VH6nEQ\"},\"13\":{\"text\":\" \",\"virtual\":\"i5HQTS1CQ2VH6nEQ\"},\"14\":{\"text\":\" \",\"virtual\":\"i5HQTS1CQ2VH6nEQ\"}}},\"2\":{\"cells\":{\"5\":{\"text\":\" \",\"virtual\":\"gqXehyaiANglaPQG\"},\"6\":{\"text\":\" \",\"virtual\":\"gqXehyaiANglaPQG\"},\"7\":{\"text\":\" \",\"virtual\":\"gqXehyaiANglaPQG\"},\"8\":{\"text\":\" \",\"virtual\":\"gqXehyaiANglaPQG\"}}},\"5\":{\"cells\":{}},\"6\":{\"cells\":{}},\"7\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"aZ4FsMHs0xbfUpYQ\"},\"2\":{\"text\":\" \",\"virtual\":\"aZ4FsMHs0xbfUpYQ\"},\"3\":{\"text\":\" \",\"virtual\":\"aZ4FsMHs0xbfUpYQ\"},\"4\":{\"text\":\" \",\"virtual\":\"aZ4FsMHs0xbfUpYQ\"},\"5\":{\"text\":\" \",\"virtual\":\"aZ4FsMHs0xbfUpYQ\"}}},\"8\":{\"cells\":{\"9\":{\"text\":\" \",\"virtual\":\"778X5NaIRavT5Nm1\"},\"10\":{\"text\":\" \",\"virtual\":\"778X5NaIRavT5Nm1\"}}},\"12\":{\"cells\":{}},\"13\":{\"cells\":{\"11\":{\"text\":\"\",\"virtual\":\"e0TvMeaBiYnZTQ0X\",\"merge\":[0,2],\"style\":4},\"12\":{\"style\":4,\"virtual\":\"e0TvMeaBiYnZTQ0X\"},\"13\":{\"style\":4,\"virtual\":\"e0TvMeaBiYnZTQ0X\"}}},\"14\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"7WtIijKkXSWV8mJp\"},\"2\":{\"text\":\" \",\"virtual\":\"7WtIijKkXSWV8mJp\"},\"3\":{\"text\":\" \",\"virtual\":\"7WtIijKkXSWV8mJp\"},\"4\":{\"text\":\" \",\"virtual\":\"7WtIijKkXSWV8mJp\"},\"5\":{\"text\":\" \",\"virtual\":\"ZrPvcA8ReTCrfWyy\"},\"6\":{\"text\":\" \",\"virtual\":\"ZrPvcA8ReTCrfWyy\"},\"7\":{\"text\":\" \",\"virtual\":\"ZrPvcA8ReTCrfWyy\"},\"8\":{\"text\":\" \",\"virtual\":\"ZrPvcA8ReTCrfWyy\"},\"9\":{\"text\":\" \",\"virtual\":\"DNX66I155dmhuer0\"},\"10\":{\"text\":\" \",\"virtual\":\"DNX66I155dmhuer0\"},\"11\":{\"text\":\" \",\"virtual\":\"ejghiJGsHBsY5lsY\"},\"12\":{\"text\":\" \",\"virtual\":\"ejghiJGsHBsY5lsY\"},\"13\":{\"text\":\" \",\"virtual\":\"ejghiJGsHBsY5lsY\"},\"14\":{\"text\":\" \",\"virtual\":\"ejghiJGsHBsY5lsY\"}}},\"15\":{\"cells\":{}},\"16\":{\"cells\":{}},\"19\":{\"cells\":{\"9\":{\"text\":\" \",\"virtual\":\"SyZNSbb9ooxZvyH1\"},\"10\":{\"text\":\" \",\"virtual\":\"SyZNSbb9ooxZvyH1\"},\"11\":{\"text\":\" \",\"virtual\":\"SyZNSbb9ooxZvyH1\"}}},\"20\":{\"cells\":{}},\"21\":{\"cells\":{}},\"27\":{\"cells\":{\"2\":{\"text\":\"\"}},\"isDrag\":true},\"len\":97},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1537,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg_1607665431796.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"color\":\"rgb(71,208,241)\"},{\"color\":\"rgb(71,208,241)\",\"font\":{\"size\":16}},{\"color\":\"rgb(71,208,241)\",\"font\":{\"size\":16},\"align\":\"center\"},{\"align\":\"center\"},{\"color\":\"#ffffff\"},{\"color\":\"rgb(71,208,241)\",\"font\":{\"size\":18},\"align\":\"center\"},{\"font\":{\"size\":18}}],\"validations\":[],\"cols\":{\"0\":{\"width\":60},\"4\":{\"width\":62},\"7\":{\"width\":182},\"8\":{\"width\":150},\"10\":{\"width\":88},\"11\":{\"width\":95},\"len\":26},\"merges\":[\"B1:N1\",\"L14:N14\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201218200411_1608293066714.png', 'admin', '2020-12-11 13:43:33', 'admin', '2021-01-13 13:44:29', 1, NULL, NULL, 0, 341); +INSERT INTO `jimu_report` VALUES ('1338370016550195200', '20201214142804', '条形码报表', NULL, NULL, 'datainfo', '{\"area\":{\"sri\":0,\"sci\":1,\"eri\":1,\"eci\":4,\"width\":406,\"height\":143},\"printElWidth\":794,\"excel_config_id\":\"1338370016550195200\",\"barcodeList\":[{\"row\":0,\"col\":5,\"width\":\"221\",\"height\":\"63\",\"layer_id\":\"ZiOFmILaRjdmVs6E\",\"offsetX\":0,\"offsetY\":0,\"jsonString\":\"{\\\"barcodeContent\\\":\\\"968557412333\\\",\\\"format\\\":\\\"CODE128\\\",\\\"width\\\":2,\\\"height\\\":100,\\\"displayValue\\\":false,\\\"text\\\":\\\"jmreport\\\",\\\"fontOptions\\\":\\\"\\\",\\\"font\\\":\\\"monospace\\\",\\\"textAlign\\\":\\\"center\\\",\\\"textPosition\\\":\\\"bottom\\\",\\\"textMargin\\\":2,\\\"fontSize\\\":20,\\\"background\\\":\\\"#fff\\\",\\\"lineColor\\\":\\\"#000\\\",\\\"margin\\\":10,\\\"containerWidth\\\":\\\"315\\\",\\\"containerHeight\\\":\\\"50\\\"}\",\"virtualCellRange\":[[0,5],[0,6],[0,7]]}],\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"merge\":[1,3],\"text\":\"居民身份证申领登记表\",\"style\":39},\"2\":{\"style\":39},\"3\":{\"style\":39},\"4\":{\"style\":39},\"5\":{\"text\":\" \",\"virtual\":\"ZiOFmILaRjdmVs6E\"},\"6\":{\"text\":\" \",\"virtual\":\"ZiOFmILaRjdmVs6E\"},\"7\":{\"text\":\" \",\"virtual\":\"ZiOFmILaRjdmVs6E\"}},\"height\":91},\"1\":{\"cells\":{\"1\":{\"style\":39},\"2\":{\"style\":39},\"3\":{\"style\":39},\"4\":{\"style\":39},\"5\":{\"style\":2,\"virtual\":\"ZiOFmILaRjdmVs6E\"},\"6\":{\"text\":\" \",\"virtual\":\"ZiOFmILaRjdmVs6E\"},\"7\":{\"text\":\" \",\"virtual\":\"ZiOFmILaRjdmVs6E\"}},\"height\":52},\"2\":{\"cells\":{\"1\":{\"text\":\"受理单位(盖章)珠海市公安局\",\"merge\":[0,3],\"style\":36},\"2\":{\"style\":36},\"3\":{\"style\":36},\"4\":{\"style\":36},\"5\":{\"style\":6},\"6\":{\"style\":6},\"7\":{\"style\":6}},\"height\":34},\"3\":{\"cells\":{\"1\":{\"text\":\"姓名\",\"style\":24},\"2\":{\"text\":\"${tiaoma.name}\",\"style\":7},\"3\":{\"text\":\"性别\",\"style\":16},\"4\":{\"text\":\"${tiaoma.sex}\",\"style\":7,\"isDict\":1,\"dictCode\":\"sex1\"},\"5\":{\"text\":\"民族\",\"style\":16},\"6\":{\"text\":\"${tiaoma.nation}\",\"style\":7},\"7\":{\"text\":\"\",\"style\":7,\"merge\":[2,0]}},\"isDrag\":true,\"height\":47},\"4\":{\"cells\":{\"1\":{\"text\":\"出生日期\",\"style\":24},\"2\":{\"text\":\"${tiaoma.birth}\",\"style\":32,\"merge\":[0,4]},\"3\":{\"style\":33},\"4\":{\"style\":33},\"5\":{\"style\":33},\"6\":{\"style\":33}},\"isDrag\":true,\"height\":51},\"5\":{\"cells\":{\"1\":{\"text\":\"常住户口所在地住址\",\"style\":21},\"2\":{\"text\":\"${tiaoma.address}\",\"style\":7,\"merge\":[0,4]}},\"isDrag\":true,\"height\":62},\"6\":{\"cells\":{\"1\":{\"text\":\"公民身份证\",\"style\":24},\"2\":{\"text\":\"${tiaoma.card}\",\"style\":7,\"merge\":[0,5]}},\"isDrag\":true,\"height\":55},\"7\":{\"cells\":{\"1\":{\"text\":\"有限期限\",\"style\":24},\"2\":{\"text\":\"${tiaoma.date}\",\"style\":34,\"merge\":[0,1]},\"3\":{\"style\":35},\"4\":{\"text\":\"签发机关\",\"style\":24},\"5\":{\"text\":\"${tiaoma.orga}\",\"style\":7,\"merge\":[0,2]}},\"isDrag\":true,\"height\":52},\"8\":{\"cells\":{\"1\":{\"text\":\"申领原因\",\"style\":24},\"2\":{\"text\":\"${tiaoma.reason}\",\"style\":7,\"merge\":[0,5]}},\"isDrag\":true,\"height\":55},\"9\":{\"cells\":{\"1\":{\"text\":\"受理时间\",\"style\":24},\"2\":{\"text\":\"${tiaoma.time}\",\"style\":32,\"merge\":[0,1]},\"3\":{\"style\":33},\"4\":{\"text\":\"受理号\",\"style\":24},\"5\":{\"text\":\"${tiaoma.num}\",\"style\":7,\"merge\":[0,2]}},\"isDrag\":true,\"height\":49},\"10\":{\"cells\":{\"1\":{\"text\":\"承办人\",\"style\":24},\"2\":{\"text\":\"${tiaoma.undertaker}\",\"style\":7,\"merge\":[0,1]},\"4\":{\"text\":\"受理单位领导\",\"style\":24},\"5\":{\"text\":\"${tiaoma.leader}\",\"style\":7,\"merge\":[0,2]}},\"isDrag\":true,\"height\":42},\"11\":{\"cells\":{\"1\":{\"text\":\"申请(监护)人签名\",\"style\":21},\"2\":{\"text\":\"${tiaoma.autograph}\",\"style\":7,\"merge\":[0,1]},\"4\":{\"text\":\"申请(监护)人联系电话\",\"style\":21},\"5\":{\"text\":\"${tiaoma.phone}\",\"style\":7,\"merge\":[0,2]}},\"isDrag\":true,\"height\":59},\"12\":{\"cells\":{\"1\":{\"text\":\"领证人签名\",\"style\":24},\"2\":{\"text\":\"${tiaoma.qianming}\",\"style\":7,\"merge\":[0,1]},\"4\":{\"text\":\"领证时间\",\"style\":24},\"5\":{\"text\":\"${tiaoma.ltime}\",\"style\":32,\"merge\":[0,2]},\"6\":{\"style\":33},\"7\":{\"style\":33}},\"isDrag\":true,\"height\":57},\"13\":{\"cells\":{\"1\":{\"text\":\"是否通过邮政特快专递方式领取二代\",\"merge\":[0,1],\"style\":24},\"2\":{\"text\":\" \",\"style\":25},\"3\":{\"text\":\"${tiaoma.os}\",\"style\":7,\"merge\":[0,4]}},\"isDrag\":true,\"height\":50},\"14\":{\"cells\":{\"1\":{\"text\":\"投递地址\",\"style\":24},\"2\":{\"text\":\"${tiaoma.taddress}\",\"style\":7,\"merge\":[0,2]},\"5\":{\"text\":\"收件人\",\"style\":24},\"6\":{\"style\":7,\"text\":\" \",\"merge\":[0,1]}},\"isDrag\":true,\"height\":53},\"15\":{\"cells\":{\"1\":{\"text\":\"邮政编码\",\"style\":24},\"2\":{\"text\":\"${tiaoma.code}\",\"style\":7,\"merge\":[0,1]},\"4\":{\"text\":\"备注\",\"style\":24},\"5\":{\"text\":\"${tiaoma.remarks}\",\"style\":7,\"merge\":[0,2]}},\"isDrag\":true,\"height\":47},\"16\":{\"cells\":{\"1\":{\"merge\":[0,6],\"text\":\"公安部治安管理局治\",\"style\":31},\"2\":{\"style\":31},\"3\":{\"style\":31},\"4\":{\"style\":31},\"5\":{\"style\":31},\"6\":{\"style\":31},\"7\":{\"style\":31}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[\"sex1\",\"sex1\",\"sex1\"],\"freeze\":\"A1\",\"dataRectWidth\":739,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"font\":{\"size\":16}},{\"font\":{\"size\":16},\"align\":\"center\"},{\"align\":\"center\"},{\"textwrap\":true},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\",\"size\":9}},{\"font\":{\"name\":\"宋体\",\"size\":9},\"color\":\"#3f3f3f\"},{\"font\":{\"name\":\"宋体\",\"size\":9},\"color\":\"#0c0c0c\"},{\"font\":{\"name\":\"宋体\",\"size\":9},\"color\":\"#7f7f7f\"},{\"font\":{\"name\":\"宋体\",\"size\":9},\"color\":\"#595959\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"right\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":false}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":false}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":false},\"align\":\"center\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":true}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"center\"},{\"font\":{\"name\":\"宋体\",\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"center\"},{\"font\":{\"name\":\"宋体\",\"bold\":true},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"center\"},{\"font\":{\"size\":8}},{\"font\":{\"size\":8},\"align\":\"center\"},{\"font\":{\"size\":8},\"align\":\"right\"},{\"font\":{\"size\":10},\"align\":\"right\"},{\"font\":{\"size\":10},\"align\":\"right\",\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"date2\"},{\"format\":\"date2\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"format\":\"date\"},{\"format\":\"date\"},{\"font\":{\"name\":\"宋体\",\"size\":9},\"color\":\"#595959\",\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16},\"valign\":\"bottom\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":51},\"1\":{\"width\":103},\"2\":{\"width\":156},\"3\":{\"width\":51},\"4\":{\"width\":96},\"5\":{\"width\":61},\"6\":{\"width\":106},\"7\":{\"width\":115},\"8\":{\"width\":135},\"len\":26},\"merges\":[\"B3:E3\",\"B14:C14\",\"C6:G6\",\"C5:G5\",\"C7:H7\",\"C8:D8\",\"F8:H8\",\"C9:H9\",\"D14:H14\",\"C10:D10\",\"F10:H10\",\"C11:D11\",\"F11:H11\",\"C13:D13\",\"C12:D12\",\"F12:H12\",\"F13:H13\",\"C15:E15\",\"G15:H15\",\"F16:H16\",\"C16:D16\",\"B17:H17\",\"H4:H6\",\"B1:E2\"]}', NULL, 'https://static.jero.com/designreport/images/未标题-1_1608118350039.png', 'admin', '2020-12-14 14:28:04', 'admin', '2021-01-13 14:13:25', 0, NULL, NULL, 1, 743); +INSERT INTO `jimu_report` VALUES ('1338744112815411200', '20201215151426', '简单条件查询报表', NULL, NULL, 'datainfo', '{\"area\":false,\"printElWidth\":1259,\"excel_config_id\":\"1338744112815411200\",\"printElHeight\":700,\"rows\":{\"0\":{\"cells\":{\"0\":{\"style\":39},\"1\":{\"style\":39},\"2\":{\"style\":39},\"3\":{\"style\":39},\"4\":{\"style\":39},\"5\":{\"style\":39},\"6\":{\"style\":39},\"7\":{\"style\":39},\"8\":{\"style\":39},\"9\":{\"style\":39},\"10\":{\"style\":39},\"11\":{\"style\":39},\"12\":{\"style\":39},\"13\":{\"style\":39},\"14\":{\"style\":39},\"15\":{\"style\":39},\"16\":{\"style\":39},\"17\":{\"style\":39},\"18\":{\"style\":39},\"19\":{\"style\":39},\"20\":{\"style\":39},\"21\":{\"style\":39},\"22\":{\"style\":39},\"23\":{\"style\":39},\"24\":{\"style\":39},\"25\":{\"style\":39}}},\"1\":{\"cells\":{\"0\":{\"style\":40},\"1\":{\"text\":\"发货地区\",\"style\":41},\"2\":{\"text\":\"发货城市\",\"style\":41},\"3\":{\"text\":\"发货公司\",\"style\":41},\"4\":{\"text\":\"运费\",\"style\":41},\"5\":{\"text\":\"发货日期\",\"style\":41},\"6\":{\"text\":\"客户ID\",\"style\":41},\"7\":{\"text\":\"客户地址\",\"style\":41},\"8\":{\"text\":\"订购日期\",\"style\":41},\"9\":{\"text\":\"到货日期\",\"style\":41},\"10\":{\"text\":\"邮政编码\",\"style\":41},\"11\":{\"style\":40},\"12\":{\"style\":40},\"13\":{\"style\":40},\"14\":{\"style\":40},\"15\":{\"style\":40},\"16\":{\"style\":40},\"17\":{\"style\":40},\"18\":{\"style\":40},\"19\":{\"style\":40},\"20\":{\"style\":40},\"21\":{\"style\":40},\"22\":{\"style\":40},\"23\":{\"style\":40},\"24\":{\"style\":40},\"25\":{\"style\":40}},\"height\":46},\"2\":{\"cells\":{\"0\":{\"text\":\"\",\"style\":42},\"1\":{\"text\":\"#{jdcx.group(region)}\",\"style\":43,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{jdcx.group(city)}\",\"style\":44,\"aggregate\":\"group\"},\"3\":{\"text\":\"#{jdcx.company}\",\"style\":45},\"4\":{\"text\":\"#{jdcx.freight}\",\"style\":46},\"5\":{\"text\":\"#{jdcx.ftime}\",\"style\":48},\"6\":{\"text\":\"#{jdcx.customer}\",\"style\":46},\"7\":{\"text\":\"#{jdcx.address}\",\"style\":46},\"8\":{\"text\":\"#{jdcx.ftime}\",\"style\":47},\"9\":{\"text\":\"#{jdcx.ttime}\",\"style\":47},\"10\":{\"text\":\"#{jdcx.code1}\",\"style\":46},\"11\":{\"style\":42},\"12\":{\"style\":42},\"13\":{\"style\":42},\"14\":{\"style\":42},\"15\":{\"style\":42},\"16\":{\"style\":42},\"17\":{\"style\":42},\"18\":{\"style\":42},\"19\":{\"style\":42},\"20\":{\"style\":42},\"21\":{\"style\":42},\"22\":{\"style\":42},\"23\":{\"style\":42},\"24\":{\"style\":42},\"25\":{\"style\":42}},\"isDrag\":true,\"height\":35},\"len\":99},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"jdcx.region\",\"freeze\":\"A1\",\"dataRectWidth\":1228,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"bgcolor\":\"#5b9cd6\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\"},{\"align\":\"center\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\",\"format\":\"date\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"name\":\"宋体\"}},{\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"date\"},{\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"date\"},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"date\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"date2\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"normal\"}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":40},\"1\":{\"width\":107},\"3\":{\"width\":143},\"5\":{\"width\":163},\"6\":{\"width\":84},\"7\":{\"width\":191},\"len\":26},\"merges\":[]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201216112919_1608089379396.png', 'admin', '2020-12-15 15:14:27', 'admin', '2021-01-13 14:13:18', 0, NULL, NULL, 1, 1039); +INSERT INTO `jimu_report` VALUES ('1338769064067076098', '202012151514266124', '多选条件查询报表', NULL, NULL, 'datainfo', '{\"area\":false,\"printElWidth\":1533,\"excel_config_id\":\"1338769064067076098\",\"printElHeight\":764,\"rows\":{\"0\":{\"cells\":{\"0\":{\"style\":49},\"1\":{\"style\":49},\"2\":{\"style\":49},\"3\":{\"style\":49},\"4\":{\"style\":49},\"5\":{\"style\":49},\"6\":{\"style\":49},\"7\":{\"style\":49},\"8\":{\"style\":49},\"9\":{\"style\":49},\"10\":{\"style\":49},\"11\":{\"style\":49},\"12\":{\"style\":49},\"13\":{\"style\":49},\"14\":{\"style\":49},\"15\":{\"style\":49},\"16\":{\"style\":49},\"17\":{\"style\":49},\"18\":{\"style\":49},\"19\":{\"style\":49},\"20\":{\"style\":49},\"21\":{\"style\":49},\"22\":{\"style\":49},\"23\":{\"style\":49},\"24\":{\"style\":49},\"25\":{\"style\":49}}},\"1\":{\"cells\":{\"0\":{\"style\":50},\"1\":{\"text\":\"职务\",\"style\":51},\"2\":{\"text\":\"雇员ID\",\"style\":51},\"3\":{\"text\":\"姓名\",\"style\":51},\"4\":{\"style\":51,\"text\":\"性别\"},\"5\":{\"text\":\"雇佣日期\",\"style\":51},\"6\":{\"text\":\"家庭电话\",\"style\":51},\"7\":{\"text\":\"出生日期\",\"style\":51},\"8\":{\"text\":\"户口所在地\",\"style\":51},\"9\":{\"text\":\"联系地址\",\"style\":51},\"10\":{\"text\":\"紧急联系人\",\"style\":51},\"11\":{\"style\":50},\"12\":{\"style\":50},\"13\":{\"style\":50},\"14\":{\"style\":50},\"15\":{\"style\":50},\"16\":{\"style\":50},\"17\":{\"style\":50},\"18\":{\"style\":50},\"19\":{\"style\":50},\"20\":{\"style\":50},\"21\":{\"style\":50},\"22\":{\"style\":50},\"23\":{\"style\":50},\"24\":{\"style\":50},\"25\":{\"style\":50}},\"height\":46},\"2\":{\"cells\":{\"0\":{\"style\":52},\"1\":{\"text\":\"#{pop.group(update_by)}\",\"style\":53,\"aggregate\":\"group\"},\"2\":{\"text\":\"#{pop.group(id)}\",\"style\":54,\"aggregate\":\"group\"},\"3\":{\"text\":\"#{pop.group(name)}\",\"style\":54,\"aggregate\":\"group\"},\"4\":{\"text\":\"#{pop.sex}\",\"style\":55},\"5\":{\"text\":\"#{pop.gtime}\",\"style\":56},\"6\":{\"text\":\"#{pop.jphone}\",\"style\":57},\"7\":{\"text\":\"#{pop.birth}\",\"style\":56},\"8\":{\"text\":\"#{pop.hukou}\",\"style\":58},\"9\":{\"text\":\"#{pop.laddress}\",\"style\":57},\"10\":{\"text\":\"#{pop.jperson}\",\"style\":57},\"11\":{\"style\":52},\"12\":{\"style\":52},\"13\":{\"style\":52},\"14\":{\"style\":52},\"15\":{\"style\":52},\"16\":{\"style\":52},\"17\":{\"style\":52},\"18\":{\"style\":52},\"19\":{\"style\":52},\"20\":{\"style\":52},\"21\":{\"style\":52},\"22\":{\"style\":52},\"23\":{\"style\":52},\"24\":{\"style\":52},\"25\":{\"style\":52}},\"isDrag\":true,\"height\":35},\"5\":{\"cells\":{\"2\":{\"text\":\"\"}},\"isDrag\":true},\"len\":99},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"groupField\":\"pop.update_by\",\"freeze\":\"A1\",\"dataRectWidth\":1494,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"bgcolor\":\"#5b9cd6\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"color\":\"#ffffff\"},{\"align\":\"center\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\"},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\"},{\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":8}},{\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9},\"align\":\"center\",\"format\":\"date\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"name\":\"宋体\"}},{\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"date\"},{\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#f1f9f6\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ddefe8\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"date\"},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#deeaf6\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":10,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#deeaf6\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"宋体\"},\"align\":\"center\",\"format\":\"normal\"},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"name\":\"Microsoft YaHei\"}},{\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#deeaf6\",\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#bdd7ee\",\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"date\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"normal\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"font\":{\"size\":9,\"name\":\"Microsoft YaHei\"},\"align\":\"center\",\"format\":\"date2\"}],\"validations\":[],\"isGroup\":true,\"cols\":{\"0\":{\"width\":48},\"1\":{\"width\":107},\"3\":{\"width\":91},\"4\":{\"width\":142},\"5\":{\"width\":130},\"6\":{\"width\":131},\"7\":{\"width\":235},\"8\":{\"width\":230},\"9\":{\"width\":148},\"10\":{\"width\":132},\"len\":26},\"merges\":[]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201216185224_1608116008543.png', 'admin', '2020-12-15 16:53:13', 'admin', '2021-01-13 14:13:13', 0, NULL, NULL, 1, 882); +INSERT INTO `jimu_report` VALUES ('1339478701846433792', '20201217155313', '企业实时报表', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":6,\"col\":1,\"width\":\"302\",\"height\":\"337\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"江苏\\\",\\\"山东\\\",\\\"安徽\\\",\\\"江西\\\",\\\"河北\\\",\\\"吉林\\\",\\\"黑龙江\\\",\\\"重庆\\\",\\\"广东\\\",\\\"上海\\\",\\\"哈尔滨\\\",\\\"福建\\\",\\\"四川\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":20,\\\"left\\\":45,\\\"bottom\\\":16,\\\"right\\\":46},\\\"series\\\":[{\\\"barWidth\\\":13,\\\"data\\\":[100,800,1200,1700,2500,4000,5800,6500,7000,7500,8000,8800,9500],\\\"name\\\":\\\"销售额\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":5,\\\"color\\\":\\\"rgba(67,184,251,1)\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#689AFB\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"销售额省份排名\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339491107951640577\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"xiaoshoue\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.multi.horizontal\",\"chartId\":\"pie.doughnut\"},\"layer_id\":\"IFj1lg5S5aNG1wPx\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,1],[6,2],[6,3],[6,4]]},{\"row\":6,\"col\":10,\"width\":\"247\",\"height\":\"124\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"销售额\\\",\\\"value\\\":6000000,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(43,193,254,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":3400879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(42,45,76,0.59)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"销售进度\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339498906765000705\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"xsjd\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.doughnut\",\"chartId\":\"pie.doughnut\"},\"layer_id\":\"Yb2TIGEAxnvN9ITx\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,10],[6,11]]},{\"row\":6,\"col\":12,\"width\":\"244\",\"height\":\"128\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"北京\\\",\\\"青岛\\\",\\\"合肥\\\",\\\"深圳\\\",\\\"石家庄\\\",\\\"重庆\\\",\\\"保定\\\",\\\"邯郸\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":10,\\\"left\\\":49,\\\"bottom\\\":16,\\\"right\\\":45},\\\"series\\\":[{\\\"barWidth\\\":9,\\\"data\\\":[80,500,800,1000,1200,1500,1600,2000],\\\"name\\\":\\\"销售额\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":0,\\\"color\\\":\\\"rgba(146,119,252,1)\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#689AFB\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"销售额城市排名\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339495346077728770\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"chengshi\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.multi.horizontal\",\"chartId\":\"bar.multi.horizontal\"},\"layer_id\":\"qQHpevWlqElpRQUl\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,12],[6,13],[6,14]]},{\"row\":6,\"col\":15,\"width\":\"230\",\"height\":\"127\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"北京\\\",\\\"青岛\\\",\\\"合肥\\\",\\\"深圳\\\",\\\"石家庄\\\",\\\"重庆\\\",\\\"保定\\\",\\\"邯郸\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":10,\\\"left\\\":49,\\\"bottom\\\":20,\\\"right\\\":48},\\\"series\\\":[{\\\"barWidth\\\":9,\\\"data\\\":[80,500,800,1000,1200,1500,1600,2000],\\\"name\\\":\\\"销售额\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":0,\\\"color\\\":\\\"rgba(146,119,252,1)\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#689AFB\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"某站点用户访问来源\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339495346077728770\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"chengshi\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.multi.horizontal\",\"chartId\":\"bar.multi.horizontal\"},\"layer_id\":\"phTmhkjHLebYlOEQ\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[6,15],[6,16],[6,17],[6,18]]},{\"row\":7,\"col\":5,\"width\":\"430\",\"height\":\"293\",\"config\":\"{\\\"geo\\\":{\\\"map\\\":\\\"china\\\",\\\"zoom\\\":0.5,\\\"label\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"8\\\",\\\"show\\\":true},\\\"itemStyle\\\":{\\\"borderWidth\\\":0.5,\\\"areaColor\\\":\\\"#8284FB\\\",\\\"borderColor\\\":\\\"#000\\\"},\\\"emphasis\\\":{\\\"label\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"itemStyle\\\":{\\\"areaColor\\\":\\\"#4195EF\\\"}},\\\"regions\\\":[],\\\"layoutSize\\\":600,\\\"roam\\\":true,\\\"layoutCenter\\\":[\\\"50%\\\",\\\"50%\\\"]},\\\"series\\\":[{\\\"encode\\\":{\\\"value\\\":[2]},\\\"data\\\":[{\\\"name\\\":\\\"河北\\\",\\\"value\\\":[114.502461,38.045474,279]},{\\\"name\\\":\\\"海南\\\",\\\"value\\\":[110.33119,20.031971,273]},{\\\"name\\\":\\\"山东\\\",\\\"value\\\":[117.000923,36.675807,229]},{\\\"name\\\":\\\"甘肃\\\",\\\"value\\\":[103.823557,36.058039,194]},{\\\"name\\\":\\\"宁夏\\\",\\\"value\\\":[106.278179,38.46637,193]},{\\\"name\\\":\\\"浙江\\\",\\\"value\\\":[120.153576,30.287459,177]},{\\\"name\\\":\\\"湖南\\\",\\\"value\\\":[112.982279,28.19409,119]},{\\\"name\\\":\\\"湖北\\\",\\\"value\\\":[114.298572,30.584355,79]},{\\\"name\\\":\\\"河南\\\",\\\"value\\\":[113.665412,34.757975,67]},{\\\"name\\\":\\\"北京\\\",\\\"value\\\":[116.405285,39.904989,58]},{\\\"name\\\":\\\"天津\\\",\\\"value\\\":[117.190182,39.125596,59]},{\\\"name\\\":\\\"上海\\\",\\\"value\\\":[121.472644,31.231706,63]}],\\\"name\\\":\\\"\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"show\\\":true}},\\\"itemStyle\\\":{\\\"color\\\":\\\"#FF1205\\\"},\\\"coordinateSystem\\\":\\\"geo\\\",\\\"label\\\":{\\\"formatter\\\":\\\"{b}\\\",\\\"show\\\":false,\\\"position\\\":\\\"right\\\"},\\\"type\\\":\\\"scatter\\\",\\\"symbolSize\\\":5}],\\\"chartType\\\":\\\"map\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"主要城市空气质量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"chartType\":\"map.scatter\"},\"layer_id\":\"YTri6J59av4gj1CY\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[7,5],[7,6],[7,7],[7,8]]},{\"row\":14,\"col\":12,\"width\":\"244\",\"height\":\"138\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"销售额\\\",\\\"value\\\":6000000,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(43,193,254,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":3400879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(42,45,76,0.59)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"50%\\\",\\\"60%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339498906765000705\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"xsjd\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.doughnut\",\"chartId\":\"pie.doughnut\"},\"layer_id\":\"ARuuHLfjqV9l1tQD\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,12],[14,13],[14,14]]},{\"row\":14,\"col\":15,\"width\":\"230\",\"height\":\"139\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\",\\\"其他\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"销售额\\\",\\\"value\\\":6000000,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(43,193,254,1)\\\"}},{\\\"name\\\":\\\"其他\\\",\\\"value\\\":3400879,\\\"itemStyle\\\":{\\\"color\\\":\\\"rgba(42,45,76,0.59)\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"45%\\\",\\\"55%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"某站点用户访问来源\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339498906765000705\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"xsjd\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.doughnut\",\"chartId\":\"\"},\"layer_id\":\"bcrMtWqTd2AJIjLd\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,15],[14,16],[14,17],[14,18]]},{\"row\":14,\"col\":10,\"width\":\"244\",\"height\":\"138\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"北京\\\",\\\"青岛\\\",\\\"合肥\\\",\\\"深圳\\\",\\\"石家庄\\\",\\\"重庆\\\",\\\"保定\\\",\\\"邯郸\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"销售额\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":10,\\\"left\\\":49,\\\"bottom\\\":15,\\\"right\\\":45},\\\"series\\\":[{\\\"barWidth\\\":9,\\\"data\\\":[80,500,800,1000,1200,1500,1600,2000],\\\"name\\\":\\\"销售额\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":0,\\\"color\\\":\\\"rgba(146,119,252,1)\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#698AFB\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"normal\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":false,\\\"top\\\":5,\\\"text\\\":\\\"某站点用户访问来源\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339495346077728770\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"chengshi\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.multi.horizontal\",\"chartId\":\"bar.multi.horizontal\"},\"layer_id\":\"Y1kgYOWBHIVQdSN5\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[14,10],[14,11]]},{\"row\":20,\"col\":1,\"width\":\"743\",\"height\":\"150\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#FEFEFE\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"data\\\":[\\\"2020-01-09\\\",\\\"2020-01-12\\\",\\\"2020-01-14\\\",\\\"2020-01-16\\\",\\\"2020-01-18\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":53,\\\"left\\\":22,\\\"bottom\\\":37,\\\"right\\\":20},\\\"series\\\":[{\\\"areaStyle\\\":{\\\"color\\\":\\\"#43B8FB\\\",\\\"opacity\\\":0.7},\\\"data\\\":[2,6,7,5,6],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":true,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#43B8FB\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":14,\\\"text\\\":\\\"销售额增速\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#FFFFFF\\\",\\\"fontWeight\\\":\\\"normal\\\",\\\"fontSize\\\":\\\"14\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]}}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"1\",\"dataId\":\"1339538388453195777\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"zhexian\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"line.area\",\"chartId\":\"\"},\"layer_id\":\"uChrZaHYoV04MQpT\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[20,1],[20,2],[20,3],[20,4],[20,5],[20,6],[20,7],[20,8],[20,9]]}],\"area\":{\"sri\":4,\"sci\":5,\"eri\":4,\"eci\":5,\"width\":105,\"height\":38},\"printElWidth\":1800,\"excel_config_id\":\"1339478701846433792\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{}},\"2\":{\"cells\":{\"1\":{\"merge\":[0,17],\"text\":\"企业实时销售数据\",\"style\":3}}},\"3\":{\"cells\":{},\"height\":35},\"4\":{\"cells\":{\"1\":{\"text\":\" 销售额省份排名\",\"style\":32,\"merge\":[0,1],\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"2\":{\"style\":32,\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"5\":{\"text\":\" 销售总额\",\"style\":69},\"10\":{\"text\":\" 销售进度\",\"style\":43},\"11\":{\"text\":\"\",\"style\":43},\"13\":{\"text\":\" 销售额城市排名\",\"style\":32,\"merge\":[0,1]},\"14\":{\"style\":32},\"15\":{\"text\":\" 个人业绩排名\",\"style\":32,\"merge\":[0,1]},\"16\":{\"style\":32},\"17\":{\"text\":\"\",\"style\":32,\"merge\":[0,1]},\"18\":{\"style\":32}},\"height\":38},\"5\":{\"cells\":{\"1\":{\"text\":\" Sales ranking points\",\"virtual\":\"IFj1lg5S5aNG1wPx\",\"style\":62,\"merge\":[0,1]},\"2\":{\"style\":31},\"5\":{\"text\":\"12436025\",\"style\":52,\"merge\":[1,0]},\"6\":{\"merge\":[1,0],\"text\":\"元\",\"style\":22},\"10\":{\"text\":\" Sales progress\",\"style\":33},\"11\":{\"text\":\"\",\"virtual\":\"Yb2TIGEAxnvN9ITx\",\"style\":33},\"13\":{\"text\":\" Sales ranking\",\"virtual\":\"qQHpevWlqElpRQUl\",\"style\":31},\"14\":{\"style\":32},\"15\":{\"text\":\" Personal ranking\",\"style\":62,\"merge\":[0,1]},\"16\":{\"style\":62},\"17\":{\"text\":\"\",\"style\":62,\"merge\":[0,1]},\"18\":{\"style\":62}},\"height\":24},\"6\":{\"cells\":{\"1\":{\"text\":\"\",\"merge\":[0,1],\"style\":31,\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"2\":{\"style\":31,\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"3\":{\"text\":\" \",\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"4\":{\"text\":\" \",\"virtual\":\"IFj1lg5S5aNG1wPx\"},\"5\":{\"style\":53},\"6\":{\"style\":22},\"10\":{\"text\":\" \",\"virtual\":\"Yb2TIGEAxnvN9ITx\"},\"11\":{\"text\":\"\",\"style\":33,\"virtual\":\"Yb2TIGEAxnvN9ITx\"},\"12\":{\"text\":\" \",\"virtual\":\"qQHpevWlqElpRQUl\"},\"13\":{\"text\":\"\",\"virtual\":\"qQHpevWlqElpRQUl\",\"style\":31},\"14\":{\"text\":\" \",\"virtual\":\"qQHpevWlqElpRQUl\"},\"15\":{\"text\":\" \",\"virtual\":\"phTmhkjHLebYlOEQ\"},\"16\":{\"text\":\" \",\"virtual\":\"phTmhkjHLebYlOEQ\"},\"17\":{\"text\":\" \",\"style\":31,\"virtual\":\"phTmhkjHLebYlOEQ\"},\"18\":{\"text\":\" \",\"virtual\":\"phTmhkjHLebYlOEQ\"}}},\"7\":{\"cells\":{\"5\":{\"style\":53,\"virtual\":\"YTri6J59av4gj1CY\"},\"6\":{\"style\":22,\"virtual\":\"YTri6J59av4gj1CY\"},\"7\":{\"text\":\" \",\"virtual\":\"YTri6J59av4gj1CY\"},\"8\":{\"text\":\" \",\"virtual\":\"YTri6J59av4gj1CY\"}}},\"8\":{\"cells\":{\"5\":{\"style\":18,\"text\":\"\",\"virtual\":\"YTri6J59av4gj1CY\"}}},\"9\":{\"cells\":{\"5\":{\"style\":21,\"text\":\"\"}}},\"10\":{\"cells\":{\"5\":{\"text\":\"\",\"style\":17}}},\"12\":{\"cells\":{\"10\":{\"text\":\" 品类销售排名\",\"style\":43},\"11\":{\"text\":\"\",\"style\":43},\"13\":{\"text\":\" 品类销售额占比\",\"style\":43,\"merge\":[0,1]},\"14\":{\"style\":54},\"15\":{\"text\":\" 一季度销售季度\",\"style\":43,\"merge\":[0,1]},\"16\":{\"style\":54},\"17\":{\"text\":\"\",\"style\":43,\"merge\":[0,1]},\"18\":{\"style\":54}}},\"13\":{\"cells\":{\"10\":{\"text\":\" Category Sales ranking\",\"style\":31},\"11\":{\"text\":\"\",\"style\":31},\"13\":{\"text\":\" Type of Sales \",\"style\":31},\"15\":{\"text\":\" Quarterly sales progree\",\"style\":58,\"merge\":[0,1]},\"16\":{\"style\":58},\"17\":{\"text\":\"\",\"style\":58,\"merge\":[0,1]},\"18\":{\"style\":58}}},\"14\":{\"cells\":{\"10\":{\"text\":\" \",\"virtual\":\"Y1kgYOWBHIVQdSN5\"},\"11\":{\"text\":\" \",\"virtual\":\"Y1kgYOWBHIVQdSN5\"},\"12\":{\"text\":\" \",\"virtual\":\"ARuuHLfjqV9l1tQD\"},\"13\":{\"text\":\" \",\"virtual\":\"ARuuHLfjqV9l1tQD\"},\"14\":{\"text\":\" \",\"virtual\":\"ARuuHLfjqV9l1tQD\"},\"15\":{\"text\":\" \",\"virtual\":\"bcrMtWqTd2AJIjLd\"},\"16\":{\"text\":\" \",\"virtual\":\"bcrMtWqTd2AJIjLd\"},\"17\":{\"text\":\" \",\"virtual\":\"bcrMtWqTd2AJIjLd\"},\"18\":{\"text\":\" \",\"virtual\":\"bcrMtWqTd2AJIjLd\"}}},\"15\":{\"cells\":{},\"height\":15},\"16\":{\"cells\":{\"11\":{\"text\":\"\",\"style\":43},\"13\":{\"text\":\"\",\"style\":43,\"merge\":[0,1]},\"14\":{\"style\":54},\"17\":{\"text\":\"\",\"style\":43,\"merge\":[0,1]},\"18\":{\"style\":54}}},\"17\":{\"cells\":{\"11\":{\"text\":\"\",\"style\":31},\"13\":{\"text\":\"\",\"style\":31},\"17\":{\"text\":\"\",\"merge\":[0,1],\"style\":58},\"18\":{\"style\":58}}},\"18\":{\"cells\":{}},\"20\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"2\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"3\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"4\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"5\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"6\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"7\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"8\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"},\"9\":{\"text\":\" \",\"virtual\":\"uChrZaHYoV04MQpT\"}},\"height\":39},\"22\":{\"cells\":{\"10\":{\"text\":\"企业经营指标\",\"style\":74},\"11\":{\"text\":\"1201043元\",\"style\":73},\"13\":{\"text\":\"企业经营指标\",\"style\":74},\"14\":{\"text\":\"1201043元\",\"style\":73},\"16\":{\"text\":\"企业经营指标\",\"style\":74},\"17\":{\"text\":\"1201043元\",\"style\":73}}},\"23\":{\"cells\":{\"10\":{\"text\":\"企业经营指标1\",\"style\":74},\"11\":{\"text\":\"1201043元\",\"style\":73},\"13\":{\"text\":\"企业经营指标1\",\"style\":74},\"14\":{\"text\":\"1201043元\",\"style\":73},\"16\":{\"text\":\"企业经营指标1\",\"style\":74},\"17\":{\"text\":\"1201043元\",\"style\":73}}},\"26\":{\"cells\":{},\"height\":33},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1584,\"background\":{\"path\":\"https://static.jero.com/designreport/images/bg55_1608205385382.png\",\"repeat\":\"no-repeat\",\"width\":\"1525\",\"height\":\"700\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"color\":\"#ffffff\"},{\"color\":\"#ffffff\",\"font\":{\"size\":16}},{\"color\":\"#ffffff\",\"font\":{\"size\":16},\"align\":\"center\"},{\"color\":\"#ffffff\",\"font\":{\"size\":18},\"align\":\"center\"},{\"font\":{\"size\":18}},{\"color\":\"#67b1ee\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":14}},{\"color\":\"#67b1ee\",\"font\":{\"size\":12}},{\"font\":{\"size\":14}},{\"font\":{\"size\":18},\"bgcolor\":\"#ffffff\"},{\"font\":{\"size\":18},\"bgcolor\":\"#ffffff\",\"color\":\"#ffffff\"},{\"font\":{\"size\":16},\"bgcolor\":\"#ffffff\",\"color\":\"#ffffff\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"right\"},{\"font\":{\"size\":16},\"bgcolor\":\"#ffffff\",\"color\":\"#ffffff\",\"align\":\"right\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"center\"},{\"font\":{\"size\":16}},{\"font\":{\"size\":16},\"color\":\"#fe0000\"},{\"font\":{\"size\":16},\"color\":\"#fe0000\",\"align\":\"center\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"left\"},{\"align\":\"left\"},{\"align\":\"left\",\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"size\":14},\"color\":\"#ffffff\"},{\"font\":{\"size\":14},\"color\":\"#ffffff\"},{\"font\":{\"size\":12},\"color\":\"#ffffff\"},{\"font\":{\"size\":12,\"bold\":true},\"color\":\"#ffffff\"},{\"font\":{\"size\":12,\"bold\":false},\"color\":\"#ffffff\"},{\"font\":{\"size\":11,\"bold\":false},\"color\":\"#ffffff\"},{\"font\":{\"size\":8}},{\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"color\":\"#67b1ee\"},{\"font\":{\"size\":9},\"color\":\"#67b1ee\",\"valign\":\"top\"},{\"font\":{\"size\":8},\"color\":\"#67b1ee\",\"valign\":\"top\"},{\"font\":{\"size\":11,\"bold\":false},\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"font\":{\"size\":8},\"color\":\"#67b1ee\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"left\",\"valign\":\"bottom\"},{\"align\":\"left\",\"valign\":\"bottom\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"center\",\"valign\":\"bottom\"},{\"align\":\"center\",\"valign\":\"bottom\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":12},\"align\":\"left\",\"valign\":\"middle\"},{\"align\":\"left\",\"valign\":\"middle\"},{\"font\":{\"size\":11}},{\"font\":{\"size\":11},\"color\":\"#ffffff\"},{\"font\":{\"size\":11},\"color\":\"#ffffff\",\"valign\":\"middle\"},{\"font\":{\"size\":11},\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"color\":\"#ffffff\",\"font\":{\"size\":12},\"align\":\"left\",\"valign\":\"middle\"},{\"align\":\"left\",\"valign\":\"middle\",\"color\":\"#ffffff\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":16}},{\"color\":\"#ffff01\",\"font\":{\"size\":16}},{\"color\":\"#ffffff\",\"font\":{\"size\":11},\"align\":\"left\",\"valign\":\"middle\"},{\"color\":\"#ffffff\",\"font\":{\"size\":14},\"align\":\"left\",\"valign\":\"middle\"},{\"color\":\"#ffff01\",\"font\":{\"size\":14},\"align\":\"left\",\"valign\":\"middle\"},{\"font\":{\"size\":14},\"color\":\"#ffff01\"},{\"color\":\"#ffff01\",\"font\":{\"size\":14},\"align\":\"right\",\"valign\":\"middle\"},{\"font\":{\"size\":14},\"color\":\"#ffff01\",\"align\":\"right\"},{\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"font\":{\"size\":8},\"bgcolor\":\"#67b1ee\"},{\"font\":{\"size\":8},\"bgcolor\":\"#ffffff\"},{\"font\":{\"size\":8},\"bgcolor\":\"#ffffff\",\"color\":\"#67b1ee\"},{\"font\":{\"size\":8},\"bgcolor\":\"#ffffff\",\"color\":\"#67b1ee\",\"valign\":\"top\"},{\"font\":{\"size\":8,\"bold\":false},\"color\":\"#ffffff\",\"valign\":\"bottom\"},{\"font\":{\"size\":8,\"bold\":false},\"color\":\"#ffffff\",\"valign\":\"top\"},{\"font\":{\"size\":8},\"valign\":\"top\"},{\"font\":{\"size\":8,\"bold\":false},\"color\":\"#67b1ee\",\"valign\":\"top\"},{\"color\":\"#ffffff\",\"font\":{\"size\":11},\"align\":\"center\",\"valign\":\"middle\"},{\"align\":\"center\"},{\"color\":\"#ffffff\",\"font\":{\"size\":11},\"align\":\"right\",\"valign\":\"middle\"},{\"align\":\"right\"},{\"color\":\"#ffffff\",\"font\":{\"size\":14},\"align\":\"right\",\"valign\":\"middle\"},{\"align\":\"right\",\"font\":{\"size\":14}},{\"color\":\"#ffffff\",\"font\":{\"size\":11},\"align\":\"left\",\"valign\":\"bottom\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":11}},{\"color\":\"#67b1ee\",\"font\":{\"size\":11},\"align\":\"center\"},{\"font\":{\"size\":12}},{\"font\":{\"size\":12},\"color\":\"#ffff01\"},{\"color\":\"#67b1ee\",\"font\":{\"size\":11},\"align\":\"right\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":10},\"3\":{\"width\":102},\"4\":{\"width\":9},\"5\":{\"width\":105},\"6\":{\"width\":102},\"8\":{\"width\":124},\"9\":{\"width\":14},\"10\":{\"width\":136},\"11\":{\"width\":114},\"12\":{\"width\":15},\"13\":{\"width\":113},\"14\":{\"width\":129},\"15\":{\"width\":11},\"len\":27},\"merges\":[\"B7:C7\",\"N17:O17\",\"R17:S17\",\"R18:S18\",\"B3:S3\",\"R6:S6\",\"B5:C5\",\"B6:C6\",\"F6:F7\",\"G6:G7\",\"N5:O5\",\"R5:S5\",\"N13:O13\",\"R13:S13\",\"R14:S14\",\"P5:Q5\",\"P6:Q6\",\"P14:Q14\",\"P13:Q13\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201218200943_1608293404719.png', 'admin', '2020-12-17 15:53:14', 'admin', '2021-01-13 14:15:32', 0, NULL, NULL, 1, 653); +INSERT INTO `jimu_report` VALUES ('1339859143477039104', '20201218170625', '全国连锁超市会员分析', NULL, NULL, 'chartinfo', '{\"chartList\":[{\"row\":1,\"col\":5,\"width\":\"495\",\"height\":\"343\",\"config\":\"{\\\"geo\\\":{\\\"regions\\\":[],\\\"layoutSize\\\":600,\\\"emphasis\\\":{\\\"itemStyle\\\":{\\\"areaColor\\\":\\\"red\\\"},\\\"label\\\":{\\\"color\\\":\\\"#fff\\\"}},\\\"itemStyle\\\":{\\\"borderColor\\\":\\\"#000\\\",\\\"areaColor\\\":\\\"#fff\\\",\\\"borderWidth\\\":0.5},\\\"zoom\\\":0.5,\\\"label\\\":{\\\"color\\\":\\\"#000\\\",\\\"show\\\":true,\\\"fontSize\\\":12},\\\"roam\\\":true,\\\"map\\\":\\\"china\\\",\\\"layoutCenter\\\":[\\\"50%\\\",\\\"50%\\\"]},\\\"series\\\":[{\\\"encode\\\":{\\\"value\\\":[2]},\\\"data\\\":[{\\\"name\\\":\\\"河北\\\",\\\"value\\\":[114.502461,38.045474,279]},{\\\"name\\\":\\\"海南\\\",\\\"value\\\":[110.33119,20.031971,273]},{\\\"name\\\":\\\"山东\\\",\\\"value\\\":[117.000923,36.675807,229]},{\\\"name\\\":\\\"甘肃\\\",\\\"value\\\":[103.823557,36.058039,194]},{\\\"name\\\":\\\"宁夏\\\",\\\"value\\\":[106.278179,38.46637,193]},{\\\"name\\\":\\\"浙江\\\",\\\"value\\\":[120.153576,30.287459,177]},{\\\"name\\\":\\\"湖南\\\",\\\"value\\\":[112.982279,28.19409,119]},{\\\"name\\\":\\\"湖北\\\",\\\"value\\\":[114.298572,30.584355,79]},{\\\"name\\\":\\\"河南\\\",\\\"value\\\":[113.665412,34.757975,67]},{\\\"name\\\":\\\"北京\\\",\\\"value\\\":[116.405285,39.904989,58]},{\\\"name\\\":\\\"天津\\\",\\\"value\\\":[117.190182,39.125596,59]},{\\\"name\\\":\\\"上海\\\",\\\"value\\\":[121.472644,31.231706,63]}],\\\"name\\\":\\\"\\\",\\\"emphasis\\\":{\\\"label\\\":{\\\"show\\\":true}},\\\"itemStyle\\\":{\\\"color\\\":\\\"purple\\\"},\\\"coordinateSystem\\\":\\\"geo\\\",\\\"label\\\":{\\\"formatter\\\":\\\"{b}\\\",\\\"show\\\":false,\\\"position\\\":\\\"right\\\"},\\\"type\\\":\\\"scatter\\\"}],\\\"chartType\\\":\\\"map\\\",\\\"tooltip\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":18}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"全国省份分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#0B0B0B\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"chartId\":\"map.scatter\",\"chartType\":\"map.scatter\"},\"layer_id\":\"7iI8sg3C12WgjU7y\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,5],[1,6],[1,7],[1,8],[1,9]]},{\"row\":1,\"col\":10,\"width\":\"300\",\"height\":\"350\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"data\\\":[\\\"顾客\\\",\\\"二星\\\",\\\"一星\\\",\\\"明星\\\",\\\"总监\\\",\\\"三星\\\",\\\"大使\\\",\\\"高级\\\",\\\"金鹰\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":59,\\\"left\\\":43,\\\"bottom\\\":48,\\\"right\\\":32},\\\"series\\\":[{\\\"barWidth\\\":10,\\\"data\\\":[\\\"3948\\\",\\\"515\\\",\\\"334\\\",\\\"150\\\",\\\"54\\\",\\\"50\\\",\\\"17\\\",\\\"7\\\",\\\"2\\\"],\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":0,\\\"color\\\":\\\"#208ae9\\\"},\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"不同荣衔等级会员数量\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"0\",\"apiUrl\":\"\",\"dataId\":\"1339870475496497153\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"pp\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.simple\",\"id\":\"\"},\"layer_id\":\"31it5pmqMVZ5JAui\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,10],[1,11],[1,12],[1,13]]},{\"row\":1,\"col\":1,\"width\":\"302\",\"height\":\"172\",\"config\":\"{\\\"series\\\":[{\\\"pointer\\\":{\\\"show\\\":true},\\\"startAngle\\\":190,\\\"data\\\":[{\\\"name\\\":\\\"成绩\\\",\\\"value\\\":60}],\\\"center\\\":[\\\"140\\\",\\\"110\\\"],\\\"endAngle\\\":-10,\\\"itemStyle\\\":{\\\"color\\\":\\\"#63869E\\\"},\\\"type\\\":\\\"gauge\\\",\\\"title\\\":{\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#000\\\",\\\"shadowBlur\\\":10,\\\"fontSize\\\":\\\"10\\\",\\\"shadowColor\\\":\\\"#000\\\"}},\\\"axisLabel\\\":{\\\"color\\\":\\\"auto\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"fontSize\\\":10}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"width\\\":10,\\\"color\\\":[[0.2,\\\"#65d459\\\"],[0.8,\\\"#208ae9\\\"],[1,\\\"#fee033\\\"]]}},\\\"name\\\":\\\"业务指标\\\",\\\"axisTick\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\"},\\\"length\\\":4},\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"width\\\":3},\\\"length\\\":6},\\\"detail\\\":{\\\"formatter\\\":\\\"{value}%\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"auto\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"axisLine_lineStyle_color\\\":[[0.2,\\\"#91c7ae\\\"],[0.8,\\\"#63869E\\\"],[1,\\\"#C23531\\\"]],\\\"radius\\\":\\\"75%\\\"}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"会员总数量占比\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"api\",\"apiStatus\":\"0\",\"apiUrl\":\"\",\"dataId\":\"\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"\",\"xText\":\"\",\"dbCode\":\"\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":\"\",\"intervalTime\":\"\",\"chartType\":\"gauge.simple180\",\"id\":\"klT4JJb8kjnWwa0w\"},\"layer_id\":\"klT4JJb8kjnWwa0w\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2],[1,3],[1,4]]},{\"row\":8,\"col\":1,\"width\":\"302\",\"height\":\"176\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":20,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"data\\\":[\\\"08:00~10:00\\\",\\\"10:00~12:00\\\",\\\"12:00~14:00\\\",\\\"14:00~16:00\\\",\\\"16:00~18:00\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":true,\\\"name\\\":\\\"\\\",\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false}},\\\"grid\\\":{\\\"top\\\":60,\\\"left\\\":39,\\\"bottom\\\":46,\\\"right\\\":26},\\\"series\\\":[{\\\"areaStyle\\\":null,\\\"data\\\":[\\\"1500\\\",\\\"1800\\\",\\\"2500\\\",\\\"3000\\\",\\\"1500\\\"],\\\"showSymbol\\\":true,\\\"lineStyle\\\":{\\\"width\\\":2},\\\"symbolSize\\\":5,\\\"isArea\\\":false,\\\"name\\\":\\\"销量\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#208AE9\\\"},\\\"step\\\":false,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"top\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":\\\"8\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"line\\\",\\\"smooth\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":11,\\\"text\\\":\\\"会员活跃度分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"0\",\"apiUrl\":\"\",\"dataId\":\"1339884367194923010\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"hh\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"line.simple\",\"id\":\"\"},\"layer_id\":\"8ywLFiJLhmN8js1h\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[8,1],[8,2],[8,3],[8,4]]},{\"row\":15,\"col\":8,\"width\":\"299\",\"height\":\"303\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"全职\\\",\\\"兼职\\\",\\\"自由职业者\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"series\\\":[{\\\"isRose\\\":true,\\\"data\\\":[{\\\"name\\\":\\\"全职\\\",\\\"value\\\":\\\"1200\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#49c3fc\\\"}},{\\\"name\\\":\\\"兼职\\\",\\\"value\\\":\\\"500\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#fee033\\\"}},{\\\"name\\\":\\\"自由职业者\\\",\\\"value\\\":\\\"5800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#1560a3\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"radius\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"140\\\",180],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"33%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"不同工作性质分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"1339878700639887362\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"ww\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.rose\",\"id\":\"\"},\"layer_id\":\"lYwyxPbUxNBxMiXu\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,8],[15,9],[15,10]]},{\"row\":15,\"col\":11,\"width\":\"520\",\"height\":\"301\",\"config\":\"{\\\"yAxis\\\":{\\\"axisLabel\\\":{\\\"rotate\\\":0,\\\"interval\\\":0,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"data\\\":[\\\"广州分公司\\\",\\\"北京分公司\\\",\\\"河北分公司\\\",\\\"天津分公司\\\",\\\"山东分公司\\\",\\\"福建分公司\\\",\\\"上海分公司\\\"],\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":true,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type\\\":\\\"category\\\"},\\\"xAxis\\\":{\\\"axisLabel\\\":{\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":\\\"8\\\"}},\\\"axisLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"#333\\\"}},\\\"show\\\":false,\\\"splitLine\\\":{\\\"lineStyle\\\":{\\\"color\\\":\\\"red\\\",\\\"width\\\":1,\\\"type\\\":\\\"solid\\\"},\\\"show\\\":false},\\\"type \\\":\\\"value\\\"},\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"会员数量\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"grid\\\":{\\\"top\\\":60,\\\"left\\\":69,\\\"bottom\\\":35,\\\"right\\\":35},\\\"series\\\":[{\\\"barWidth\\\":12,\\\"data\\\":[\\\"5800\\\",\\\"6500\\\",\\\"3500\\\",\\\"3000\\\",\\\"2500\\\",\\\"6500\\\",\\\"7500\\\"],\\\"name\\\":\\\"会员数量\\\",\\\"itemStyle\\\":{\\\"barBorderRadius\\\":0,\\\"color\\\":\\\"#49c3fc\\\"},\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"right\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"bar\\\",\\\"barMinHeight\\\":2,\\\"typeData\\\":[],\\\"textStyle\\\":{\\\"color\\\":\\\"black\\\",\\\"fontWeight\\\":\\\"bolder\\\"}}],\\\"tooltip\\\":{\\\"show\\\":true,\\\"axisPointer\\\":{\\\"type\\\":\\\"shadow\\\"},\\\"trigger\\\":\\\"axis\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":11,\\\"text\\\":\\\"分公司会员数量分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,20]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"1339888452912586753\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"type\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"gg\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"bar.multi.horizontal\",\"id\":\"\"},\"layer_id\":\"FeUKrrCWspvnr0FE\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,11],[15,12],[15,13],[15,14],[15,15],[15,16]]},{\"row\":15,\"col\":4,\"width\":\"300\",\"height\":\"301\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"25岁以下\\\",\\\"26~30岁\\\",\\\"31~35岁\\\",\\\"36~40岁\\\",\\\"41~45岁\\\",\\\"45~50岁\\\",\\\"50岁以上\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"horizontal\\\",\\\"left\\\":\\\"center\\\",\\\"show\\\":false,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"25岁以下\\\",\\\"value\\\":\\\"1500\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#fee033\\\"}},{\\\"name\\\":\\\"26~30岁\\\",\\\"value\\\":\\\"800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#4fc3e0\\\"}},{\\\"name\\\":\\\"31~35岁\\\",\\\"value\\\":\\\"1200\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#f49730\\\"}},{\\\"name\\\":\\\"36~40岁\\\",\\\"value\\\":\\\"1200\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#b968aa\\\"}},{\\\"name\\\":\\\"41~45岁\\\",\\\"value\\\":\\\"1800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#63d58d\\\"}},{\\\"name\\\":\\\"45~50岁\\\",\\\"value\\\":\\\"1800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#ed495f\\\"}},{\\\"name\\\":\\\"50岁以上\\\",\\\"value\\\":\\\"2000\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"140\\\",\\\"170\\\"],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"33%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":10,\\\"text\\\":\\\"会员年龄段分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"1339876173672390658\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"aa\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.simple\",\"id\":\"\"},\"layer_id\":\"WfW7emJbCHHYI3ii\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,4],[15,5],[15,6],[15,7]]},{\"row\":15,\"col\":1,\"width\":\"300\",\"height\":\"300\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"男\\\",\\\"女\\\"],\\\"top\\\":\\\"bottom\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"left\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"男\\\",\\\"value\\\":\\\"8800\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#208ae9\\\"}},{\\\"name\\\":\\\"女\\\",\\\"value\\\":\\\"5000\\\",\\\"itemStyle\\\":{\\\"color\\\":\\\"#65d459\\\"}}],\\\"isRadius\\\":true,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[\\\"140\\\",180],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":true,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"\\\",\\\"fontSize\\\":\\\"10\\\",\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":[\\\"25%\\\",\\\"33%\\\"],\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":\\\"10\\\"}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"会员性别分布\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#000000\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":\\\"13\\\"},\\\"left\\\":\\\"left\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"1339873097620168705\",\"axisX\":\"name\",\"axisY\":\"value\",\"series\":\"\",\"yText\":\"value\",\"xText\":\"name\",\"dbCode\":\"se\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.doughnut\",\"id\":\"\"},\"layer_id\":\"hdKihNMC1L5tpQxT\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[15,1],[15,2],[15,3],[15,4]]}],\"area\":{\"sri\":7,\"sci\":13,\"eri\":7,\"eci\":13,\"width\":100,\"height\":23},\"printElWidth\":1800,\"excel_config_id\":\"1339859143477039104\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"merge\":[0,14],\"text\":\"全国连锁超市会员分析\",\"style\":5}},\"height\":67},\"1\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"klT4JJb8kjnWwa0w\"},\"2\":{\"text\":\" \",\"virtual\":\"klT4JJb8kjnWwa0w\"},\"3\":{\"text\":\" \",\"virtual\":\"klT4JJb8kjnWwa0w\"},\"4\":{\"text\":\" \",\"virtual\":\"klT4JJb8kjnWwa0w\"},\"5\":{\"text\":\" \",\"virtual\":\"7iI8sg3C12WgjU7y\"},\"6\":{\"text\":\" \",\"virtual\":\"7iI8sg3C12WgjU7y\"},\"7\":{\"text\":\" \",\"virtual\":\"7iI8sg3C12WgjU7y\"},\"8\":{\"text\":\" \",\"virtual\":\"7iI8sg3C12WgjU7y\"},\"9\":{\"text\":\" \",\"virtual\":\"7iI8sg3C12WgjU7y\"},\"10\":{\"text\":\" \",\"virtual\":\"31it5pmqMVZ5JAui\"},\"11\":{\"text\":\" \",\"virtual\":\"31it5pmqMVZ5JAui\"},\"12\":{\"text\":\" \",\"virtual\":\"31it5pmqMVZ5JAui\"},\"13\":{\"text\":\" \",\"virtual\":\"31it5pmqMVZ5JAui\"}}},\"2\":{\"cells\":{}},\"3\":{\"cells\":{}},\"4\":{\"cells\":{}},\"5\":{\"cells\":{}},\"6\":{\"cells\":{}},\"7\":{\"cells\":{\"1\":{\"style\":0},\"2\":{\"style\":0},\"3\":{\"style\":0}},\"height\":23},\"8\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"8ywLFiJLhmN8js1h\"},\"2\":{\"text\":\" \",\"virtual\":\"8ywLFiJLhmN8js1h\"},\"3\":{\"text\":\" \",\"virtual\":\"8ywLFiJLhmN8js1h\"},\"4\":{\"text\":\" \",\"virtual\":\"8ywLFiJLhmN8js1h\"}}},\"15\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"hdKihNMC1L5tpQxT\"},\"2\":{\"text\":\" \",\"virtual\":\"hdKihNMC1L5tpQxT\"},\"3\":{\"text\":\" \",\"virtual\":\"hdKihNMC1L5tpQxT\"},\"4\":{\"text\":\" \",\"virtual\":\"hdKihNMC1L5tpQxT\"},\"5\":{\"text\":\" \",\"virtual\":\"WfW7emJbCHHYI3ii\"},\"6\":{\"text\":\" \",\"virtual\":\"WfW7emJbCHHYI3ii\"},\"7\":{\"text\":\" \",\"virtual\":\"WfW7emJbCHHYI3ii\"},\"8\":{\"text\":\" \",\"virtual\":\"lYwyxPbUxNBxMiXu\"},\"9\":{\"text\":\" \",\"virtual\":\"lYwyxPbUxNBxMiXu\"},\"10\":{\"text\":\" \",\"virtual\":\"lYwyxPbUxNBxMiXu\"},\"11\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"},\"12\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"},\"13\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"},\"14\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"},\"15\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"},\"16\":{\"text\":\" \",\"virtual\":\"FeUKrrCWspvnr0FE\"}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1555,\"background\":{\"path\":\"https://static.jero.com/designreport/images/72488_1610364352719.png\",\"repeat\":\"repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"bgcolor\":\"#ffffff\"},{\"bgcolor\":\"#00b04e\"},{\"bgcolor\":\"#f2f2f2\"},{\"font\":{\"size\":18}},{\"font\":{\"size\":14}},{\"font\":{\"size\":14},\"align\":\"center\"},{\"bgcolor\":\"#f2f2f2\",\"font\":{\"size\":12}},{\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\"},{\"bgcolor\":\"#fc\'f\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\'f\"},{\"bgcolor\":\"#fc\'fa\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\'fa\"},{\"bgcolor\":\"#fc\'fa\'f\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\'fa\'f\"},{\"bgcolor\":\"#fc\'fa\'fa\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fc\'fa\'fa\"},{\"bgcolor\":\"#fcfafa\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fcfafa\"},{\"bgcolor\":\"#ff\",\"font\":{\"size\":12}},{\"bgcolor\":\"#ff\"},{\"bgcolor\":\"#fff\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fff\"},{\"bgcolor\":\"#ffff\",\"font\":{\"size\":12}},{\"bgcolor\":\"#ffff\"},{\"bgcolor\":\"#ffffd\",\"font\":{\"size\":12}},{\"bgcolor\":\"#ffffd\"},{\"bgcolor\":\"#ffffdf\",\"font\":{\"size\":12}},{\"bgcolor\":\"#ffffdf\"},{\"bgcolor\":\"#ffffdfd\",\"font\":{\"size\":12}},{\"bgcolor\":\"#ffffdfd\"},{\"bgcolor\":\"#ffffff\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fffff\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fffff\"},{\"bgcolor\":\"#fffd\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fffd\"},{\"bgcolor\":\"#fffdf\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fffdf\"},{\"bgcolor\":\"#fffdfd\",\"font\":{\"size\":12}},{\"bgcolor\":\"#fffdfd\"},{\"bgcolor\":\"#fffdfd\",\"font\":{\"size\":11}},{\"bgcolor\":\"#fffdfd\",\"font\":{\"size\":10}},{\"bgcolor\":\"#fffdfd\",\"font\":{\"size\":10,\"bold\":true}},{\"bgcolor\":\"#ffffff\",\"font\":{\"size\":10,\"bold\":true}}],\"validations\":[],\"cols\":{\"0\":{\"width\":51},\"4\":{\"width\":4},\"len\":26},\"merges\":[\"B1:P1\"]}', NULL, 'https://static.jero.com/designreport/images/QQ截图20201218200441_1608293330801.png', 'admin', '2020-12-18 17:06:26', 'admin', '2021-01-13 13:44:15', 1, NULL, NULL, 0, 466); +INSERT INTO `jimu_report` VALUES ('1347373863746539520', '20210108104603', '实习证明', NULL, NULL, 'printinfo', '{\"area\":false,\"printElWidth\":570,\"excel_config_id\":\"1347373863746539520\",\"printElHeight\":1047,\"rows\":{\"6\":{\"cells\":{\"2\":{\"merge\":[0,1],\"text\":\"实习证明\",\"style\":2},\"3\":{\"style\":2}},\"height\":50},\"8\":{\"cells\":{\"1\":{\"text\":\"#{tt.name}\",\"style\":3},\"2\":{\"merge\":[0,2],\"text\":\"同学在我公司与 2020年4月1日 至 2020年5月1日 实习。\"}}},\"9\":{\"cells\":{\"1\":{\"text\":\"\"}},\"isDrag\":true},\"12\":{\"cells\":{\"1\":{\"merge\":[4,3],\"text\":\"#{tt.pingjia}\",\"style\":6},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6}}},\"13\":{\"cells\":{\"1\":{\"style\":6},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6}}},\"14\":{\"cells\":{\"1\":{\"style\":6},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6}}},\"15\":{\"cells\":{\"1\":{\"style\":6},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6}}},\"16\":{\"cells\":{\"1\":{\"style\":6},\"2\":{\"style\":6},\"3\":{\"style\":6},\"4\":{\"style\":6}}},\"17\":{\"cells\":{\"1\":{\"text\":\"特此证明!\"}}},\"20\":{\"cells\":{\"2\":{\"text\":\"\"},\"3\":{\"text\":\"\",\"style\":3},\"4\":{\"text\":\"\"}}},\"21\":{\"cells\":{\"4\":{\"text\":\"\"}}},\"22\":{\"cells\":{\"3\":{\"text\":\"证明人:\",\"style\":3},\"4\":{\"text\":\"#{tt.lingdao}\"}}},\"23\":{\"cells\":{\"4\":{\"text\":\"#{tt.shijian}\"}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":487,\"background\":{\"path\":\"https://static.jero.com/designreport/images/report_1595906079684_1610075686629.png\",\"repeat\":\"no-repeat\",\"width\":\"\",\"height\":\"\"},\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"right\"},{\"align\":\"left\"},{\"align\":\"left\",\"valign\":\"top\"},{\"align\":\"left\",\"valign\":\"top\",\"textwrap\":true}],\"validations\":[],\"cols\":{\"0\":{\"width\":82},\"1\":{\"width\":86},\"4\":{\"width\":119},\"len\":26},\"merges\":[\"C7:D7\",\"C9:E9\",\"B13:E17\"]}', NULL, 'https://static.jero.com/designreport/images/未标题-1_1610074948259.png', 'admin', '2021-01-08 10:46:04', 'admin', '2021-01-13 14:12:33', 0, NULL, NULL, 1, 84); +INSERT INTO `jimu_report` VALUES ('1347454742040809472', '20210108161240', '实例:年度各月份佣金收入', NULL, NULL, 'datainfo', '{\"area\":{\"sri\":12,\"sci\":3,\"eri\":12,\"eci\":3,\"width\":100,\"height\":25},\"printElWidth\":749,\"excel_config_id\":\"1347454742040809472\",\"printElHeight\":1047,\"rows\":{\"1\":{\"cells\":{\"1\":{\"style\":8,\"text\":\"\",\"virtual\":\"D2luBqo7FDosHXdi\"},\"2\":{\"text\":\"年度各月份佣金收入\",\"merge\":[0,3],\"style\":16,\"virtual\":\"D2luBqo7FDosHXdi\"},\"3\":{\"style\":16},\"4\":{\"style\":16},\"5\":{\"style\":16},\"6\":{\"text\":\" \"}},\"height\":37},\"2\":{\"cells\":{\"1\":{\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"}}},\"4\":{\"cells\":{\"1\":{\"text\":\"查询年度:2019\"},\"4\":{\"text\":\"查询机构:总公司\"},\"6\":{\"text\":\"单位:元\"}}},\"6\":{\"cells\":{\"1\":{\"text\":\"月份\",\"style\":12},\"2\":{\"text\":\"佣金/主营业收入\",\"style\":12},\"3\":{\"text\":\"累计\",\"style\":12},\"4\":{\"text\":\"历史最低水平\",\"style\":12},\"5\":{\"text\":\"历史平均水平\",\"style\":12},\"6\":{\"text\":\"历史最高水平\",\"style\":12}}},\"7\":{\"cells\":{\"1\":{\"text\":\"#{tmp_report_data_1.monty}\",\"style\":0},\"2\":{\"text\":\"#{tmp_report_data_1.main_income}\",\"style\":0},\"3\":{\"text\":\"#{tmp_report_data_1.total}\",\"style\":18},\"4\":{\"text\":\"#{tmp_report_data_1.his_lowest}\",\"style\":0},\"5\":{\"text\":\"#{tmp_report_data_1.his_average}\",\"style\":0},\"6\":{\"text\":\"#{tmp_report_data_1.his_highest}\",\"style\":0}},\"isDrag\":true},\"9\":{\"cells\":{\"1\":{\"merge\":[1,1]}}},\"len\":99},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":703,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true}},{\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":false}},{\"font\":{\"bold\":false}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true},\"align\":\"center\"},{\"font\":{\"bold\":true},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true,\"size\":15},\"align\":\"center\"},{\"font\":{\"bold\":true,\"size\":15},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#01b0f1\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#33CCCC\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#33CCCC\",\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#33CCCC\",\"align\":\"left\"},{\"font\":{\"bold\":true,\"size\":16}},{\"font\":{\"bold\":true,\"size\":24}},{\"font\":{\"bold\":true,\"size\":22}},{\"font\":{\"bold\":true,\"size\":22},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"format\":\"usd\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"format\":\"rmb\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":54},\"1\":{\"width\":111},\"2\":{\"width\":116},\"4\":{\"width\":122},\"len\":26},\"merges\":[\"C2:F2\",\"B10:C11\"],\"imgList\":[{\"row\":1,\"col\":1,\"width\":\"123\",\"height\":\"50\",\"src\":\"excel_online/QQ图片20210113125540_1610513793782.png\",\"layer_id\":\"D2luBqo7FDosHXdi\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2]]}]}', NULL, NULL, 'admin', '2021-01-08 16:12:40', 'admin', '2021-01-13 14:13:10', 0, NULL, NULL, 1, 22); +INSERT INTO `jimu_report` VALUES ('1347459370216198144', '20210108164121', '实例:来源收入统计', NULL, NULL, 'datainfo', '{\"chartList\":[{\"row\":1,\"col\":1,\"width\":\"624\",\"height\":\"281\",\"config\":\"{\\\"legend\\\":{\\\"padding\\\":[25,20,25,10],\\\"data\\\":[\\\"中国石油全资(集团所属)\\\",\\\"中国石油全资(股份所属)\\\",\\\"中石油控股或有控股权\\\",\\\"中石油参股\\\",\\\"非中石油\\\"],\\\"top\\\":\\\"top\\\",\\\"orient\\\":\\\"vertical\\\",\\\"left\\\":\\\"right\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#333\\\",\\\"fontSize\\\":12}},\\\"series\\\":[{\\\"isRose\\\":false,\\\"data\\\":[{\\\"name\\\":\\\"中国石油全资(集团所属)\\\",\\\"value\\\":38460270.57,\\\"itemStyle\\\":{\\\"color\\\":\\\"#E46C8A\\\"}},{\\\"name\\\":\\\"中国石油全资(股份所属)\\\",\\\"value\\\":227595.77,\\\"itemStyle\\\":{\\\"color\\\":\\\"#FCDE43\\\"}},{\\\"name\\\":\\\"中石油控股或有控股权\\\",\\\"value\\\":679926.75,\\\"itemStyle\\\":{\\\"color\\\":\\\"#01A8E1\\\"}},{\\\"name\\\":\\\"中石油参股\\\",\\\"value\\\":72062.75,\\\"itemStyle\\\":{\\\"color\\\":\\\"#99CC00\\\"}},{\\\"name\\\":\\\"非中石油\\\",\\\"value\\\":1698597.62,\\\"itemStyle\\\":{\\\"color\\\":\\\"#800080\\\"}}],\\\"isRadius\\\":false,\\\"roseType\\\":\\\"\\\",\\\"notCount\\\":false,\\\"center\\\":[320,180],\\\"name\\\":\\\"访问来源\\\",\\\"minAngle\\\":0,\\\"label\\\":{\\\"show\\\":false,\\\"position\\\":\\\"outside\\\",\\\"textStyle\\\":{\\\"fontSize\\\":16,\\\"fontWeight\\\":\\\"bolder\\\"}},\\\"type\\\":\\\"pie\\\",\\\"radius\\\":\\\"55%\\\",\\\"autoSort\\\":false}],\\\"tooltip\\\":{\\\"formatter\\\":\\\"{b} : {c}\\\",\\\"show\\\":true,\\\"textStyle\\\":{\\\"color\\\":\\\"#fff\\\",\\\"fontSize\\\":18}},\\\"title\\\":{\\\"show\\\":true,\\\"top\\\":5,\\\"text\\\":\\\"来源收入统计\\\",\\\"textStyle\\\":{\\\"color\\\":\\\"#c23531\\\",\\\"fontWeight\\\":\\\"bolder\\\",\\\"fontSize\\\":18},\\\"left\\\":\\\"center\\\",\\\"padding\\\":[5,20,5,10]},\\\"backgroundColor\\\":\\\"#fff\\\"}\",\"url\":\"\",\"extData\":{\"dataType\":\"sql\",\"apiStatus\":\"\",\"apiUrl\":\"\",\"dataId\":\"4af57d343f1d6521b71b85097b580786\",\"axisX\":\"biz_income\",\"axisY\":\"total\",\"series\":\"\",\"yText\":\"total\",\"xText\":\"biz_income\",\"dbCode\":\"tmp_report_data_income\",\"dataId1\":\"\",\"source\":\"\",\"target\":\"\",\"isTiming\":true,\"intervalTime\":\"5\",\"chartType\":\"pie.simple\",\"id\":\"\"},\"layer_id\":\"nVUy533exgQ70OPb\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8]]}],\"area\":{\"sri\":15,\"sci\":0,\"eri\":15,\"eci\":25,\"width\":2477,\"height\":25},\"printElWidth\":899,\"excel_config_id\":\"1347459370216198144\",\"printElHeight\":1047,\"rows\":{\"1\":{\"cells\":{\"1\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"2\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"3\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"4\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"5\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"6\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"7\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"},\"8\":{\"text\":\" \",\"virtual\":\"nVUy533exgQ70OPb\"}}},\"3\":{\"cells\":{}},\"16\":{\"cells\":{\"1\":{\"text\":\"业务来源\",\"style\":1},\"2\":{\"text\":\"保险经纪佣金费\",\"style\":1},\"3\":{\"text\":\"风险咨询费\",\"style\":1},\"4\":{\"text\":\"承保公证评估费\",\"style\":1},\"5\":{\"text\":\"保险公证费\",\"style\":1},\"6\":{\"text\":\"投标咨询费\",\"style\":1},\"7\":{\"text\":\"内控咨询费\",\"style\":1},\"8\":{\"text\":\"总计\",\"style\":1}}},\"17\":{\"cells\":{\"1\":{\"text\":\"#{tmp_report_data_income.biz_income}\",\"style\":0},\"2\":{\"text\":\"#{tmp_report_data_income.bx_jj_yongjin}\",\"style\":0},\"3\":{\"text\":\"#{tmp_report_data_income.bx_zx_money}\",\"style\":0},\"4\":{\"text\":\"#{tmp_report_data_income.chengbao_gz_money}\",\"style\":0},\"5\":{\"text\":\"#{tmp_report_data_income.bx_gg_moeny}\",\"style\":0},\"6\":{\"text\":\"#{tmp_report_data_income.tb_zx_money}\",\"style\":0},\"7\":{\"text\":\"#{tmp_report_data_income.neikong_zx_money}\",\"style\":0},\"8\":{\"text\":\"#{tmp_report_data_income.total}\",\"style\":0}},\"isDrag\":true,\"height\":24},\"len\":58},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":777,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#33CCCC\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":91},\"1\":{\"width\":105},\"2\":{\"width\":119},\"3\":{\"width\":87},\"4\":{\"width\":61},\"5\":{\"width\":63},\"6\":{\"width\":60},\"7\":{\"width\":91},\"len\":26},\"merges\":[]}', NULL, NULL, 'admin', '2021-01-08 16:41:21', 'admin', '2021-01-13 14:14:43', 0, NULL, NULL, 1, 37); +INSERT INTO `jimu_report` VALUES ('519c1c6f4d1f584ae8fa5b43b45acdc7', '56623333333', '销售单', '', NULL, 'printinfo', '{\"area\":{\"sri\":6,\"sci\":7,\"eri\":6,\"eci\":7,\"width\":88,\"height\":25},\"printElWidth\":794,\"excel_config_id\":\"519c1c6f4d1f584ae8fa5b43b45acdc7\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"销售单\",\"style\":40,\"merge\":[0,6]},\"2\":{\"style\":41},\"3\":{\"style\":41},\"4\":{\"style\":41},\"5\":{\"style\":41},\"6\":{\"style\":41},\"7\":{\"style\":41}},\"height\":99},\"1\":{\"cells\":{\"1\":{\"text\":\"商品编码\",\"style\":62},\"2\":{\"text\":\"商品名称\",\"style\":62},\"3\":{\"text\":\"销售时间\",\"style\":62},\"4\":{\"text\":\"销售数量\",\"style\":62},\"5\":{\"text\":\"定价\",\"style\":62},\"6\":{\"text\":\"优惠价\",\"style\":62},\"7\":{\"text\":\"付款金额\",\"style\":62}},\"height\":39},\"2\":{\"cells\":{\"1\":{\"text\":\"#{xiaoshou.bianma}\",\"style\":61},\"2\":{\"text\":\"#{xiaoshou.cname}\",\"style\":61},\"3\":{\"text\":\"#{xiaoshou.ctime}\",\"style\":61},\"4\":{\"text\":\"#{xiaoshou.cnum}\",\"style\":61},\"5\":{\"text\":\"#{xiaoshou.cprice}\",\"style\":61},\"6\":{\"text\":\"#{xiaoshou.yprice}\",\"style\":61},\"7\":{\"text\":\"#{xiaoshou.ctotal}\",\"style\":61}},\"isDrag\":true,\"height\":35},\"3\":{\"cells\":{\"1\":{\"style\":44,\"text\":\"\"},\"2\":{\"style\":44},\"3\":{\"style\":44},\"4\":{\"style\":44},\"5\":{\"style\":44,\"text\":\"\"},\"6\":{\"text\":\"\",\"style\":45},\"7\":{\"style\":46,\"text\":\"=SUM(H3)\"}},\"isDrag\":true,\"height\":73},\"5\":{\"cells\":{},\"isDrag\":true},\"6\":{\"cells\":{},\"isDrag\":true},\"7\":{\"cells\":{\"2\":{\"text\":\"\"}},\"isDrag\":true},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":754,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]}},{\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]},\"bgcolor\":\"#01b0f1\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#01b0f1\"},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"center\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#fed964\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#fdc101\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#fdc101\"},{\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"align\":\"center\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#ffe59a\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#ffc001\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#fed964\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#ed7d31\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#fdc101\"],\"top\":[\"thin\",\"#fdc101\"],\"left\":[\"thin\",\"#fdc101\"],\"right\":[\"thin\",\"#fdc101\"]},\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"align\":\"center\"},{\"font\":{\"size\":8}},{\"font\":{\"size\":8},\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#9cc2e6\"},{\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]}},{\"font\":{\"bold\":true}},{\"font\":{\"bold\":true,\"size\":12}},{\"font\":{\"bold\":true,\"size\":16}},{\"font\":{\"bold\":true,\"size\":18}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"right\"},{\"align\":\"right\"},{\"align\":\"left\"},{\"align\":\"right\",\"font\":{\"size\":16}},{\"align\":\"left\",\"font\":{\"size\":16}},{\"align\":\"right\",\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true,\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"right\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"right\",\"font\":{\"size\":14,\"name\":\"宋体\"}},{\"align\":\"left\",\"font\":{\"size\":14,\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#2e75b5\"],\"top\":[\"thin\",\"#2e75b5\"],\"left\":[\"thin\",\"#2e75b5\"],\"right\":[\"thin\",\"#2e75b5\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#ffff01\"],\"top\":[\"thin\",\"#ffff01\"],\"left\":[\"thin\",\"#ffff01\"],\"right\":[\"thin\",\"#ffff01\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"right\",\"font\":{\"size\":14,\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"color\":\"#ffffff\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#2e75b5\"],\"top\":[\"thin\",\"#2e75b5\"],\"left\":[\"thin\",\"#2e75b5\"],\"right\":[\"thin\",\"#2e75b5\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#4371c6\"],\"top\":[\"thin\",\"#4371c6\"],\"left\":[\"thin\",\"#4371c6\"],\"right\":[\"thin\",\"#4371c6\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]}},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"],\"top\":[\"thin\",\"#d8d8d8\"],\"left\":[\"thin\",\"#d8d8d8\"],\"right\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"bgcolor\":\"#5b9cd6\",\"font\":{\"name\":\"宋体\"},\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]}}],\"validations\":[],\"cols\":{\"0\":{\"width\":31},\"1\":{\"width\":102},\"2\":{\"width\":170},\"3\":{\"width\":147},\"4\":{\"width\":66},\"5\":{\"width\":66},\"6\":{\"width\":84},\"7\":{\"width\":88},\"8\":{\"width\":121},\"len\":26},\"merges\":[\"B1:H1\"]}', '', 'https://static.jero.com/designreport/images/xiaoshou_1607310086160.png', 'jero', '2020-07-28 16:54:44', 'admin', '2021-01-13 14:12:44', 0, NULL, NULL, 1, 2072); +INSERT INTO `jimu_report` VALUES ('53c82a76f837d5661dceec7d93afafec', '5678', '阜阳检票数查询', '', NULL, 'printinfo', '{\"area\":{\"sri\":8,\"sci\":6,\"eri\":8,\"eci\":6,\"width\":75,\"height\":25},\"printElWidth\":794,\"excel_config_id\":\"53c82a76f837d5661dceec7d93afafec\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"text\":\"\",\"style\":66},\"2\":{\"style\":66},\"3\":{\"style\":67,\"merge\":[0,3],\"text\":\"阜阳火车站检票数\"},\"4\":{\"style\":67},\"5\":{\"style\":67},\"6\":{\"style\":67},\"7\":{\"style\":66},\"8\":{\"style\":66},\"9\":{\"style\":58}},\"height\":63},\"1\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"style\":66},\"2\":{\"style\":66},\"3\":{\"style\":66},\"4\":{\"style\":66},\"5\":{\"style\":66},\"6\":{\"style\":66},\"7\":{\"style\":66},\"8\":{\"style\":66},\"9\":{\"style\":58}},\"height\":20},\"2\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"text\":\"日期:\",\"style\":68},\"2\":{\"text\":\"${gongsi.tdata}\",\"style\":69},\"3\":{\"style\":66},\"4\":{\"style\":66,\"text\":\"制表人:\"},\"5\":{\"text\":\"${gongsi.gname}\",\"style\":66},\"6\":{\"style\":66},\"7\":{\"text\":\"\",\"merge\":[0,1],\"style\":70},\"8\":{\"style\":70},\"9\":{\"style\":58}},\"isDrag\":true},\"3\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"text\":\"班次\",\"merge\":[1,0],\"style\":71},\"2\":{\"text\":\"发车时间\",\"merge\":[1,0],\"style\":71},\"3\":{\"text\":\"是否放空\",\"merge\":[1,0],\"style\":71},\"4\":{\"text\":\"路线\",\"merge\":[0,1],\"style\":71},\"5\":{\"style\":72},\"6\":{\"text\":\"核载座位数\",\"merge\":[1,0],\"style\":71},\"7\":{\"merge\":[1,0],\"style\":71,\"text\":\"检票数\"},\"8\":{\"merge\":[1,0],\"style\":71,\"text\":\"实载率(%)\"},\"9\":{\"style\":58}}},\"4\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"style\":72},\"2\":{\"style\":71},\"3\":{\"style\":72},\"4\":{\"text\":\"从\",\"style\":71},\"5\":{\"text\":\"到\",\"style\":71},\"6\":{\"style\":72},\"7\":{\"style\":71},\"8\":{\"style\":72},\"9\":{\"style\":58}},\"height\":25},\"5\":{\"cells\":{\"0\":{\"style\":58},\"1\":{\"style\":73,\"text\":\"#{jianpiao.bnum}\"},\"2\":{\"style\":73,\"text\":\"#{jianpiao.ftime}\"},\"3\":{\"style\":73,\"text\":\"#{jianpiao.sfkong}\"},\"4\":{\"style\":73,\"text\":\"#{jianpiao.kaishi}\"},\"5\":{\"style\":73,\"text\":\"#{jianpiao.jieshu}\"},\"6\":{\"style\":73,\"text\":\"#{jianpiao.hezairen}\"},\"7\":{\"style\":73,\"text\":\"#{jianpiao.jpnum}\"},\"8\":{\"style\":73,\"text\":\"#{jianpiao.shihelv}\"},\"9\":{\"style\":58}},\"height\":33},\"6\":{\"cells\":{\"1\":{\"text\":\"\",\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}},\"isDrag\":true},\"7\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11,\"text\":\"\"},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"8\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"9\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"10\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"11\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"12\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"13\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"14\":{\"cells\":{\"1\":{\"style\":11},\"2\":{\"style\":11},\"3\":{\"style\":11},\"4\":{\"style\":11},\"5\":{\"style\":11},\"6\":{\"style\":11},\"7\":{\"style\":11},\"8\":{\"style\":11}}},\"len\":96,\"-1\":{\"cells\":{\"-1\":{\"text\":\"${gongsi.id}\"}},\"isDrag\":true}},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":737,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"border\":{\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"]}},{\"border\":{\"top\":[\"thin\",\"#000100\"]}},{\"border\":{\"top\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"left\":[\"thin\",\"#000100\"]}},{\"border\":{\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"top\":[\"thin\",\"#7f7f7f\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"right\":[\"thin\",\"#7f7f7f\"],\"bottom\":[\"thin\",\"#7f7f7f\"]}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"]}},{\"border\":{\"right\":[\"thin\",\"#7f7f7f\"]}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"font\":{\"bold\":true}},{\"font\":{\"bold\":false}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":true}},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"align\":\"right\"},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":true},\"bgcolor\":\"#4371c6\"},{\"align\":\"center\",\"font\":{\"bold\":true},\"bgcolor\":\"#4371c6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#4371c6\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#4371c6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#2e75b5\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#2e75b5\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#0170c1\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#0170c1\"},{\"font\":{\"bold\":false},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#01b0f1\"},{\"align\":\"center\",\"font\":{\"bold\":false},\"bgcolor\":\"#01b0f1\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"bold\":false},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true},\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"size\":22,\"bold\":true},\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true},\"valign\":\"bottom\"},{\"font\":{\"bold\":false},\"color\":\"#7f7f7f\",\"align\":\"right\"},{\"color\":\"#7f7f7f\"},{\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true,\"name\":\"宋体\"},\"valign\":\"bottom\"},{\"font\":{\"bold\":false,\"name\":\"宋体\"},\"color\":\"#7f7f7f\",\"align\":\"right\"},{\"color\":\"#7f7f7f\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"right\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"bold\":false,\"name\":\"宋体\"},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"font\":{\"bold\":false,\"name\":\"宋体\"},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true,\"name\":\"Microsoft YaHei\"},\"valign\":\"bottom\"},{\"font\":{\"bold\":false,\"name\":\"Microsoft YaHei\"},\"color\":\"#7f7f7f\",\"align\":\"right\"},{\"color\":\"#7f7f7f\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"right\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"bold\":false,\"name\":\"Microsoft YaHei\"},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"font\":{\"bold\":false,\"name\":\"Microsoft YaHei\"},\"bgcolor\":\"#9cc2e6\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"font\":{\"name\":\"Microsoft YaHei\"}}],\"validations\":[],\"cols\":{\"0\":{\"width\":53},\"1\":{\"width\":118},\"2\":{\"width\":75},\"3\":{\"width\":54},\"4\":{\"width\":95},\"5\":{\"width\":109},\"6\":{\"width\":75},\"7\":{\"width\":75},\"8\":{\"width\":83},\"9\":{\"width\":30},\"len\":27},\"merges\":[\"E4:F4\",\"B4:B5\",\"C4:C5\",\"D4:D5\",\"G4:G5\",\"H4:H5\",\"I4:I5\",\"D1:G1\",\"H3:I3\"]}', '', 'https://static.jero.com/designreport/images/25_1597233573577.png', 'jero', '2020-06-16 15:01:42', 'admin', '2021-01-13 14:13:18', 0, NULL, NULL, 1, 681); +INSERT INTO `jimu_report` VALUES ('6059e405dd9c66a6d38e00841d2e40cc', '566777', '处方笺', '', NULL, 'printinfo', '{\"area\":{\"sri\":6,\"sci\":7,\"eri\":6,\"eci\":8,\"width\":171,\"height\":79},\"printElWidth\":794,\"excel_config_id\":\"6059e405dd9c66a6d38e00841d2e40cc\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"3\":{\"style\":80,\"text\":\" \"}},\"height\":96},\"1\":{\"cells\":{\"1\":{\"style\":24,\"text\":\" \"},\"2\":{\"style\":25,\"text\":\" \"},\"3\":{\"style\":25,\"text\":\" \"},\"4\":{\"style\":25,\"text\":\" \"},\"5\":{\"style\":25,\"text\":\" \"},\"6\":{\"style\":25,\"text\":\" \"},\"7\":{\"style\":25,\"text\":\" \"},\"8\":{\"style\":25,\"text\":\" \"},\"9\":{\"style\":25,\"text\":\" \"},\"10\":{\"style\":25,\"text\":\" \"},\"11\":{\"style\":25,\"text\":\" \"},\"12\":{\"style\":26,\"text\":\" \"}},\"height\":18},\"2\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":27},\"2\":{\"merge\":[0,9],\"text\":\"智能医学院处方笺\",\"style\":38},\"3\":{\"style\":12,\"text\":\" \"},\"4\":{\"style\":12,\"text\":\" \"},\"5\":{\"style\":12,\"text\":\" \"},\"6\":{\"style\":12,\"text\":\" \"},\"7\":{\"style\":12,\"text\":\" \"},\"8\":{\"style\":12,\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"style\":12,\"text\":\" \"},\"11\":{\"style\":12,\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"},\"13\":{\"style\":80,\"text\":\" \"}},\"height\":124},\"3\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":46},\"2\":{\"merge\":[0,1],\"text\":\"姓名:\",\"style\":4},\"3\":{\"style\":4,\"text\":\" \"},\"4\":{\"text\":\"${yonghu.yphone}\"},\"5\":{\"text\":\"性别:\",\"style\":42},\"6\":{\"text\":\"${yonghu.ysex}\",\"style\":42},\"7\":{\"text\":\"年龄:\",\"style\":47},\"8\":{\"text\":\"${yonghu.yage}\"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \",\"style\":42},\"11\":{\"style\":69,\"text\":\" \",\"merge\":[0,1]},\"12\":{\"style\":43,\"text\":\" \"},\"13\":{\"style\":80,\"text\":\" \"}},\"isDrag\":true},\"4\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":74},\"2\":{\"style\":4,\"merge\":[0,1],\"text\":\"单位:\"},\"3\":{\"style\":4,\"text\":\" \"},\"4\":{\"text\":\"${yonghu.danwei}\"},\"5\":{\"text\":\"电话:\"},\"6\":{\"text\":\"${yonghu.yphone}\",\"merge\":[0,5]},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"},\"15\":{\"text\":\"\"}},\"isDrag\":true,\"height\":29},\"5\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"merge\":[0,1],\"text\":\"初步诊断:\",\"style\":4},\"3\":{\"text\":\" \",\"style\":4},\"4\":{\"text\":\"${yonghu.yjieguo}\",\"merge\":[0,7]},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"isDrag\":true,\"height\":34},\"6\":{\"cells\":{\"1\":{\"text\":\" RP:\",\"merge\":[0,2],\"style\":79},\"2\":{\"style\":11,\"text\":\" \"},\"3\":{\"style\":11,\"text\":\" \"},\"4\":{\"style\":39,\"text\":\" \"},\"5\":{\"style\":0,\"text\":\" \"},\"6\":{\"style\":0,\"text\":\" \"},\"7\":{\"style\":0,\"text\":\" \"},\"8\":{\"style\":0,\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"style\":0,\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"},\"14\":{},\"16\":{}},\"height\":79},\"7\":{\"cells\":{\"1\":{\"text\":\".\",\"style\":48},\"2\":{\"text\":\"\",\"style\":1},\"3\":{\"text\":\"#{yaopin.name}\"},\"4\":{},\"5\":{},\"6\":{},\"7\":{\"text\":\"#{yaopin.percent}\"},\"8\":{},\"9\":{},\"10\":{},\"11\":{\"text\":\"\"},\"12\":{\"style\":28,\"text\":\" \"},\"14\":{}},\"isDrag\":true,\"height\":37},\"8\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"height\":27},\"9\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"医嘱:\",\"style\":76},\"3\":{\"text\":\"${yonghu.yizhu}\",\"style\":6,\"merge\":[0,8]},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"isDrag\":true},\"10\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"药品费\",\"style\":6,\"merge\":[0,1]},\"3\":{\"text\":\" \"},\"4\":{\"text\":\"${yonghu.yprice}\",\"style\":6},\"5\":{\"merge\":[0,1],\"text\":\"中成药费\",\"style\":6},\"6\":{\"text\":\" \"},\"7\":{\"style\":6,\"text\":\" \"},\"8\":{\"text\":\"治疗费\",\"merge\":[0,2],\"style\":6},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"style\":6,\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"isDrag\":true},\"11\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"检查费\",\"style\":6,\"merge\":[0,1]},\"3\":{\"text\":\" \"},\"4\":{\"style\":6,\"text\":\" \"},\"5\":{\"merge\":[0,1],\"text\":\"换药费\",\"style\":6},\"6\":{\"text\":\" \"},\"7\":{\"style\":6,\"text\":\" \"},\"8\":{\"merge\":[0,2],\"text\":\"诊疗费\",\"style\":6},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\"${yonghu.yzhenliao}\",\"style\":6},\"12\":{\"style\":28,\"text\":\" \"}},\"isDrag\":true},\"12\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"注射费\",\"style\":6,\"merge\":[0,1]},\"3\":{\"text\":\" \"},\"4\":{\"style\":6,\"merge\":[0,3],\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"merge\":[0,2],\"text\":\"其他\",\"style\":6},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"style\":6,\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}}},\"13\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"合计\",\"style\":6,\"merge\":[0,1]},\"3\":{\"text\":\" \"},\"4\":{\"text\":\"${yonghu.ytotal}\",\"style\":6,\"merge\":[0,7]},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"isDrag\":true},\"14\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"},\"13\":{\"style\":80,\"text\":\" \"}},\"height\":9},\"15\":{\"cells\":{\"0\":{\"text\":\" \"},\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"text\":\"医师:\",\"style\":4,\"merge\":[0,1]},\"3\":{\"text\":\" \"},\"4\":{\"text\":\"${yonghu.yishe}\",\"style\":80},\"5\":{\"style\":80,\"text\":\" \"},\"6\":{\"style\":80,\"text\":\" \"},\"7\":{\"style\":80,\"text\":\" \"},\"8\":{\"text\":\"日期:\",\"style\":4},\"9\":{\"text\":\"${yonghu.kdata}\",\"style\":80,\"merge\":[0,2]},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"style\":71,\"text\":\" \"},\"13\":{\"style\":80,\"text\":\" \"}},\"isDrag\":true,\"height\":43},\"16\":{\"cells\":{\"1\":{\"style\":31,\"text\":\" \"},\"2\":{\"style\":80,\"text\":\" \"},\"3\":{\"style\":80,\"text\":\" \"},\"4\":{\"style\":80,\"text\":\" \"},\"5\":{\"style\":80,\"text\":\" \"},\"6\":{\"style\":80,\"text\":\" \"},\"7\":{\"style\":80,\"text\":\" \"},\"8\":{\"style\":80,\"text\":\" \"},\"9\":{\"style\":80,\"text\":\" \"},\"10\":{\"style\":80,\"text\":\" \"},\"11\":{\"style\":80,\"text\":\" \"},\"12\":{\"style\":28,\"text\":\" \"}},\"height\":17},\"17\":{\"cells\":{\"1\":{\"text\":\" \",\"style\":32},\"2\":{\"text\":\" \",\"style\":33},\"3\":{\"style\":33,\"text\":\" \"},\"4\":{\"text\":\" \",\"style\":33},\"5\":{\"text\":\" \",\"style\":33},\"6\":{\"text\":\" \",\"style\":33},\"7\":{\"text\":\" \",\"style\":33},\"8\":{\"text\":\" \",\"style\":33},\"9\":{\"text\":\" \",\"style\":33},\"10\":{\"text\":\" \",\"style\":33},\"11\":{\"text\":\" \",\"style\":33},\"12\":{\"text\":\" \",\"style\":34}}},\"18\":{\"cells\":{\"11\":{\"text\":\"\"}},\"isDrag\":true},\"len\":94,\"-1\":{\"cells\":{\"0\":{\"text\":\"#{yaopin.key2}\"},\"-1\":{\"text\":\"#{yaopin.key1}\"}},\"isDrag\":true}},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":854,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"font\":{\"size\":12}},{\"font\":{\"size\":10}},{\"font\":{\"size\":12},\"align\":\"right\"},{\"font\":{\"size\":14}},{\"align\":\"right\"},{\"font\":{\"size\":10},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\"},{\"font\":{\"size\":12},\"align\":\"center\"},{\"font\":{\"size\":12,\"bold\":true},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"font\":{\"size\":14,\"bold\":true},\"align\":\"center\"},{\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":14,\"bold\":true},\"align\":\"center\",\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"bold\":true},\"align\":\"center\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":15},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":15}},{\"align\":\"left\"},{\"font\":{\"size\":14,\"bold\":true},\"align\":\"center\",\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":true}},{\"font\":{\"size\":12,\"bold\":true},\"align\":\"center\",\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"valign\":\"bottom\"},{\"font\":{\"size\":10},\"valign\":\"bottom\"},{\"valign\":\"bottom\"},{\"align\":\"right\",\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"valign\":\"bottom\",\"align\":\"right\"},{\"font\":{\"size\":10},\"valign\":\"bottom\",\"align\":\"right\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"right\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"textwrap\":true},{\"font\":{\"size\":10},\"textwrap\":true},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"textwrap\":false},{\"font\":{\"size\":10},\"textwrap\":false},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"textwrap\":false,\"align\":\"right\"},{\"font\":{\"size\":10},\"textwrap\":false,\"align\":\"right\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"textwrap\":false,\"align\":\"left\"},{\"font\":{\"size\":10},\"textwrap\":false,\"align\":\"left\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thick\",\"#000\"]},\"textwrap\":false,\"align\":\"center\"},{\"font\":{\"size\":10},\"textwrap\":false,\"align\":\"center\"},{\"font\":{\"size\":15},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"right\"},{\"font\":{\"size\":15},\"align\":\"right\"},{\"font\":{\"size\":15},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thin\",\"#000\"]},\"valign\":\"bottom\",\"align\":\"right\"},{\"font\":{\"size\":10},\"valign\":\"bottom\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thin\",\"#000\"]},\"align\":\"right\"},{\"font\":{\"size\":10},\"border\":{\"left\":[\"thin\",\"#000\"]},\"textwrap\":false,\"align\":\"left\"},{\"font\":{\"size\":10},\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":15},\"border\":{\"left\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"align\":\"left\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":10},\"valign\":\"bottom\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":10},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":10},\"align\":\"left\"},{\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\"},{\"font\":{\"size\":10},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":10},\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":15,\"bold\":true},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{},{\"font\":{\"size\":15,\"bold\":true},\"align\":\"center\"},{\"align\":\"right\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":14,\"bold\":true},\"align\":\"center\",\"border\":{\"bottom\":[\"thick\",\"#000\"],\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}}],\"validations\":[],\"cols\":{\"0\":{\"width\":41},\"1\":{\"width\":14},\"2\":{\"width\":56},\"3\":{\"width\":54},\"4\":{\"width\":156},\"5\":{\"width\":41},\"6\":{\"width\":18},\"7\":{\"width\":113},\"8\":{\"width\":58},\"9\":{\"width\":20},\"10\":{\"width\":23},\"11\":{\"width\":148},\"12\":{\"width\":12},\"len\":29},\"merges\":[\"C3:E3\",\"C7:E7\",\"H3:I3\",\"H7:I7\",\"C7:E7\",\"H7:I7\",\"F11:G11\",\"I11:K11\",\"F12:G12\",\"I12:K12\",\"I13:K13\",\"E13:H13\",\"C11:D11\",\"C12:D12\",\"C13:D13\",\"C14:D14\",\"C16:D16\",\"L4:M4\",\"C3:L3\",\"B7:D7\",\"C4:D4\",\"C5:D5\",\"E14:L14\",\"J16:L16\",\"D10:L10\",\"G5:L5\",\"C6:D6\",\"E6:L6\"]}', '', 'https://static.jero.com/designreport/images/处方_1607071731580.png', 'jero', '2020-07-10 17:12:16', 'admin', '2021-01-13 14:13:00', 0, NULL, NULL, 1, 819); +INSERT INTO `jimu_report` VALUES ('6d6bdcb5e820c301ea32789e3ae43c44', '1223', '供电公司抢修单', '', NULL, 'printinfo', '{\"area\":false,\"printElWidth\":794,\"excel_config_id\":\"6d6bdcb5e820c301ea32789e3ae43c44\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{},\"height\":11},\"1\":{\"cells\":{\"1\":{\"text\":\"供电公司抢修竣工单\",\"merge\":[0,5],\"style\":39},\"2\":{\"style\":39},\"3\":{\"style\":39},\"4\":{\"style\":39},\"5\":{\"style\":39},\"6\":{\"style\":39}},\"height\":84},\"2\":{\"cells\":{\"1\":{\"text\":\"填报单位:\",\"style\":26},\"2\":{\"text\":\"#{qiangxiu.danwei}\",\"style\":27},\"3\":{\"style\":27},\"4\":{\"text\":\"\",\"style\":27},\"5\":{\"text\":\"填报日期:\",\"style\":26},\"6\":{\"text\":\"#{qiangxiu.time}\",\"style\":27}}},\"3\":{\"cells\":{\"1\":{\"text\":\"填报名称:\",\"style\":26},\"2\":{\"text\":\"#{qiangxiu.ktime}\",\"style\":27},\"3\":{\"style\":27},\"4\":{\"style\":27},\"5\":{\"text\":\"项目编号:\",\"style\":26},\"6\":{\"text\":\"#{qiangxiu.wtime}\",\"style\":27}}},\"4\":{\"cells\":{\"1\":{\"style\":28},\"2\":{\"style\":28},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}},\"height\":10},\"5\":{\"cells\":{\"1\":{\"text\":\"项目批准核算\",\"style\":29},\"2\":{\"text\":\"#{qiangxiu.yusuan}\",\"style\":30,\"merge\":[0,4]},\"3\":{\"style\":31},\"4\":{\"style\":31},\"5\":{\"style\":31},\"6\":{\"style\":31}},\"height\":89},\"6\":{\"cells\":{\"1\":{\"text\":\"开工日期\",\"style\":32},\"2\":{\"style\":33,\"text\":\"#{qiangxiu.ktime}\",\"merge\":[0,1]},\"3\":{\"style\":28},\"4\":{\"style\":34,\"text\":\"完工日期\"},\"5\":{\"style\":33,\"merge\":[0,1],\"text\":\"#{qiangxiu.wtime}\"},\"6\":{\"style\":28}},\"height\":31},\"7\":{\"cells\":{\"1\":{\"text\":\"完工主要内容\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,4],\"text\":\"#{qiangxiu.neirong}\"},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}},\"height\":71},\"8\":{\"cells\":{\"1\":{\"text\":\"形成能力\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,4],\"text\":\"#{qiangxiu.nengli}\"},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}},\"height\":49},\"9\":{\"cells\":{\"1\":{\"text\":\"目标效益验收意见\",\"style\":32},\"2\":{\"style\":35,\"merge\":[0,4],\"text\":\"#{qiangxiu.yijian}\"},\"3\":{\"style\":36},\"4\":{\"style\":36},\"5\":{\"style\":36},\"6\":{\"style\":36}},\"height\":100},\"10\":{\"cells\":{\"1\":{\"style\":37,\"text\":\" \",\"merge\":[0,3]},\"2\":{\"style\":28},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":37,\"text\":\"#{qiangxiu.time1}\",\"merge\":[0,1]},\"6\":{\"style\":28}}},\"11\":{\"cells\":{\"1\":{\"text\":\"实施质量验收评价\",\"style\":32},\"2\":{\"style\":35,\"merge\":[0,4],\"text\":\"#{qiangxiu.pingjia}\"},\"3\":{\"style\":36},\"4\":{\"style\":36},\"5\":{\"style\":36},\"6\":{\"style\":36}},\"height\":99},\"12\":{\"cells\":{\"1\":{\"style\":33,\"merge\":[0,3]},\"2\":{\"style\":28},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":33,\"merge\":[0,1],\"text\":\"#{qiangxiu.time1}\"},\"6\":{\"style\":28}}},\"13\":{\"cells\":{\"1\":{\"text\":\"验收总结\",\"style\":32},\"2\":{\"style\":35,\"merge\":[0,4],\"text\":\"#{qiangxiu.zongjie}\"},\"3\":{\"style\":36},\"4\":{\"style\":36},\"5\":{\"style\":36},\"6\":{\"style\":36}},\"height\":80},\"14\":{\"cells\":{\"1\":{\"text\":\"责任单位意见\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,4]},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}},\"height\":67},\"15\":{\"cells\":{\"1\":{\"text\":\"责任单位审核人\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,1],\"text\":\"#{qiangxiu.dshenhe}\"},\"3\":{\"style\":28},\"4\":{\"style\":34,\"text\":\"日期\"},\"5\":{\"style\":33,\"text\":\"#{qiangxiu.time3}\",\"merge\":[0,1]},\"6\":{\"style\":28}},\"height\":42},\"16\":{\"cells\":{\"1\":{\"text\":\"生技部审批意见\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,4]},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}},\"height\":107},\"17\":{\"cells\":{\"1\":{\"text\":\"生技部主任\",\"style\":32},\"2\":{\"style\":33,\"merge\":[0,1],\"text\":\"#{qiangxiu.zhuren}\"},\"3\":{\"style\":28},\"4\":{\"style\":34,\"text\":\"日期\"},\"5\":{\"style\":33,\"text\":\"#{qiangxiu.time4}\",\"merge\":[0,1]},\"6\":{\"style\":28}},\"height\":41},\"18\":{\"cells\":{\"1\":{\"style\":28},\"2\":{\"style\":28},\"3\":{\"style\":28},\"4\":{\"style\":28},\"5\":{\"style\":28},\"6\":{\"style\":28}}},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":768,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#9cc2e6\"},{\"bgcolor\":\"#9cc2e6\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#ffffff\"},{\"bgcolor\":\"#ffffff\"},{\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\"},{\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"left\"},{\"align\":\"left\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true},{\"textwrap\":true},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":false},{\"textwrap\":false},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"right\",\"color\":\"#7f7f7f\"},{\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"bold\":false}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":false}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\",\"font\":{\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"宋体\"}},{\"align\":\"right\",\"color\":\"#7f7f7f\",\"font\":{\"name\":\"宋体\"}},{\"color\":\"#7f7f7f\",\"font\":{\"name\":\"宋体\"}},{\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#ffffff\",\"font\":{\"name\":\"宋体\"}},{\"bgcolor\":\"#ffffff\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\",\"font\":{\"bold\":true,\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"宋体\"}},{\"textwrap\":true,\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"left\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":false,\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true,\"name\":\"宋体\"}}],\"validations\":[],\"cols\":{\"0\":{\"width\":23},\"1\":{\"width\":131},\"3\":{\"width\":123},\"4\":{\"width\":127},\"5\":{\"width\":76},\"6\":{\"width\":188},\"len\":26},\"merges\":[\"C6:G6\",\"C7:D7\",\"F7:G7\",\"B2:G2\",\"C8:G8\",\"C9:G9\",\"C10:G10\",\"B11:E11\",\"F11:G11\",\"C12:G12\",\"B13:E13\",\"F13:G13\",\"C14:G14\",\"C15:G15\",\"C16:D16\",\"C17:G17\",\"C18:D18\",\"F16:G16\",\"F18:G18\"]}', '', 'https://static.jero.com/designreport/images/222_1607311944321.png', 'jero', '2020-07-20 19:37:54', 'admin', '2021-01-13 14:12:48', 0, NULL, NULL, 1, 151); +INSERT INTO `jimu_report` VALUES ('7905022412733a0c68dc7b4ef8947489', '8996445', '介绍信', '', NULL, 'printinfo', '{\"area\":{\"sri\":12,\"sci\":8,\"eri\":12,\"eci\":10,\"width\":137,\"height\":30},\"printElWidth\":794,\"excel_config_id\":\"7905022412733a0c68dc7b4ef8947489\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"1\":{},\"12\":{}},\"height\":11},\"1\":{\"cells\":{},\"height\":24},\"2\":{\"cells\":{},\"isDrag\":true,\"height\":43},\"3\":{\"cells\":{\"0\":{\"text\":\"\",\"style\":46},\"1\":{\"merge\":[0,10],\"text\":\"介绍信\",\"style\":337},\"2\":{\"style\":337},\"3\":{\"style\":337},\"4\":{\"style\":337},\"5\":{\"style\":337},\"6\":{\"style\":337},\"7\":{\"style\":337},\"8\":{\"style\":337},\"9\":{\"style\":337},\"10\":{\"style\":337},\"11\":{\"style\":337}},\"height\":216},\"4\":{\"cells\":{\"1\":{\"text\":\"${jieshaoxin.name}\",\"style\":338,\"merge\":[0,3]},\"2\":{\"style\":338},\"3\":{\"style\":338},\"4\":{\"style\":338},\"5\":{\"text\":\":\",\"style\":339},\"6\":{\"style\":339},\"7\":{\"style\":339},\"8\":{\"style\":339},\"9\":{\"style\":339},\"10\":{\"style\":339},\"11\":{\"style\":339},\"12\":{\"style\":316}},\"isDrag\":true,\"height\":80},\"5\":{\"cells\":{\"1\":{\"text\":\"兹介绍我局\",\"style\":340,\"merge\":[0,5]},\"2\":{\"style\":339},\"3\":{\"style\":339},\"4\":{\"style\":339},\"5\":{\"style\":339},\"6\":{\"style\":339},\"7\":{\"text\":\"${jieshaoxin.value}\",\"style\":341},\"8\":{\"text\":\"同志\",\"style\":339},\"9\":{\"text\":\"#{jieshaoxin.percent}\",\"style\":339},\"10\":{\"text\":\"人,前往你处\",\"style\":339,\"merge\":[0,1]},\"11\":{\"style\":339},\"12\":{\"style\":316}},\"isDrag\":true,\"height\":42},\"6\":{\"cells\":{\"1\":{\"text\":\"${jieshaoxin.shiqing}\",\"style\":342,\"merge\":[0,5]},\"2\":{\"style\":339},\"3\":{\"style\":339},\"4\":{\"style\":339},\"5\":{\"style\":339},\"6\":{\"style\":339},\"7\":{\"style\":339},\"8\":{\"style\":339},\"9\":{\"style\":339},\"10\":{\"style\":339},\"11\":{\"style\":339},\"12\":{\"style\":316},\"15\":{\"text\":\"\"}},\"isDrag\":true,\"height\":48},\"7\":{\"cells\":{\"1\":{\"style\":343,\"text\":\"\"},\"2\":{\"style\":344,\"merge\":[0,5],\"text\":\"请予接洽并给予帮助。\"},\"3\":{\"style\":339},\"4\":{\"style\":339},\"5\":{\"style\":339},\"6\":{\"style\":339},\"7\":{\"style\":339},\"8\":{\"style\":316},\"9\":{\"style\":316},\"10\":{\"style\":316},\"11\":{\"style\":316},\"12\":{\"style\":316}},\"height\":56},\"8\":{\"cells\":{\"1\":{\"style\":345},\"2\":{\"style\":316},\"3\":{\"style\":316},\"4\":{\"style\":316},\"5\":{\"style\":316},\"6\":{\"style\":316},\"7\":{\"style\":316},\"8\":{\"style\":316},\"9\":{\"style\":316},\"10\":{\"style\":316},\"11\":{\"style\":316},\"12\":{\"style\":316}},\"height\":15},\"9\":{\"cells\":{\"1\":{\"style\":316},\"2\":{\"style\":316},\"3\":{\"style\":316},\"4\":{\"style\":316},\"5\":{\"style\":316},\"6\":{\"style\":316},\"7\":{\"style\":316},\"8\":{\"style\":316},\"9\":{\"style\":316},\"10\":{\"style\":316},\"11\":{\"style\":316},\"12\":{\"style\":316}},\"height\":11},\"10\":{\"cells\":{\"1\":{\"style\":316},\"2\":{\"style\":316},\"3\":{\"style\":316},\"4\":{\"style\":316},\"5\":{\"style\":316},\"6\":{\"style\":316},\"7\":{\"style\":346},\"8\":{\"text\":\"\",\"style\":316,\"merge\":[0,3]},\"9\":{\"style\":316},\"10\":{\"style\":316},\"11\":{\"style\":316},\"12\":{\"style\":316},\"13\":{\"style\":31}},\"height\":39},\"11\":{\"cells\":{\"1\":{\"style\":316},\"2\":{\"style\":316},\"3\":{\"style\":316},\"4\":{\"style\":316},\"5\":{\"style\":316},\"6\":{\"style\":316},\"7\":{\"style\":346},\"8\":{\"merge\":[0,2],\"text\":\"单位盖章\",\"style\":347},\"9\":{\"style\":347},\"10\":{\"style\":347},\"11\":{\"merge\":[0,1],\"style\":316},\"12\":{\"style\":316}},\"height\":84},\"12\":{\"cells\":{\"1\":{\"merge\":[0,2],\"text\":\"\",\"style\":317},\"2\":{\"style\":317},\"3\":{\"style\":317},\"4\":{\"merge\":[0,2],\"text\":\"\",\"style\":346},\"5\":{\"style\":346},\"6\":{\"style\":346},\"7\":{\"text\":\"(有效时间:至\",\"style\":317},\"8\":{\"text\":\"${jieshaoxin.gdata}\",\"style\":316,\"merge\":[0,2]},\"9\":{\"style\":316},\"10\":{\"style\":316},\"11\":{\"style\":348,\"text\":\"止)\"},\"12\":{\"style\":316}},\"isDrag\":true,\"height\":30},\"13\":{\"cells\":{\"1\":{\"merge\":[12,11]}}},\"17\":{\"cells\":{},\"isDrag\":true},\"len\":89},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":749,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"left\"},{\"align\":\"left\",\"underline\":true},{\"underline\":true},{\"align\":\"center\",\"underline\":true},{\"align\":\"center\"},{\"align\":\"center\",\"underline\":false},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":16}},{\"font\":{\"size\":16}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":true}},{\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":true}},{\"font\":{\"bold\":true}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":false}},{\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false}},{\"font\":{\"bold\":false}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"font\":{\"size\":12},\"align\":\"center\"},{\"font\":{\"size\":8}},{\"font\":{\"size\":10}},{\"font\":{\"size\":10,\"bold\":true}},{\"font\":{\"size\":10,\"bold\":true},\"align\":\"center\"},{\"font\":{\"size\":18,\"bold\":true},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":18}},{\"font\":{\"size\":16,\"bold\":true},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":16}},{\"font\":{\"size\":12},\"valign\":\"bottom\"},{\"font\":{\"size\":12},\"valign\":\"middle\"},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"valign\":\"middle\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"left\":[\"dashed\",\"#000\"]}},{\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"font\":{\"size\":12,\"bold\":true},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"font\":{\"size\":14,\"bold\":true},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"}},{\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"}},{\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"}},{\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"}},{\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":10,\"name\":\"Lato\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"font\":{\"size\":10,\"name\":\"Lato\"},\"valign\":\"middle\",\"color\":\"#000100\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{},{\"font\":{\"size\":12,\"name\":\"Lato\",\"bold\":true},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"bold\":true},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\"},{\"align\":\"right\"},{\"align\":\"right\",\"font\":{\"size\":12}},{\"align\":\"left\",\"font\":{\"size\":12}},{\"font\":{\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"valign\":\"top\"},{\"valign\":\"top\",\"align\":\"center\"},{\"valign\":\"top\",\"align\":\"center\",\"font\":{\"size\":12}},{\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\"},{\"font\":{\"size\":14}},{\"align\":\"right\",\"font\":{\"size\":14}},{\"font\":{\"size\":14},\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":14,\"bold\":true}},{\"align\":\"right\",\"font\":{\"size\":9}},{\"font\":{\"size\":9}},{\"font\":{\"size\":9},\"align\":\"center\"},{\"font\":{\"size\":9},\"align\":\"left\"},{\"align\":\"left\",\"font\":{\"bold\":true,\"size\":14}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14},\"valign\":\"top\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16},\"valign\":\"top\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":18},\"valign\":\"top\"},{\"align\":\"right\",\"font\":{\"size\":10}},{\"font\":{\"size\":10},\"align\":\"center\"},{\"align\":\"left\",\"font\":{\"size\":10}},{\"align\":\"right\",\"font\":{\"size\":12},\"valign\":\"bottom\"},{\"valign\":\"bottom\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"valign\":\"bottom\"},{\"font\":{\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"align\":\"center\",\"valign\":\"bottom\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":22},\"valign\":\"top\"},{\"align\":\"right\",\"font\":{\"size\":14},\"valign\":\"bottom\"},{\"font\":{\"size\":14},\"valign\":\"bottom\"},{\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"valign\":\"bottom\"},{\"font\":{\"size\":14},\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"align\":\"center\",\"valign\":\"bottom\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14},\"align\":\"center\"},{\"valign\":\"top\",\"align\":\"center\",\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"size\":14}}],\"validations\":[],\"cols\":{\"0\":{\"width\":73},\"1\":{\"width\":46},\"2\":{\"width\":24},\"3\":{\"width\":15},\"4\":{\"width\":37},\"5\":{\"width\":13},\"6\":{\"width\":83},\"7\":{\"width\":256},\"8\":{\"width\":42},\"9\":{\"width\":18},\"10\":{\"width\":77},\"11\":{\"width\":65},\"12\":{\"width\":108},\"13\":{\"width\":62},\"16\":{\"width\":55},\"len\":29},\"merges\":[\"C0:D0\",\"G11:H11\",\"G12:H12\",\"B5:E5\",\"B6:G6\",\"C8:H8\",\"I12:K12\",\"B4:L4\",\"K6:L6\",\"B13:D13\",\"E13:G13\",\"I11:L11\",\"L12:M12\",\"B14:M26\",\"I13:K13\",\"B7:G7\"]}', '', 'https://static.jero.com/designreport/images/介绍xin_1607072641405.png', 'jero', '2020-07-10 13:38:40', 'admin', '2021-01-13 14:11:55', 0, NULL, NULL, 1, 819); +INSERT INTO `jimu_report` VALUES ('7c02c224a2db56d0350069650033f702', '895666', '核查评估表', '', NULL, 'printinfo', '{\"area\":false,\"printElWidth\":1399,\"excel_config_id\":\"7c02c224a2db56d0350069650033f702\",\"printElHeight\":790,\"rows\":{\"0\":{\"cells\":{\"1\":{\"text\":\"XX县(市、区)YY低保第三方核查评估汇总表\",\"merge\":[0,21],\"style\":386},\"2\":{\"style\":386},\"3\":{\"style\":386},\"4\":{\"style\":386},\"5\":{\"style\":386},\"6\":{\"style\":386},\"7\":{\"style\":386},\"8\":{\"style\":386},\"9\":{\"style\":386},\"10\":{\"style\":386},\"11\":{\"style\":386},\"12\":{\"style\":386},\"13\":{\"style\":386},\"14\":{\"style\":386},\"15\":{\"style\":386},\"16\":{\"style\":386},\"17\":{\"style\":386},\"18\":{\"style\":386},\"19\":{\"style\":386},\"20\":{\"style\":386},\"21\":{\"style\":386},\"22\":{\"style\":386}},\"height\":70},\"1\":{\"cells\":{\"1\":{\"merge\":[0,2],\"style\":403,\"text\":\" 北京市林翠社区\"},\"2\":{\"style\":398,\"text\":\" \"},\"3\":{\"style\":398,\"text\":\" \"},\"4\":{\"merge\":[0,2],\"text\":\"镇(乡、街道办事处)\",\"style\":399},\"5\":{\"style\":399},\"6\":{\"style\":399},\"7\":{\"style\":399,\"merge\":[0,7]},\"8\":{\"style\":400},\"9\":{\"style\":400},\"10\":{\"style\":400},\"11\":{\"style\":400},\"12\":{\"style\":400},\"13\":{\"style\":400},\"14\":{\"style\":400},\"15\":{\"merge\":[0,7],\"text\":\"单位:人、元、套、平方米\",\"style\":398},\"16\":{\"style\":401},\"17\":{\"style\":401},\"18\":{\"style\":401},\"19\":{\"style\":401},\"20\":{\"style\":401},\"21\":{\"style\":401},\"22\":{\"style\":401}}},\"2\":{\"cells\":{\"1\":{\"style\":114},\"2\":{\"style\":114},\"3\":{\"style\":114},\"4\":{\"style\":114},\"5\":{\"style\":114},\"6\":{\"style\":114},\"7\":{\"style\":114},\"8\":{\"style\":114},\"9\":{\"style\":114},\"10\":{\"style\":114},\"11\":{\"style\":114},\"12\":{\"style\":114},\"13\":{\"style\":114},\"14\":{\"style\":114},\"15\":{\"style\":114},\"16\":{\"style\":114},\"17\":{\"style\":114},\"18\":{\"style\":114},\"19\":{\"style\":114},\"20\":{\"style\":114},\"21\":{\"style\":114},\"22\":{\"style\":114}},\"height\":14},\"3\":{\"cells\":{\"1\":{\"style\":406,\"text\":\"村(社区)名称\",\"merge\":[1,0]},\"2\":{\"style\":407,\"text\":\"户主名称\",\"merge\":[1,0]},\"3\":{\"style\":407,\"text\":\"保障编号\",\"merge\":[1,0]},\"4\":{\"style\":408,\"text\":\"家庭人口\",\"merge\":[1,0]},\"5\":{\"style\":409,\"text\":\"家庭住址\",\"merge\":[1,0]},\"6\":{\"style\":409,\"text\":\"联系电话\",\"merge\":[1,0]},\"7\":{\"style\":408,\"text\":\"身份证号码\",\"merge\":[1,0]},\"8\":{\"style\":409,\"text\":\"原保障\",\"merge\":[0,2]},\"9\":{\"style\":377,\"text\":\" \"},\"10\":{\"style\":377,\"text\":\" \"},\"11\":{\"text\":\"核减后月人均收入\",\"style\":408,\"merge\":[1,0]},\"12\":{\"merge\":[0,5],\"text\":\"保障建议\",\"style\":410},\"13\":{\"style\":379,\"text\":\" \"},\"14\":{\"style\":379,\"text\":\" \"},\"15\":{\"style\":379,\"text\":\" \"},\"16\":{\"style\":379,\"text\":\" \"},\"17\":{\"style\":379,\"text\":\" \"},\"18\":{\"text\":\"是否新增对象\",\"style\":411,\"merge\":[1,0]},\"19\":{\"text\":\"建议取消原因\",\"style\":409,\"merge\":[0,3]},\"20\":{\"style\":377,\"text\":\" \"},\"21\":{\"style\":377,\"text\":\" \"},\"22\":{\"style\":377,\"text\":\" \"}}},\"4\":{\"cells\":{\"1\":{\"style\":381,\"text\":\" \"},\"2\":{\"style\":407,\"text\":\" \"},\"3\":{\"style\":382,\"text\":\" \"},\"4\":{\"style\":408,\"text\":\" \"},\"5\":{\"style\":377,\"text\":\" \"},\"6\":{\"style\":409,\"text\":\" \"},\"7\":{\"style\":383,\"text\":\" \"},\"8\":{\"text\":\"户数\",\"style\":412},\"9\":{\"style\":411,\"text\":\"人口\"},\"10\":{\"style\":413,\"text\":\"金额\"},\"11\":{\"style\":383,\"text\":\" \"},\"12\":{\"text\":\"保障类型\",\"style\":408},\"13\":{\"style\":413,\"text\":\"人口\"},\"14\":{\"style\":408,\"text\":\"差额补助\"},\"15\":{\"style\":408,\"text\":\"全额补助\"},\"16\":{\"style\":408,\"text\":\"增发补助\"},\"17\":{\"style\":408,\"text\":\"合计补助\"},\"18\":{\"style\":411,\"text\":\" \"},\"19\":{\"style\":408,\"text\":\"收入超标\"},\"20\":{\"style\":406,\"text\":\"机动车超标\"},\"21\":{\"style\":410,\"text\":\"死亡\"},\"22\":{\"style\":410,\"text\":\"其他\"}},\"height\":50},\"5\":{\"cells\":{\"1\":{\"text\":\"#{huizong1.cname}\",\"style\":414},\"2\":{\"text\":\"#{huizong1.hname}\",\"style\":414},\"3\":{\"text\":\"#{huizong1.num}\",\"style\":414},\"4\":{\"text\":\"#{huizong1.jtotal}\",\"style\":414},\"5\":{\"text\":\"#{huizong1.jaddress}\",\"style\":414},\"6\":{\"text\":\"#{huizong1.snum}\",\"style\":414},\"7\":{\"text\":\"#{huizong1.snum}\",\"style\":414},\"8\":{\"text\":\"#{huizong1.hushu}\",\"style\":414},\"9\":{\"text\":\"#{huizong1.renkou}\",\"style\":414},\"10\":{\"text\":\"#{huizong1.money}\",\"style\":414},\"11\":{\"text\":\"#{huizong1.shouru}\",\"style\":414},\"12\":{\"text\":\"#{huizong1.bkey}\",\"style\":414},\"13\":{\"text\":\"#{huizong1.brenkou}\",\"style\":414},\"14\":{\"text\":\"#{huizong1.cbuzhu}\",\"style\":414},\"15\":{\"text\":\"#{huizong1.qbuzhu}\",\"style\":414},\"16\":{\"text\":\"#{huizong1.zbuzhu}\",\"style\":414},\"17\":{\"text\":\"#{huizong1.qbuzhu}\",\"style\":414},\"18\":{\"text\":\"#{huizong1.sxinzeng}\",\"style\":414},\"19\":{\"text\":\"#{huizong1.schaobiao}\",\"style\":414},\"20\":{\"text\":\"#{huizong1.jchaobiao}\",\"style\":414},\"21\":{\"text\":\"#{huizong1.die}\",\"style\":414},\"22\":{\"text\":\"#{huizong1.qita}\",\"style\":414}},\"isDrag\":true,\"height\":46},\"6\":{\"cells\":{\"1\":{\"style\":114},\"2\":{\"style\":114},\"3\":{\"style\":114},\"4\":{\"style\":114},\"5\":{\"style\":114},\"6\":{\"style\":114},\"7\":{\"style\":114},\"8\":{\"style\":114},\"9\":{\"style\":114},\"10\":{\"style\":114},\"11\":{\"style\":114},\"12\":{\"style\":114},\"13\":{\"style\":114},\"14\":{\"style\":114},\"15\":{\"style\":114},\"16\":{\"style\":114},\"17\":{\"style\":114},\"18\":{\"style\":114},\"19\":{\"style\":114},\"20\":{\"style\":114},\"21\":{\"style\":114},\"22\":{\"style\":114}},\"height\":46},\"7\":{\"cells\":{\"1\":{\"style\":114},\"2\":{\"style\":114},\"3\":{\"style\":114},\"4\":{\"style\":114},\"5\":{\"style\":114},\"6\":{\"style\":114},\"7\":{\"style\":114},\"8\":{\"style\":114},\"9\":{\"style\":114},\"10\":{\"style\":114},\"11\":{\"style\":114},\"12\":{\"style\":114},\"13\":{\"style\":114},\"14\":{\"style\":114},\"15\":{\"style\":114},\"16\":{\"style\":114},\"17\":{\"style\":114},\"18\":{\"style\":114},\"19\":{\"style\":114},\"20\":{\"style\":114},\"21\":{\"style\":114},\"22\":{\"style\":114}},\"height\":46},\"8\":{\"cells\":{\"1\":{\"text\":\"\"},\"2\":{\"style\":114},\"3\":{\"style\":114},\"4\":{\"style\":114},\"5\":{\"style\":114},\"6\":{\"style\":114},\"7\":{\"style\":114},\"8\":{\"style\":114},\"9\":{\"style\":114},\"10\":{\"style\":114},\"11\":{\"style\":114},\"12\":{\"style\":114},\"13\":{\"style\":114},\"14\":{\"style\":114},\"15\":{\"style\":114},\"16\":{\"style\":114},\"17\":{\"style\":114},\"18\":{\"style\":114},\"19\":{\"style\":114},\"20\":{\"style\":114},\"21\":{\"style\":114},\"22\":{\"style\":114}},\"isDrag\":true},\"len\":102},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1378,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true},{\"textwrap\":true},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":false},{\"textwrap\":false},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\"},{\"textwrap\":true,\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"middle\"},{\"textwrap\":true,\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":false,\"valign\":\"middle\"},{\"textwrap\":false,\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\"},{\"textwrap\":true,\"valign\":\"bottom\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"top\"},{\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":16}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Helvetica\"}},{\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Helvetica\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"textwrap\":true,\"font\":{\"name\":\"Comic Sans MS\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Courier New\"}},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Courier New\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Verdana\"}},{\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Verdana\"}},{\"align\":\"center\",\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Verdana\"}},{\"textwrap\":true,\"font\":{\"name\":\"Verdana\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Verdana\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Verdana\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Verdana\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Verdana\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Verdana\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"}},{\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"}},{\"align\":\"center\",\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"valign\":\"middle\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":false,\"font\":{\"name\":\"Lato\"}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"valign\":\"middle\"},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\"},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"top\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]},\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"valign\":\"middle\"},{\"align\":\"center\",\"border\":{\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]}},{\"border\":{\"bottom\":[\"thin\",\"#ffffff\"],\"top\":[\"thin\",\"#ffffff\"],\"left\":[\"thin\",\"#ffffff\"],\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"border\":{\"right\":[\"thin\",\"#ffffff\"]}},{\"border\":{\"right\":[\"thin\",\"#ffffff\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"border\":{\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"border\":{\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"left\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"Lato\"},\"border\":{\"top\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000100\"],\"top\":[\"thin\",\"#000100\"],\"left\":[\"thin\",\"#000100\"],\"right\":[\"thin\",\"#000100\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]}},{\"font\":{\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"]}},{\"font\":{\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"font\":{\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000100\"]},\"align\":\"right\"},{\"font\":{\"name\":\"Lato\"},\"align\":\"right\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"valign\":\"middle\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#5b9cd6\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"center\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#000100\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#f4b184\",\"color\":\"#262626\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#9cc2e6\",\"color\":\"#262626\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#262626\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#00b04e\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]},\"align\":\"center\"},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#a7d08c\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":8},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]},\"align\":\"center\",\"font\":{\"size\":8}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#71ae47\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\"},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#00b04e\"],\"top\":[\"thin\",\"#00b04e\"],\"left\":[\"thin\",\"#00b04e\"],\"right\":[\"thin\",\"#00b04e\"]}},{\"align\":\"center\",\"font\":{\"size\":15,\"bold\":true,\"name\":\"Lato\"}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#000100\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9}},{\"font\":{\"name\":\"Lato\",\"size\":9}},{\"font\":{\"size\":9}},{\"align\":\"center\",\"font\":{\"size\":9}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#000100\"]},\"color\":\"#a5a5a5\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"color\":\"#a5a5a5\"},{\"font\":{\"name\":\"Lato\",\"size\":9},\"color\":\"#a5a5a5\"},{\"font\":{\"size\":9},\"color\":\"#a5a5a5\"},{\"align\":\"center\",\"font\":{\"size\":9},\"color\":\"#a5a5a5\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#000100\"]},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"color\":\"#7f7f7f\"},{\"font\":{\"name\":\"Lato\",\"size\":9},\"color\":\"#7f7f7f\"},{\"font\":{\"size\":9},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"font\":{\"size\":9},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"],\"top\":[\"thin\",\"#7f7f7f\"],\"left\":[\"thin\",\"#7f7f7f\"],\"right\":[\"thin\",\"#7f7f7f\"]},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":9},\"border\":{\"bottom\":[\"thin\",\"#7f7f7f\"]},\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#d8d8d8\"]},\"align\":\"center\",\"font\":{\"size\":8}},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"]},\"align\":\"center\",\"font\":{\"size\":8}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"textwrap\":true,\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"align\":\"center\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"textwrap\":true,\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"textwrap\":true,\"valign\":\"bottom\",\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"textwrap\":true,\"font\":{\"name\":\"Lato\",\"size\":10},\"bgcolor\":\"#02a274\",\"color\":\"#ffffff\",\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]}},{\"border\":{\"bottom\":[\"thin\",\"#a5a5a5\"],\"top\":[\"thin\",\"#a5a5a5\"],\"left\":[\"thin\",\"#a5a5a5\"],\"right\":[\"thin\",\"#a5a5a5\"]},\"align\":\"center\",\"font\":{\"size\":8}}],\"validations\":[],\"cols\":{\"0\":{\"width\":30},\"1\":{\"width\":68},\"2\":{\"width\":86},\"3\":{\"width\":93},\"4\":{\"width\":91},\"5\":{\"width\":156},\"6\":{\"width\":95},\"7\":{\"width\":85},\"8\":{\"width\":37},\"9\":{\"width\":30},\"10\":{\"width\":43},\"11\":{\"width\":66},\"12\":{\"width\":38},\"13\":{\"width\":41},\"14\":{\"width\":54},\"15\":{\"width\":49},\"16\":{\"width\":45},\"17\":{\"width\":49},\"18\":{\"width\":53},\"19\":{\"width\":40},\"20\":{\"width\":50},\"21\":{\"width\":40},\"22\":{\"width\":39},\"len\":29},\"merges\":[\"M4:R4\",\"B4:B5\",\"C4:C5\",\"D4:D5\",\"E4:E5\",\"F4:F5\",\"G4:G5\",\"H4:H5\",\"I4:K4\",\"L4:L5\",\"S4:S5\",\"T4:W4\",\"E2:G2\",\"B2:D2\",\"B1:W1\",\"P2:W2\",\"H2:O2\"]}', '', 'https://static.jero.com/designreport/images/QQ截图20201207113312_1607312171402.png', 'jero', '2020-07-14 16:41:42', 'admin', '2021-01-13 14:12:55', 0, NULL, NULL, 1, 245); +INSERT INTO `jimu_report` VALUES ('94b04a1ed7c17f8e96baa6d89fb90758', '3698522', '员工请假单', '', NULL, 'printinfo', '{\"area\":false,\"printElWidth\":794,\"excel_config_id\":\"94b04a1ed7c17f8e96baa6d89fb90758\",\"printElHeight\":1047,\"rows\":{\"1\":{\"cells\":{\"0\":{\"text\":\"员工请假单\",\"style\":100,\"merge\":[0,7]},\"1\":{\"style\":100},\"2\":{\"style\":100},\"3\":{\"style\":100},\"4\":{\"style\":100},\"5\":{\"style\":100},\"6\":{\"style\":100},\"7\":{\"style\":100}},\"height\":65},\"2\":{\"cells\":{\"0\":{\"text\":\"单位:北极星\",\"style\":101,\"merge\":[0,2]},\"1\":{\"style\":101},\"2\":{\"style\":101},\"3\":{\"style\":102},\"4\":{\"style\":102},\"5\":{\"style\":102},\"6\":{\"style\":102},\"7\":{\"style\":102}},\"height\":38},\"3\":{\"cells\":{\"0\":{\"text\":\"姓名\",\"style\":119},\"1\":{\"style\":119,\"text\":\" \"},\"2\":{\"text\":\"工作岗位\",\"style\":120},\"3\":{\"style\":119,\"text\":\" \"},\"4\":{\"text\":\"工作时间\",\"style\":119},\"5\":{\"style\":119,\"text\":\" \"},\"6\":{\"text\":\"出生日期\",\"style\":119},\"7\":{\"style\":119,\"text\":\" \"}}},\"4\":{\"cells\":{\"0\":{\"text\":\"请选择假类型\",\"style\":121,\"merge\":[4,0]},\"1\":{\"text\":\"年休假\",\"style\":120},\"2\":{\"style\":120,\"text\":\"病、事假\"},\"3\":{\"style\":120,\"text\":\"探亲假\"},\"4\":{\"style\":119,\"merge\":[0,1],\"text\":\"婚、丧假\"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":119,\"merge\":[0,1],\"text\":\"生育假\"},\"7\":{\"style\":107,\"text\":\" \"}},\"height\":29},\"5\":{\"cells\":{\"0\":{\"style\":0},\"1\":{\"text\":\"1、公岭满1~9年(5天)\",\"style\":122},\"2\":{\"style\":119,\"text\":\"1、病假\"},\"3\":{\"style\":119,\"text\":\"1、未婚探父母(20天)\"},\"4\":{\"style\":119,\"merge\":[0,1],\"text\":\"1、婚假(3天)\"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":119,\"merge\":[0,1],\"text\":\"1、流产\"},\"7\":{\"style\":107,\"text\":\" \"}},\"height\":25},\"6\":{\"cells\":{\"0\":{\"style\":0},\"1\":{\"style\":123,\"text\":\"2、公岭满10~19年(10天)\"},\"2\":{\"style\":119,\"text\":\"2、事假\"},\"3\":{\"style\":119,\"text\":\"2、已婚探父母(20天)\"},\"4\":{\"style\":119,\"merge\":[0,1],\"text\":\"2、晚婚假(13天)\"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":119,\"merge\":[0,1],\"text\":\"2、产假\"},\"7\":{\"style\":107,\"text\":\" \"}}},\"7\":{\"cells\":{\"0\":{\"style\":0},\"1\":{\"style\":123,\"text\":\"3、公岭满20年(15天)\"},\"2\":{\"style\":119,\"text\":\" \"},\"3\":{\"style\":119,\"text\":\"3、探配偶(30天)\"},\"4\":{\"style\":119,\"merge\":[0,1],\"text\":\"3、丧假(3天)\"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":119,\"merge\":[0,1],\"text\":\"3、哺乳假\"},\"7\":{\"style\":107,\"text\":\" \"}}},\"8\":{\"cells\":{\"0\":{\"style\":0},\"1\":{\"style\":119,\"text\":\" \"},\"2\":{\"style\":119,\"text\":\" \"},\"3\":{\"style\":119,\"text\":\"探亲地点:\",\"merge\":[0,2]},\"4\":{\"style\":107,\"text\":\" \"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":119,\"merge\":[0,1],\"text\":\"4、陪护假\"},\"7\":{\"style\":107,\"text\":\" \"},\"8\":{\"style\":15},\"9\":{\"style\":15},\"10\":{\"style\":15},\"11\":{\"style\":15},\"12\":{\"style\":15},\"13\":{\"style\":15},\"14\":{\"style\":15},\"15\":{\"style\":15},\"16\":{\"style\":15},\"17\":{\"style\":15},\"18\":{\"style\":15},\"19\":{\"style\":15},\"20\":{\"style\":15},\"21\":{\"style\":15},\"22\":{\"style\":15},\"23\":{\"style\":5},\"24\":{\"style\":5},\"25\":{\"style\":5}}},\"9\":{\"cells\":{\"0\":{\"style\":124,\"text\":\"请假时间\"},\"1\":{\"style\":125,\"merge\":[0,6],\"text\":\"2020年02-30 至2020年02-03-30\"},\"2\":{\"style\":115,\"text\":\" \"},\"3\":{\"style\":115,\"text\":\" \"},\"4\":{\"style\":115,\"text\":\" \"},\"5\":{\"style\":115,\"text\":\" \"},\"6\":{\"style\":115,\"text\":\" \"},\"7\":{\"style\":115,\"text\":\" \"}},\"height\":46},\"10\":{\"cells\":{\"0\":{\"style\":126,\"text\":\"审批人员及意见\"},\"1\":{\"merge\":[0,6],\"style\":127,\"text\":\"同意\"},\"2\":{\"style\":118,\"text\":\" \"},\"3\":{\"style\":118,\"text\":\" \"},\"4\":{\"style\":118,\"text\":\" \"},\"5\":{\"style\":118,\"text\":\" \"},\"6\":{\"style\":118,\"text\":\" \"},\"7\":{\"style\":118,\"text\":\" \"}},\"height\":89},\"11\":{\"cells\":{\"0\":{\"text\":\"备注\",\"style\":119},\"1\":{\"style\":119,\"text\":\" \"},\"2\":{\"text\":\"请假人签名\",\"style\":119},\"3\":{\"merge\":[0,4],\"style\":119,\"text\":\" \"},\"4\":{\"style\":107,\"text\":\" \"},\"5\":{\"style\":107,\"text\":\" \"},\"6\":{\"style\":107,\"text\":\" \"},\"7\":{\"style\":107,\"text\":\" \"}},\"height\":90},\"12\":{\"cells\":{\"0\":{\"merge\":[0,7],\"style\":120,\"text\":\"请假审批表一式两份,考勤员与人力资源部门各存一份\"},\"1\":{\"style\":106,\"text\":\" \"},\"2\":{\"style\":106,\"text\":\" \"},\"3\":{\"style\":106,\"text\":\" \"},\"4\":{\"style\":106,\"text\":\" \"},\"5\":{\"style\":106,\"text\":\" \"},\"6\":{\"style\":106,\"text\":\" \"},\"7\":{\"style\":106,\"text\":\" \"}},\"height\":25},\"len\":101},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":789,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"textwrap\":true},{\"textwrap\":false},{\"textwrap\":true,\"valign\":\"middle\"},{\"textwrap\":false,\"valign\":\"middle\"},{\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"left\"},{},{\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"}},{\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"align\":\"center\",\"font\":{\"name\":\"Arial\"}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"name\":\"Courier New\"},\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"Courier New\"},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"textwrap\":true,\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"textwrap\":true,\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"align\":\"center\"},{\"font\":{\"name\":\"Courier New\"},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\",\"size\":14}},{\"align\":\"center\",\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\",\"size\":14,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true}},{\"font\":{\"name\":\"Courier New\"},\"color\":\"#7f7f7f\"},{\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Courier New\"},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"align\":\"center\",\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\"},{\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\"},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"align\":\"center\",\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"Lato\"}},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"Lato\"},\"valign\":\"middle\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"Lato\"},\"valign\":\"bottom\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"Lato\"},\"valign\":\"top\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"top\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"top\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"middle\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"middle\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"textwrap\":true},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"textwrap\":true},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"textwrap\":false},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"textwrap\":false},{\"textwrap\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"Lato\"}},{\"align\":\"center\",\"font\":{\"name\":\"宋体\",\"size\":14,\"bold\":true}},{\"font\":{\"name\":\"宋体\"},\"color\":\"#7f7f7f\"},{\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"宋体\"},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":false,\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"宋体\"},\"valign\":\"top\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"valign\":\"top\"},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"valign\":\"top\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"font\":{\"name\":\"宋体\"},\"valign\":\"bottom\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"textwrap\":false},{\"align\":\"center\",\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"textwrap\":false},{\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"align\":\"center\",\"color\":\"#000100\"},{\"textwrap\":false,\"valign\":\"middle\",\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":false,\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"color\":\"#000100\",\"font\":{\"name\":\"宋体\"},\"valign\":\"top\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"valign\":\"top\"},{\"textwrap\":true,\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"color\":\"#000100\",\"font\":{\"name\":\"宋体\"},\"valign\":\"bottom\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#262626\"],\"top\":[\"thin\",\"#262626\"],\"left\":[\"thin\",\"#262626\"],\"right\":[\"thin\",\"#262626\"]},\"font\":{\"name\":\"宋体\"},\"color\":\"#000100\",\"textwrap\":false}],\"validations\":[],\"cols\":{\"0\":{\"width\":35},\"1\":{\"width\":195},\"2\":{\"width\":77},\"3\":{\"width\":168},\"4\":{\"width\":62},\"6\":{\"width\":70},\"7\":{\"width\":82},\"len\":26},\"merges\":[\"D9:F9\",\"E5:F5\",\"E6:F6\",\"E7:F7\",\"E8:F8\",\"G5:H5\",\"G6:H6\",\"G7:H7\",\"G8:H8\",\"G9:H9\",\"B10:H10\",\"B11:H11\",\"D12:H12\",\"A13:H13\",\"A3:C3\",\"A2:H2\",\"A5:A9\"]}', '', 'https://static.jero.com/designreport/images/QQ截图20201207135257_1607320433681.png', 'jero', '2020-07-10 18:29:39', 'admin', '2021-01-13 14:12:58', 0, NULL, NULL, 1, 134); +INSERT INTO `jimu_report` VALUES ('9dbadaee8720767efe3164a7d018c870', '45566', '发票打印', '', NULL, 'printinfo', '{\"area\":{\"sri\":8,\"sci\":4,\"eri\":8,\"eci\":4,\"width\":100,\"height\":25},\"printElWidth\":794,\"excel_config_id\":\"9dbadaee8720767efe3164a7d018c870\",\"printElHeight\":500,\"rows\":{\"0\":{\"cells\":{\"0\":{\"text\":\"\",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"1\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"2\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"3\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"4\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"5\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"6\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"7\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"},\"8\":{\"text\":\" \",\"virtual\":\"RTA6TUIKs1pmgVOM\"}}},\"2\":{\"cells\":{},\"height\":11},\"3\":{\"cells\":{\"2\":{\"text\":\"\"},\"5\":{\"text\":\"\"}},\"height\":18},\"4\":{\"cells\":{\"2\":{\"text\":\"182123434\",\"style\":0},\"5\":{\"text\":\"12345678\"}},\"height\":15},\"5\":{\"cells\":{\"2\":{\"text\":\"\"}}},\"7\":{\"cells\":{}},\"8\":{\"cells\":{\"1\":{\"text\":\"餐饮\"},\"2\":{\"text\":\" A11\"},\"3\":{\"text\":\" 333 3\"},\"4\":{\"text\":\" 3 4\"},\"5\":{\"text\":\" 1\"},\"6\":{\"text\":\"3333\"}}},\"9\":{\"cells\":{\"1\":{\"text\":\"测试\"},\"2\":{\"text\":\" mmm\"},\"3\":{\"text\":\" 33 5\"}}},\"10\":{\"cells\":{},\"height\":22},\"11\":{\"cells\":{\"2\":{\"text\":\" \"},\"3\":{\"text\":\"343434\"},\"6\":{\"text\":\"3434\"}},\"height\":45},\"12\":{\"cells\":{\"4\":{\"text\":\" 刮开中奖\"}},\"height\":12},\"13\":{\"cells\":{\"2\":{\"text\":\"\"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\"备注\"}},\"height\":31},\"14\":{\"cells\":{\"1\":{\"text\":\" 张三\"},\"3\":{\"text\":\"完成\"},\"4\":{\"text\":\" 李思\"}},\"height\":41},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":847,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"font\":{\"size\":8}}],\"validations\":[],\"cols\":{\"0\":{\"width\":93},\"1\":{\"width\":74},\"2\":{\"width\":80},\"len\":26},\"merges\":[],\"imgList\":[{\"row\":0,\"col\":0,\"width\":\"832\",\"height\":\"480\",\"src\":\"https://static.jero.com/designreport/images/套打_1609313052910.png\",\"isBackend\":true,\"commonBackend\":true,\"layer_id\":\"RTA6TUIKs1pmgVOM\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8]]}]}', '', 'https://static.jero.com/designreport/images/QQ截图20201207113651_1607312223499.png', 'jero', '2020-07-20 18:55:59', 'admin', '2021-01-13 14:12:52', 0, NULL, NULL, 1, 1120); +INSERT INTO `jimu_report` VALUES ('a250846887abe01217aab173d3006489', '56663', '不动产打印', '', NULL, 'printinfo', '{\"loopBlockList\":[],\"area\":false,\"printElWidth\":947,\"excel_config_id\":\"a250846887abe01217aab173d3006489\",\"printElHeight\":1047,\"rows\":{\"0\":{\"cells\":{\"0\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"1\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"2\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"3\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"4\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"5\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"6\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"7\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"8\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"},\"9\":{\"text\":\" \",\"virtual\":\"TyDjQJrN7mqW5MdT\"}},\"isDrag\":true,\"height\":45},\"1\":{\"cells\":{\"0\":{\"style\":24},\"1\":{\"style\":23},\"2\":{\"style\":40},\"3\":{\"style\":42}},\"height\":23},\"2\":{\"cells\":{\"0\":{\"text\":\"\",\"style\":0},\"1\":{\"text\":\" ${budong.yname}\",\"style\":21,\"merge\":[0,2]},\"2\":{\"style\":12},\"3\":{\"style\":12}},\"isDrag\":true,\"height\":34},\"3\":{\"cells\":{\"1\":{\"text\":\" ${budong.chanquan}\",\"style\":0,\"merge\":[0,2]},\"5\":{\"text\":\"${budong.beizhu}\",\"merge\":[5,3]}},\"isDrag\":true,\"height\":39},\"4\":{\"cells\":{\"1\":{\"text\":\" ${budong.zhuzhi}\",\"style\":39,\"merge\":[0,2]},\"2\":{\"style\":39},\"3\":{\"style\":39},\"4\":{\"style\":19}},\"isDrag\":true,\"height\":33},\"5\":{\"cells\":{\"1\":{\"text\":\" ${budong.danyuan}\",\"style\":0,\"merge\":[0,2]},\"4\":{\"style\":19}},\"isDrag\":true,\"height\":53},\"6\":{\"cells\":{\"1\":{\"text\":\" ${budong.type}\",\"style\":0,\"merge\":[0,2]},\"4\":{\"style\":19}},\"isDrag\":true,\"height\":47},\"7\":{\"cells\":{\"1\":{\"text\":\" ${budong.xtype}\",\"style\":0,\"merge\":[0,2]}},\"isDrag\":true,\"height\":38},\"8\":{\"cells\":{\"1\":{\"text\":\" ${budong.suoyou}\",\"style\":0,\"merge\":[0,2]}},\"isDrag\":true,\"height\":31},\"9\":{\"cells\":{\"1\":{\"text\":\" ${budong.mianji}\",\"style\":0,\"merge\":[0,2]}},\"isDrag\":true,\"height\":45},\"10\":{\"cells\":{\"1\":{\"text\":\" ${budong.riqi}\",\"style\":0,\"merge\":[0,2]}},\"isDrag\":true,\"height\":26},\"11\":{\"cells\":{\"1\":{\"text\":\"\",\"style\":0,\"merge\":[0,2]}},\"height\":35},\"12\":{\"cells\":{\"1\":{\"text\":\"\",\"style\":0},\"2\":{\"text\":\"${budong.chanquan}\",\"style\":0,\"merge\":[4,1]}},\"isDrag\":true},\"13\":{\"cells\":{\"1\":{\"style\":0}}},\"14\":{\"cells\":{\"1\":{\"style\":0}}},\"15\":{\"cells\":{\"1\":{\"style\":0}}},\"16\":{\"cells\":{\"1\":{\"style\":0}},\"height\":5},\"17\":{\"cells\":{\"1\":{\"style\":0},\"2\":{\"text\":\"\",\"style\":0}},\"isDrag\":true,\"height\":33},\"18\":{\"cells\":{\"1\":{\"style\":0},\"2\":{\"style\":0,\"text\":\"\"}}},\"len\":100,\"-1\":{\"cells\":{\"0\":{\"text\":\"#{budong.zhuzhi}\"},\"-1\":{\"text\":\"#{budong.suoyou}\"}},\"isDrag\":true}},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":1024,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"font\":{\"bold\":true}},{\"font\":{\"italic\":true}},{\"font\":{\"italic\":true,\"bold\":true}},{\"font\":{\"italic\":true,\"bold\":false}},{\"font\":{\"italic\":false,\"bold\":false}},{\"font\":{\"italic\":false,\"bold\":true}},{\"align\":\"left\"},{\"align\":\"center\"},{\"align\":\"right\"},{\"align\":\"left\",\"valign\":\"top\"},{\"align\":\"left\",\"valign\":\"top\",\"font\":{\"bold\":true}},{\"font\":{\"bold\":false}},{\"align\":\"left\",\"valign\":\"bottom\"},{\"valign\":\"bottom\"},{\"align\":\"center\",\"valign\":\"bottom\"},{\"textwrap\":true},{\"font\":{\"bold\":true},\"valign\":\"bottom\"},{\"font\":{\"italic\":false,\"bold\":true},\"valign\":\"top\"},{\"valign\":\"top\"},{\"textwrap\":true,\"font\":{\"bold\":true}},{\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"bold\":true}},{\"align\":\"left\",\"valign\":\"bottom\",\"font\":{\"bold\":true}},{\"align\":\"left\",\"valign\":\"bottom\",\"font\":{\"bold\":true,\"size\":8}},{\"font\":{\"bold\":true,\"size\":8},\"valign\":\"bottom\"},{\"align\":\"center\",\"valign\":\"bottom\",\"font\":{\"bold\":true,\"size\":8}},{\"align\":\"left\",\"valign\":\"middle\",\"font\":{\"bold\":true}},{\"align\":\"left\",\"valign\":\"middle\"},{\"font\":{\"italic\":false,\"bold\":true},\"valign\":\"bottom\"},{\"font\":{\"italic\":false,\"bold\":true},\"valign\":\"middle\"},{\"valign\":\"middle\"},{\"font\":{\"italic\":true,\"bold\":true},\"valign\":\"middle\"},{\"valign\":\"middle\",\"font\":{\"italic\":true}},{\"valign\":\"middle\",\"font\":{\"italic\":false}},{\"font\":{\"italic\":false,\"bold\":false},\"valign\":\"middle\"},{\"align\":\"center\",\"valign\":\"middle\",\"font\":{\"bold\":true,\"size\":8}},{\"font\":{\"bold\":true,\"size\":8},\"valign\":\"middle\"},{\"align\":\"left\",\"valign\":\"middle\",\"font\":{\"bold\":true,\"size\":8}},{\"align\":\"right\",\"valign\":\"middle\",\"font\":{\"bold\":true,\"size\":8}},{\"font\":{\"italic\":false,\"bold\":true},\"valign\":\"middle\",\"align\":\"center\"},{\"font\":{\"italic\":false,\"bold\":true},\"valign\":\"middle\",\"align\":\"left\"},{\"align\":\"right\",\"valign\":\"bottom\"},{\"align\":\"right\",\"valign\":\"bottom\",\"font\":{\"bold\":true,\"size\":8}},{\"align\":\"center\",\"valign\":\"middle\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":107},\"1\":{\"width\":54},\"2\":{\"width\":135},\"3\":{\"width\":180},\"6\":{\"width\":123},\"8\":{\"width\":25},\"len\":26},\"merges\":[\"A1:A2\",\"B1:B2\",\"B12:D12\",\"B9:D9\",\"B7:D7\",\"B6:D6\",\"B5:D5\",\"B3:D3\",\"B11:D11\",\"B8:D8\",\"B10:D10\",\"C13:D17\",\"C1:C2\",\"B4:D4\",\"F4:I9\",\"D1:D2\"],\"imgList\":[{\"row\":0,\"col\":0,\"width\":\"950\",\"height\":\"683\",\"src\":\"https://static.jero.com/designreport/images/38_1610456500965.jpg\",\"isBackend\":true,\"commonBackend\":true,\"layer_id\":\"TyDjQJrN7mqW5MdT\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9]]}]}', '', 'https://static.jero.com/designreport/images/24_1597233568822.png', 'jero', '2020-07-09 10:48:22', 'admin', '2021-01-13 14:12:46', 0, NULL, NULL, 1, 1395); +INSERT INTO `jimu_report` VALUES ('a9f068972508920cd4aab831814f0c04', '23445', '逮捕证', '', NULL, 'printinfo', '{\"area\":{\"sri\":13,\"sci\":9,\"eri\":13,\"eci\":9,\"width\":163,\"height\":89},\"printElWidth\":794,\"excel_config_id\":\"a9f068972508920cd4aab831814f0c04\",\"printElHeight\":1108,\"rows\":{\"0\":{\"cells\":{\"2\":{\"text\":\"\",\"merge\":[0,9],\"style\":324},\"12\":{}},\"isDrag\":true,\"height\":55},\"1\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":410,\"merge\":[0,13],\"text\":\"兰州市经济侦查大队\"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"},\"15\":{\"style\":324,\"text\":\" \"}},\"height\":128},\"2\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":411,\"merge\":[0,13],\"text\":\"逮捕令\"},\"2\":{\"text\":\" \"},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"text\":\" \"},\"15\":{\"style\":324,\"text\":\" \"}},\"height\":41},\"3\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":412,\"merge\":[0,12],\"text\":\"第123459663号\"},\"2\":{\"style\":397,\"text\":\" \"},\"3\":{\"style\":397,\"text\":\" \"},\"4\":{\"style\":397,\"text\":\" \"},\"5\":{\"style\":397,\"text\":\" \"},\"6\":{\"style\":397,\"text\":\" \"},\"7\":{\"style\":397,\"text\":\" \"},\"8\":{\"style\":397,\"text\":\" \"},\"9\":{\"style\":397,\"text\":\" \"},\"10\":{\"style\":397,\"text\":\" \"},\"11\":{\"style\":397,\"text\":\" \"},\"12\":{\"style\":397,\"text\":\" \"},\"13\":{\"style\":397,\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"height\":60},\"4\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"text\":\" 根据《中华人民共和国刑事诉讼法》第七十八条之规定,\",\"style\":341,\"merge\":[0,11]},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"height\":43},\"5\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"style\":341,\"text\":\"经\",\"merge\":[0,1]},\"3\":{\"style\":343,\"text\":\" \"},\"4\":{\"text\":\"${pdaibu.pname}\",\"style\":342,\"merge\":[0,9]},\"5\":{\"text\":\" \"},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\" \"},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"isDrag\":true,\"height\":47},\"6\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"style\":344,\"text\":\" \",\"merge\":[0,2]},\"3\":{\"text\":\" \"},\"4\":{\"text\":\" \"},\"5\":{\"merge\":[0,3],\"text\":\"批准,兹由我局对涉嫌\",\"style\":338},\"6\":{\"text\":\" \"},\"7\":{\"text\":\" \"},\"8\":{\"text\":\" \"},\"9\":{\"text\":\"${pdaibu.shiqing}\",\"style\":347,\"merge\":[0,4]},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"isDrag\":true,\"height\":49},\"7\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"style\":341,\"text\":\"的\"},\"3\":{\"text\":\"${pdaibu.fname}\",\"style\":345,\"merge\":[0,1]},\"4\":{\"style\":346,\"text\":\" \"},\"5\":{\"text\":\"(性别\",\"style\":343},\"6\":{\"text\":\"${pdaibu.fsex}\",\"style\":347,\"merge\":[0,1]},\"7\":{\"style\":338,\"text\":\" \"},\"8\":{\"style\":346,\"text\":\"出生日期\"},\"9\":{\"text\":\"${pdaibu.cdata}\",\"style\":345,\"merge\":[0,4]},\"10\":{\"text\":\" \"},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"isDrag\":true,\"height\":51},\"8\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"text\":\"${pdaibu.zhuzhi}\",\"style\":345,\"merge\":[0,7]},\"3\":{\"style\":370,\"text\":\" \"},\"4\":{\"style\":370,\"text\":\" \"},\"5\":{\"style\":370,\"text\":\" \"},\"6\":{\"style\":370,\"text\":\" \"},\"7\":{\"style\":370,\"text\":\" \"},\"8\":{\"style\":370,\"text\":\" \"},\"9\":{\"style\":370,\"text\":\" \"},\"10\":{\"style\":341,\"text\":\"执行逮捕,送兰州\",\"merge\":[0,3]},\"11\":{\"text\":\" \"},\"12\":{\"text\":\" \"},\"13\":{\"text\":\" \"},\"14\":{\"style\":413,\"text\":\" \"}},\"isDrag\":true,\"height\":51},\"9\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414,\"text\":\" \"},\"2\":{\"style\":341,\"merge\":[0,6],\"text\":\"市经济侦查大队羁押。\"},\"3\":{\"style\":350,\"text\":\" \"},\"4\":{\"style\":350,\"text\":\" \"},\"5\":{\"style\":350,\"text\":\" \"},\"6\":{\"style\":349,\"text\":\" \"},\"7\":{\"style\":349,\"text\":\" \"},\"8\":{\"style\":350,\"text\":\" \"},\"9\":{\"style\":341,\"text\":\" \"},\"10\":{\"style\":341,\"merge\":[5,1],\"text\":\" \"},\"11\":{\"style\":338,\"text\":\" \"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":57},\"10\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414},\"2\":{\"style\":343},\"3\":{\"style\":338},\"4\":{\"style\":338,\"virtual\":\"DId4FGTLnP3vfp4y\"},\"5\":{\"style\":338,\"virtual\":\"DId4FGTLnP3vfp4y\"},\"6\":{\"style\":338,\"virtual\":\"DId4FGTLnP3vfp4y\"},\"7\":{\"style\":338},\"8\":{\"style\":338},\"9\":{\"style\":338},\"10\":{\"style\":338,\"text\":\" \"},\"11\":{\"style\":338,\"text\":\" \"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":61},\"11\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414},\"2\":{\"style\":337},\"3\":{\"style\":338},\"4\":{\"style\":338},\"5\":{\"style\":338},\"6\":{\"style\":376,\"merge\":[0,2]},\"7\":{\"style\":302},\"8\":{\"style\":302},\"9\":{\"style\":338},\"10\":{\"style\":338,\"text\":\" \"},\"11\":{\"style\":338,\"text\":\" \"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":83},\"12\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414},\"2\":{\"merge\":[0,6],\"style\":338},\"3\":{\"style\":338},\"4\":{\"style\":338},\"5\":{\"style\":338},\"6\":{\"style\":338},\"7\":{\"style\":338},\"8\":{\"style\":338},\"10\":{\"style\":338,\"text\":\" \"},\"11\":{\"style\":338,\"text\":\" \"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":14},\"13\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414},\"2\":{\"style\":351,\"merge\":[0,5],\"text\":\" \"},\"3\":{\"style\":338},\"4\":{\"style\":338},\"5\":{\"style\":338},\"6\":{\"style\":338},\"7\":{\"style\":338},\"8\":{\"style\":380,\"text\":\"公安局印\"},\"9\":{\"text\":\" \",\"virtual\":\"XefZfpEcdS3wI6Ae\"},\"10\":{\"text\":\" \",\"virtual\":\"XefZfpEcdS3wI6Ae\"},\"11\":{\"text\":\" \",\"virtual\":\"XefZfpEcdS3wI6Ae\"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":89},\"14\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":414},\"2\":{\"style\":338},\"3\":{\"style\":338},\"4\":{\"style\":338},\"5\":{\"style\":338},\"6\":{\"style\":338},\"7\":{\"style\":338},\"8\":{\"style\":338},\"9\":{\"style\":338},\"10\":{\"style\":338,\"text\":\" \"},\"11\":{\"style\":338,\"text\":\" \"},\"12\":{\"style\":324},\"13\":{\"style\":324},\"14\":{\"style\":413}},\"height\":21},\"15\":{\"cells\":{\"0\":{\"style\":324},\"1\":{\"style\":415,\"text\":\" \"},\"2\":{\"style\":416,\"text\":\" \"},\"3\":{\"style\":417,\"text\":\" \"},\"4\":{\"style\":417,\"text\":\" \"},\"5\":{\"style\":417,\"text\":\" \"},\"6\":{\"text\":\"${pdaibu.gdata}\",\"style\":421,\"merge\":[0,6]},\"7\":{\"style\":422,\"text\":\" \"},\"8\":{\"style\":422,\"text\":\" \"},\"9\":{\"style\":422,\"text\":\" \"},\"10\":{\"style\":422,\"text\":\" \"},\"11\":{\"style\":422,\"text\":\" \"},\"12\":{\"style\":422,\"text\":\" \"},\"13\":{\"style\":417,\"text\":\" \"},\"14\":{\"style\":419,\"text\":\" \"}},\"isDrag\":true,\"height\":201},\"len\":88,\"-1\":{\"cells\":{\"1\":{\"text\":\"#{daibu.fdata}\"},\"-1\":{\"text\":\"#{pdaibu.shiqing}\"}},\"isDrag\":true}},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":854,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"left\"},{\"align\":\"left\",\"underline\":true},{\"underline\":true},{\"align\":\"center\",\"underline\":true},{\"align\":\"center\"},{\"align\":\"center\",\"underline\":false},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":16}},{\"font\":{\"size\":16}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":true}},{\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":true}},{\"font\":{\"bold\":true}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":true}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":false}},{\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false}},{\"font\":{\"bold\":false}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false}},{\"align\":\"left\",\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":16,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"font\":{\"size\":12},\"align\":\"center\"},{\"font\":{\"size\":8}},{\"font\":{\"size\":10}},{\"font\":{\"size\":10,\"bold\":true}},{\"font\":{\"size\":10,\"bold\":true},\"align\":\"center\"},{\"font\":{\"size\":18,\"bold\":true},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":18}},{\"font\":{\"size\":16,\"bold\":true},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":16}},{\"font\":{\"size\":12},\"valign\":\"bottom\"},{\"font\":{\"size\":12},\"valign\":\"middle\"},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"valign\":\"middle\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"left\":[\"dashed\",\"#000\"]}},{\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"font\":{\"size\":12,\"bold\":true},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true}},{\"font\":{\"size\":14,\"bold\":true},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Arial\"}},{\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"}},{\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Source Sans Pro\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Source Sans Pro\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Source Sans Pro\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"}},{\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Comic Sans MS\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Comic Sans MS\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Comic Sans MS\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Courier New\"}},{\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"}},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Courier New\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Courier New\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Arial\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Arial\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Helvetica\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Helvetica\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"align\":\"center\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]},\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":10,\"name\":\"Lato\"},\"valign\":\"middle\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"color\":\"#000100\",\"align\":\"right\"},{\"align\":\"right\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"left\",\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"left\",\"color\":\"#000100\",\"valign\":\"top\"},{\"align\":\"left\",\"valign\":\"top\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"left\",\"color\":\"#000100\",\"valign\":\"middle\"},{\"align\":\"left\",\"valign\":\"middle\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"left\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"left\",\"valign\":\"bottom\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"left\":[\"thick\",\"#000\"]},\"align\":\"right\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":true,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"left\",\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"underline\":false,\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"align\":\"right\"},{\"font\":{\"size\":12,\"name\":\"Lato\",\"bold\":true},\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"color\":\"#000100\"},{\"border\":{\"right\":[\"thin\",\"#000\"]}},{},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"color\":\"#000100\",\"align\":\"right\"},{\"font\":{\"size\":12,\"name\":\"Lato\",\"bold\":true},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"align\":\"right\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"center\",\"underline\":false,\"font\":{\"size\":12,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":12}},{\"align\":\"center\",\"font\":{\"bold\":false}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":12}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":12},\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"valign\":\"top\"},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"align\":\"right\",\"color\":\"#000100\",\"valign\":\"bottom\"},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":14},\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"font\":{\"name\":\"Lato\",\"size\":14},\"color\":\"#000100\"},{\"align\":\"left\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\"},{\"font\":{\"size\":14},\"align\":\"center\",\"border\":{\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"]},\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"name\":\"Lato\",\"size\":14},\"color\":\"#000100\"},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\"},{\"align\":\"left\",\"valign\":\"top\",\"font\":{\"size\":14}},{\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":16,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"align\":\"right\",\"color\":\"#000100\",\"valign\":\"bottom\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":14},\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\"},{\"border\":{\"right\":[\"thick\",\"#000\"]},\"font\":{\"size\":14}},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"name\":\"Lato\",\"size\":14},\"color\":\"#000100\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"border\":{\"bottom\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14},\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":14}},{\"font\":{\"size\":14},\"align\":\"center\"},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"center\",\"border\":{\"top\":[\"thick\",\"#000\"]}},{\"border\":{\"top\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"border\":{\"bottom\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14},\"align\":\"right\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"size\":12}},{\"font\":{\"size\":14},\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thick\",\"#000\"]},\"font\":{\"size\":12},\"align\":\"center\"},{\"align\":\"left\",\"valign\":\"middle\",\"font\":{\"size\":14}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":24}},{\"font\":{\"size\":24}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":22}},{\"font\":{\"size\":22}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":18}},{\"font\":{\"size\":18}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":18,\"bold\":true}},{\"font\":{\"size\":18,\"bold\":true}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":18,\"bold\":true},\"align\":\"center\"},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\"},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\"},{\"font\":{\"size\":14,\"bold\":true}},{\"border\":{\"top\":[\"thick\",\"#000\"]},\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\"},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\"},{\"valign\":\"bottom\"},{\"valign\":\"bottom\",\"align\":\"right\"},{\"valign\":\"bottom\",\"align\":\"right\",\"font\":{\"size\":14}},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\",\"border\":{\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"valign\":\"bottom\",\"align\":\"right\",\"font\":{\"size\":14},\"border\":{\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"left\",\"font\":{\"size\":14,\"bold\":false,\"name\":\"Lato\"},\"color\":\"#000100\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":14},\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":14},\"align\":\"center\",\"border\":{\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\",\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14},\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"valign\":\"bottom\",\"align\":\"right\",\"font\":{\"size\":14},\"border\":{\"left\":[\"thick\",\"#000\"],\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":14},\"align\":\"center\",\"border\":{\"right\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\",\"border\":{\"top\":[\"thick\",\"#000\"],\"left\":[\"thick\",\"#000\"]}},{\"valign\":\"bottom\",\"align\":\"right\",\"font\":{\"size\":14},\"border\":{\"left\":[\"thick\",\"#000\"]}},{\"font\":{\"size\":18,\"bold\":false},\"align\":\"center\",\"valign\":\"bottom\",\"border\":{\"top\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":true,\"size\":14},\"border\":{\"left\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]}},{\"valign\":\"bottom\",\"align\":\"right\",\"font\":{\"size\":14},\"border\":{\"left\":[\"medium\",\"#000\"]}},{\"border\":{\"right\":[\"medium\",\"#000\"]}},{\"border\":{\"left\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"left\":[\"medium\",\"#000\"]}},{\"font\":{\"size\":12,\"name\":\"Lato\"},\"color\":\"#000100\",\"align\":\"right\",\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"font\":{\"size\":12},\"align\":\"center\",\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"border\":{\"bottom\":[\"medium\",\"#000\"],\"right\":[\"medium\",\"#000\"]}},{\"align\":\"center\",\"font\":{\"bold\":false,\"size\":14},\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"font\":{\"size\":12},\"align\":\"right\",\"border\":{\"bottom\":[\"medium\",\"#000\"]}},{\"font\":{\"size\":12},\"align\":\"right\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":46},\"1\":{\"width\":38},\"2\":{\"width\":27},\"3\":{\"width\":6},\"4\":{\"width\":87},\"5\":{\"width\":51},\"6\":{\"width\":68},\"7\":{\"width\":1},\"8\":{\"width\":78},\"9\":{\"width\":163},\"10\":{\"width\":1},\"11\":{\"width\":60},\"12\":{\"width\":45},\"13\":{\"width\":49},\"14\":{\"width\":34},\"len\":31},\"merges\":[\"D8:E8\",\"C6:D6\",\"C10:I10\",\"G8:H8\",\"C9:J9\",\"C1:L1\",\"K10:L15\",\"C13:I13\",\"C14:H14\",\"F7:I7\",\"G12:I12\",\"G16:M16\",\"B4:N4\",\"C5:N5\",\"E6:N6\",\"J7:N7\",\"C7:E7\",\"K9:N9\",\"B2:O2\",\"B3:O3\",\"J8:N8\"],\"imgList\":[{\"row\":13,\"col\":9,\"width\":\"168\",\"height\":\"158\",\"src\":\"https://static.jero.com/designreport/images/QQ截图20210105214919_1610075317075.png\",\"layer_id\":\"XefZfpEcdS3wI6Ae\",\"offsetX\":0,\"offsetY\":0,\"virtualCellRange\":[[13,9],[13,10],[13,11]]}]}', '', 'https://static.jero.com/designreport/images/逮捕令_1607070625878.png', 'jero', '2020-07-10 13:38:40', 'admin', '2021-01-13 14:12:28', 0, NULL, NULL, 1, 2488); +INSERT INTO `jimu_report` VALUES ('f6ee801e8bdc28ba9d63f95dc65ccd79', '4556633', '采购单', '', NULL, 'printinfo', '{\"area\":false,\"printElWidth\":696,\"excel_config_id\":\"f6ee801e8bdc28ba9d63f95dc65ccd79\",\"printElHeight\":1147,\"rows\":{\"0\":{\"cells\":{\"0\":{\"style\":13},\"1\":{\"text\":\"采购单\",\"style\":21,\"merge\":[0,6]},\"2\":{\"style\":22},\"3\":{\"style\":22},\"4\":{\"style\":22},\"5\":{\"style\":22},\"6\":{\"style\":22},\"7\":{\"style\":22},\"8\":{\"style\":13}},\"height\":89},\"1\":{\"cells\":{\"0\":{\"style\":13},\"1\":{\"text\":\"产品名称\",\"style\":23},\"2\":{\"text\":\"产品数量\",\"style\":23},\"3\":{\"text\":\"单价\",\"style\":23},\"4\":{\"text\":\"库存量\",\"style\":23},\"5\":{\"text\":\"库存总值\",\"style\":23},\"6\":{\"text\":\"订购量\",\"style\":23},\"7\":{\"text\":\"二次订购量\",\"style\":23},\"8\":{\"style\":13}},\"height\":45},\"2\":{\"cells\":{\"0\":{\"style\":13},\"1\":{\"style\":24,\"text\":\"#{caigou.cname}\"},\"2\":{\"style\":24,\"text\":\"#{caigou.cnum}\"},\"3\":{\"style\":24,\"text\":\"#{caigou.cprice}\"},\"4\":{\"style\":24,\"text\":\"#{caigou.ctotal}\"},\"5\":{\"style\":24,\"text\":\"#{caigou.tp}\"},\"6\":{\"style\":24,\"text\":\"#{caigou.dtotal}\"},\"7\":{\"style\":24,\"text\":\"#{caigou.ztotal}\"},\"8\":{\"style\":13}},\"height\":26},\"5\":{\"cells\":{\"1\":{\"text\":\"\"}},\"isDrag\":true},\"6\":{\"cells\":{\"1\":{\"text\":\"\"}},\"isDrag\":true},\"7\":{\"cells\":{\"1\":{\"text\":\"\"},\"2\":{\"text\":\"\"}},\"isDrag\":true},\"len\":100},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":670,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"align\":\"center\"},{\"align\":\"center\",\"color\":\"#000100\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]}},{\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#01b0f1\"],\"top\":[\"thin\",\"#01b0f1\"],\"left\":[\"thin\",\"#01b0f1\"],\"right\":[\"thin\",\"#01b0f1\"]},\"bgcolor\":\"#01b0f1\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#01b0f1\"},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]}},{\"align\":\"center\",\"font\":{\"size\":18}},{\"align\":\"center\",\"font\":{\"size\":18,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"center\"},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#9cc2e6\"},{\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#5b9cd6\"],\"top\":[\"thin\",\"#5b9cd6\"],\"left\":[\"thin\",\"#5b9cd6\"],\"right\":[\"thin\",\"#5b9cd6\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#9cc2e6\",\"font\":{\"name\":\"宋体\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#000100\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#5b9cd6\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#5b9cd6\",\"font\":{\"name\":\"宋体\"}},{\"align\":\"center\",\"font\":{\"size\":16,\"bold\":true,\"name\":\"Microsoft YaHei\"}},{\"font\":{\"name\":\"Microsoft YaHei\"}},{\"align\":\"center\",\"color\":\"#ffffff\",\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"bgcolor\":\"#5b9cd6\",\"font\":{\"name\":\"Microsoft YaHei\"}},{\"border\":{\"bottom\":[\"thin\",\"#bfbfbf\"],\"top\":[\"thin\",\"#bfbfbf\"],\"left\":[\"thin\",\"#bfbfbf\"],\"right\":[\"thin\",\"#bfbfbf\"]},\"align\":\"center\",\"font\":{\"name\":\"Microsoft YaHei\"}}],\"validations\":[],\"cols\":{\"0\":{\"width\":31},\"1\":{\"width\":114},\"2\":{\"width\":109},\"3\":{\"width\":78},\"4\":{\"width\":77},\"5\":{\"width\":84},\"6\":{\"width\":82},\"7\":{\"width\":95},\"len\":26},\"merges\":[\"B1:H1\"]}', '', 'https://static.jero.com/designreport/images/caigou_1607310279439.png', 'jero', '2020-07-28 16:54:44', 'admin', '2021-01-13 14:12:46', 0, NULL, NULL, 1, 1237); +INSERT INTO `jimu_report` VALUES ('ff9bd143582a6dfed897ba8b6f93b175', '56696', '销售公司出库单', '', NULL, 'printinfo', '{\"area\":{\"sri\":4,\"sci\":0,\"eri\":4,\"eci\":0,\"width\":32,\"height\":25},\"printElWidth\":794,\"excel_config_id\":\"ff9bd143582a6dfed897ba8b6f93b175\",\"printElHeight\":800,\"rows\":{\"0\":{\"cells\":{\"0\":{\"style\":11,\"text\":\"医疗器械销售公司出货单\",\"merge\":[0,9]}},\"height\":83},\"1\":{\"cells\":{\"0\":{\"text\":\"供货单位:\",\"style\":20,\"merge\":[0,1]},\"1\":{\"style\":30},\"2\":{\"text\":\"${gongsi.gname}\",\"style\":19},\"3\":{\"style\":19},\"4\":{\"text\":\"供货日期:\",\"style\":19},\"5\":{\"text\":\"${gongsi.gdata}\",\"style\":19,\"merge\":[0,1]},\"6\":{\"style\":19},\"7\":{\"text\":\"编号:\",\"style\":20},\"8\":{\"text\":\"${gongsi.num}\",\"style\":19,\"merge\":[0,1]},\"9\":{\"style\":19}},\"isDrag\":true},\"2\":{\"cells\":{\"0\":{\"text\":\"行号\",\"style\":39},\"1\":{\"text\":\"产品代码\",\"style\":39},\"2\":{\"text\":\"产品名称\",\"style\":39},\"3\":{\"text\":\"规格型号\",\"style\":39},\"4\":{\"text\":\"单位\",\"style\":39},\"5\":{\"text\":\"实发数量\",\"style\":39},\"6\":{\"text\":\"销售单价(元)\",\"style\":39},\"7\":{\"text\":\"折扣率(%)\",\"style\":39},\"8\":{\"text\":\"销售金额(元)\",\"style\":39},\"9\":{\"text\":\"备注\",\"style\":39}}},\"3\":{\"cells\":{\"0\":{\"style\":35,\"text\":\"#{xiaoshou.id}\"},\"1\":{\"style\":35,\"text\":\"#{xiaoshou.hnum}\"},\"2\":{\"style\":35,\"text\":\"#{xiaoshou.hname}\"},\"3\":{\"style\":35,\"text\":\"#{xiaoshou.xinghao}\"},\"4\":{\"style\":35,\"text\":\"#{xiaoshou.danwei}\"},\"5\":{\"style\":35,\"text\":\"#{xiaoshou.num}\"},\"6\":{\"style\":35,\"text\":\"#{xiaoshou.danjia}\"},\"7\":{\"style\":35,\"text\":\"#{xiaoshou.zhekoulv}\"},\"8\":{\"style\":35,\"text\":\"#{xiaoshou.xiaoshoujine}\"},\"9\":{\"style\":35,\"text\":\"#{xiaoshou.xiaoshoujine}\"}}},\"4\":{\"cells\":{\"0\":{\"style\":4},\"1\":{}},\"isDrag\":true},\"len\":84,\"-1\":{\"cells\":{\"0\":{\"text\":\"#{gongsi.gdata}\"},\"-1\":{\"text\":\"#{gongsi.didian}\"}},\"isDrag\":true}},\"dbexps\":[],\"toolPrintSizeObj\":{\"printType\":\"A4\",\"widthPx\":794,\"heightPx\":1047},\"dicts\":[],\"freeze\":\"A1\",\"dataRectWidth\":794,\"background\":false,\"name\":\"sheet1\",\"autofilter\":{},\"styles\":[{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\"},{\"font\":{\"size\":16}},{\"font\":{\"size\":16},\"align\":\"center\"},{\"align\":\"center\"},{\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"]}},{\"border\":{\"top\":[\"thin\",\"#000\"],\"bottom\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]}},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"right\"},{\"align\":\"right\"},{\"align\":\"center\",\"font\":{\"size\":14}},{\"align\":\"center\",\"font\":{\"size\":14,\"bold\":true}},{\"align\":\"center\",\"font\":{\"size\":9}},{\"font\":{\"size\":9}},{\"align\":\"right\",\"font\":{\"size\":9}},{\"align\":\"center\",\"font\":{\"size\":8}},{\"font\":{\"size\":8}},{\"align\":\"right\",\"font\":{\"size\":8}},{\"align\":\"center\",\"font\":{\"size\":8},\"color\":\"#7f7f7f\"},{\"font\":{\"size\":8},\"color\":\"#7f7f7f\"},{\"align\":\"right\",\"font\":{\"size\":8},\"color\":\"#7f7f7f\"},{\"align\":\"center\",\"font\":{\"size\":8},\"color\":\"#3f3f3f\"},{\"font\":{\"size\":8},\"color\":\"#3f3f3f\"},{\"align\":\"right\",\"font\":{\"size\":8},\"color\":\"#3f3f3f\"},{\"align\":\"center\",\"font\":{\"size\":8},\"color\":\"#262626\"},{\"font\":{\"size\":8},\"color\":\"#262626\"},{\"align\":\"right\",\"font\":{\"size\":8},\"color\":\"#262626\"},{\"align\":\"center\",\"font\":{\"size\":8},\"color\":\"#0c0c0c\"},{\"font\":{\"size\":8},\"color\":\"#0c0c0c\"},{\"align\":\"right\",\"font\":{\"size\":8},\"color\":\"#0c0c0c\"},{\"align\":\"right\",\"color\":\"#7f7f7f\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"align\":\"center\",\"bgcolor\":\"#71ae47\"},{\"border\":{\"bottom\":[\"thin\",\"#000\"],\"top\":[\"thin\",\"#000\"],\"left\":[\"thin\",\"#000\"],\"right\":[\"thin\",\"#000\"]},\"bgcolor\":\"#71ae47\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"align\":\"center\",\"bgcolor\":\"#71ae47\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"bgcolor\":\"#71ae47\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"align\":\"center\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]}},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"align\":\"center\",\"bgcolor\":\"#c5e0b3\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"bgcolor\":\"#c5e0b3\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"align\":\"center\",\"bgcolor\":\"#a7d08c\"},{\"border\":{\"bottom\":[\"thin\",\"#538136\"],\"top\":[\"thin\",\"#538136\"],\"left\":[\"thin\",\"#538136\"],\"right\":[\"thin\",\"#538136\"]},\"bgcolor\":\"#a7d08c\"}],\"validations\":[],\"cols\":{\"0\":{\"width\":32},\"1\":{\"width\":65},\"2\":{\"width\":115},\"3\":{\"width\":70},\"4\":{\"width\":52},\"5\":{\"width\":70},\"6\":{\"width\":93},\"7\":{\"width\":86},\"8\":{\"width\":75},\"9\":{\"width\":136},\"10\":{\"width\":81},\"len\":24},\"merges\":[\"F2:G2\",\"F2:G2\",\"I2:J2\",\"A2:B2\",\"C2:D2\",\"A2:B2\",\"A1:J1\"]}', '', 'https://static.jero.com/designreport/images/医疗器械_1607070355110.png', 'jero', '2020-06-16 11:54:02', 'admin', '2021-01-13 14:14:03', 0, NULL, NULL, 1, 762); + +-- ---------------------------- +-- Table structure for jimu_report_data_source +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report_data_source`; +CREATE TABLE `jimu_report_data_source` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据源名称', + `report_id` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '报表_id', + `code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编码', + `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + `db_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据库类型', + `db_driver` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '驱动类', + `db_url` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '数据源地址', + `db_username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用户名', + `db_password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '密码', + `create_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '更新人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_jmdatasource_report_id`(`report_id`) USING BTREE, + INDEX `idx_jmdatasource_code`(`code`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report_data_source +-- ---------------------------- +INSERT INTO `jimu_report_data_source` VALUES ('1324261983692902402', 'jeewx', '1324261770294071296', '', NULL, 'MYSQL', 'com.mysql.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jeewx-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'jero', '2020-11-05 16:07:15', NULL, '2020-11-05 16:07:15'); +INSERT INTO `jimu_report_data_source` VALUES ('8f90daf47d15d35ca6cf420748b8b9ba', 'localhost', '1316944968992034816', '', NULL, 'MYSQL5.7', 'com.mysql.cj.jdbc.Driver', 'jdbc:mysql://127.0.0.1:3306/jero-boot?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8', 'root', 'root', 'admin', '2021-01-13 14:34:00', NULL, '2021-01-13 14:34:00'); + +-- ---------------------------- +-- Table structure for jimu_report_db +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report_db`; +CREATE TABLE `jimu_report_db` ( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id', + `jimu_report_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主键字段', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `db_code` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据集编码', + `db_ch_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据集名字', + `db_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据源类型', + `db_table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库表名', + `db_dyn_sql` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '动态查询SQL', + `db_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据源KEY', + `tb_db_key` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '填报数据源', + `tb_db_table_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '填报数据表', + `java_type` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'java类数据集 类型(spring:springkey,class:java类名)', + `java_value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'java类数据源 数值(bean key/java类名)', + `api_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求地址', + `api_method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '请求方法0-get,1-post', + `is_list` int(3) NULL DEFAULT 0 COMMENT '是否是列表0否1是 默认0', + `is_page` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '是否作为分页,0:不分页,1:分页', + `db_source` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据源', + `db_source_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据库类型 MYSQL ORACLE SQLSERVER', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_jmreportdb_db_key`(`db_key`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report_db +-- ---------------------------- +INSERT INTO `jimu_report_db` VALUES ('1272834687525482497', '53c82a76f837d5661dceec7d93afafec', 'admin', NULL, '2021-01-04 20:42:17', '2021-01-04 20:42:17', 'jianpiao', 'jianpiao', '0', NULL, 'select * from rep_demo_jianpiao where s_id=\'${id}\'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '1', NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1272858455908073473', 'ff9bd143582a6dfed897ba8b6f93b175', 'admin', NULL, '2020-12-14 16:21:09', '2020-12-14 16:21:09', 'xiaoshou', 'xiaoshou', '0', NULL, 'select * from rep_demo_xiaoshou where s_id=\'${id}\'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '1', NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1273495682564534273', 'ff9bd143582a6dfed897ba8b6f93b175', 'admin', NULL, '2020-09-28 10:18:07', '2020-12-14 16:21:09', 'gongsi', 'gongsi', '0', NULL, 'select * from rep_demo_gongsi where id=\'${id}\'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1282993618201612289', '7c02c224a2db56d0350069650033f702', 'admin', NULL, '2021-01-08 16:30:03', '2021-01-08 16:30:03', 'huizong1', 'huizong1', '0', NULL, 'select * from rep_demo_huizong', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '0', NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1283730831482937345', '6059e405dd9c66a6d38e00841d2e40cc', 'admin', NULL, '2020-12-04 16:53:38', '2020-12-04 16:53:38', 'yaopin', 'yaopin', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/chufangjian', '0', 0, '0', NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1283957016150249473', '6059e405dd9c66a6d38e00841d2e40cc', NULL, NULL, '2020-07-17 10:49:42', NULL, 'yonghu', 'yonghu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/yonghu', '0', 0, NULL, NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1284070508744257537', 'a250846887abe01217aab173d3006489', NULL, NULL, '2020-07-17 15:33:53', '2020-07-20 17:50:49', 'budong', 'budong', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/budongchan', '0', 0, NULL, NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1285157606524002305', 'a9f068972508920cd4aab831814f0c04', NULL, NULL, '2020-07-20 18:20:25', '2020-07-20 18:28:22', 'pdaibu', 'pdaibu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/daibu', '0', 0, NULL, NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1285164420728692737', '7905022412733a0c68dc7b4ef8947489', NULL, NULL, '2020-07-20 18:47:30', NULL, 'jieshaoxin', 'jieshaoxin', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/jieshaoxin', '0', 0, NULL, NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1285178919099637762', '6d6bdcb5e820c301ea32789e3ae43c44', NULL, NULL, '2020-07-20 19:45:06', NULL, 'qiangxiu', 'qiangxiu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/qiangxiu', '0', 0, NULL, NULL, 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1288038655293661186', 'f6ee801e8bdc28ba9d63f95dc65ccd79', 'admin', NULL, '2021-01-05 15:10:29', '2021-01-05 15:10:29', 'caigou', 'caigou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/caigou?pageNo=\'${pageNo}\'&pageSize=\'${pageSize}\'', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1289140698221678593', '519c1c6f4d1f584ae8fa5b43b45acdc7', 'admin', NULL, '2021-01-11 14:25:45', '2021-01-11 14:25:45', 'xiaoshou', 'xiaoshou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/xiaoshou?pageNo=\'${pageNo}\'&pageSize=\'${pageSize}\'', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1290104038414721025', '53c82a76f837d5661dceec7d93afafec', 'admin', NULL, '2021-01-04 20:47:07', '2021-01-04 20:47:07', 'gongsi', 'gongsi', '0', NULL, 'select * from rep_demo_gongsi where id=\'${id}\'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1316987047604514817', '1314846205892759552', 'admin', NULL, '2021-01-08 10:36:58', '2021-01-08 10:36:58', 'yuangongjiben', 'yuangongjiben', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/yuangongjiben', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1316997232402231298', '1316944968992034816', 'admin', NULL, '2021-01-13 14:34:06', '2021-01-13 14:34:06', 'employee', 'employee', '0', NULL, 'select * from rep_demo_employee where id=\'${id}\'', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '0', '', ''); +INSERT INTO `jimu_report_db` VALUES ('1317006713165049858', '1314846205892759552', 'admin', NULL, '2021-01-11 14:38:14', '2021-01-11 14:38:14', 'xueli', 'xueli', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/xueli', '0', 1, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1317007979484147714', '1314846205892759552', 'admin', NULL, '2021-01-08 10:40:31', '2021-01-08 10:40:31', 'uu', 'uu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/gongzuojingli', '0', 1, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1317009166140829698', '1314846205892759552', 'admin', NULL, '2020-10-16 15:47:09', '2021-01-05 15:33:58', 'zhengshu', 'zhengshu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhengshu', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1317013474634756097', '1314846205892759552', 'admin', NULL, '2020-10-16 16:04:16', '2021-01-05 15:33:58', 'jtcy', 'jtcy', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/jtcy', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1317015169494282241', '1314846205892759552', 'admin', NULL, '2020-10-16 16:11:00', '2021-01-05 15:33:58', 'jiangli', 'jiangli', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/jiangli', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331447376279285762', '1331429368098066432', 'admin', NULL, '2020-11-25 11:59:26', '2020-11-25 11:59:26', 'jihua', 'jihua', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/jihua', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331474698436915202', '1331429368098066432', 'admin', NULL, '2020-11-25 14:07:27', '2020-11-25 14:07:27', 'rishengchan', 'rishengchan', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/rishengchan1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331483873661464578', '1331429368098066432', 'admin', NULL, '2020-11-25 14:24:28', '2020-11-25 14:24:28', 'wanchenglv', 'wanchenglv', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/wanchenglv', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331486475245629441', '1331429368098066432', 'admin', NULL, '2020-11-25 14:34:48', '2020-11-25 14:34:48', 'kaigong', 'kaigong', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/kaigong', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331491194517106690', '1331429368098066432', 'admin', NULL, '2020-11-25 14:56:36', '2020-11-25 14:56:36', 'bing1', 'bing1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bing1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331493951013695490', '1331429368098066432', 'admin', NULL, '2020-11-25 15:04:31', '2020-11-25 15:04:31', 'bing2', 'bing2', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bing2', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331511745851731969', '1331503965770223616', 'admin', NULL, '2020-11-25 16:15:13', '2020-11-25 16:15:13', 'chengjiao', 'chengjiao', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/chengjiao', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331514838211407873', '1331503965770223616', 'admin', NULL, '2020-11-25 16:27:30', '2020-11-25 16:27:30', 'cjpaihang', 'cjpaihang', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/cjpaihang', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331514935028527106', '1331503965770223616', 'admin', NULL, '2020-11-25 16:27:54', '2020-11-25 16:27:54', 'cjjine', 'cjjine', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/cjjine', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331872643531526146', '1331503965770223616', 'admin', NULL, '2020-11-26 16:09:18', '2020-11-26 16:09:18', 'chengjiao1', 'chengjiao1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/chengjiao1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331878107552010242', '1331503965770223616', 'admin', NULL, '2020-11-26 16:31:01', '2020-11-26 16:31:01', 'zhuangxiu', 'zhuangxiu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhuangxiu', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331916030221602818', '1331503965770223616', 'admin', NULL, '2020-11-26 19:01:42', '2020-11-26 19:01:42', 'btchanquan', 'btchanquan', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/btchanquan', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331919172472524801', '1331503965770223616', 'admin', NULL, '2020-11-26 19:14:11', '2020-11-26 19:14:11', 'huxingxiaoshou', 'huxingxiaoshou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/huxingxiaoshou', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331922734933987329', '1331503965770223616', 'admin', NULL, '2020-11-26 19:28:21', '2020-11-26 19:28:21', 'fangyuan', 'fangyuan', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/fangyuan', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1331926127597441025', '1331503965770223616', 'admin', NULL, '2020-11-26 19:41:49', '2020-11-26 19:41:49', 'qingkuang', 'qingkuang', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/qingkuang', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1333968597264900097', '1333962561053396992', 'admin', NULL, '2020-12-02 11:07:04', '2020-12-02 13:56:00', 'mianji', 'mianji', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/mianji', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1333974073679552514', '1333962561053396992', 'admin', NULL, '2020-12-02 11:19:38', '2020-12-02 13:56:00', 'danjia', 'danjia', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/danjia', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1333977108195581953', '1333962561053396992', 'admin', NULL, '2020-12-02 11:31:41', '2020-12-02 13:56:00', 'junjia', 'junjia', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/junjia', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1333980382663548929', '1333962561053396992', 'admin', NULL, '2020-12-02 11:47:12', '2020-12-02 13:56:00', 'churang', 'churang', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/churang', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1333983587241828354', '1333962561053396992', 'admin', NULL, '2020-12-02 11:57:26', '2020-12-02 13:56:00', 'xinzhuzhai', 'xinzhuzhai', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/xinzhuzhai', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334008609356390402', '1333962561053396992', 'admin', NULL, '2020-12-02 13:36:52', '2020-12-02 13:56:00', 'churang1', 'churang1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/churang1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334013423209422849', '1333962561053396992', 'admin', NULL, '2020-12-02 13:56:00', '2020-12-02 13:56:00', 'zhuzhaichengjiao', 'zhuzhaichengjiao', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhuzhaichengjiao', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334037720053325825', '1334028738995818496', 'admin', NULL, '2020-12-02 15:32:32', '2020-12-02 17:37:33', 'bingtu1', 'bingtu1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334039611344691202', '1334028738995818496', 'admin', NULL, '2020-12-02 15:40:03', '2020-12-02 17:37:33', 'bingtu2', 'bingtu2', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu2', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334043138246844418', '1334028738995818496', 'admin', NULL, '2020-12-02 15:54:04', '2020-12-02 17:37:33', 'zhexian1', 'zhexian1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhexian1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334049545562103810', '1334028738995818496', 'admin', NULL, '2020-12-02 16:19:32', '2020-12-02 17:37:33', 'zhexian2', 'zhexian2', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhexian2', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334052375119273986', '1334028738995818496', 'admin', NULL, '2020-12-02 16:30:46', '2020-12-02 17:37:33', 'zhuxingtu1', 'zhuxingtu1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhuxingtu1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334058269181747202', '1334028738995818496', 'admin', NULL, '2020-12-02 16:54:12', '2020-12-02 17:37:33', 'bingtu3', 'bingtu3', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu3', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334060474135748610', '1334028738995818496', 'admin', NULL, '2020-12-02 17:02:57', '2020-12-02 17:37:33', 'bingtu4', 'bingtu4', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu4', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334063192933933058', '1334028738995818496', 'admin', NULL, '2020-12-02 17:13:46', '2020-12-02 17:37:33', 'bingtu5', 'bingtu5', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu5', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334063880162254850', '1334028738995818496', 'admin', NULL, '2020-12-02 17:16:29', '2020-12-02 17:37:33', 'bingtu6', 'bingtu6', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/bingtu6', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334068361943851009', '1334028738995818496', 'admin', NULL, '2020-12-02 17:37:33', '2020-12-02 17:37:33', 'biaoge', 'biaoge', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/biaoge', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334083843610648578', '1334074491629867008', 'admin', NULL, '2020-12-02 18:35:49', '2020-12-02 18:35:49', 'wunian', 'wunian', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/wunian', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334107015605133314', '1334074491629867008', 'admin', NULL, '2020-12-02 20:07:54', '2020-12-02 20:07:54', 'table2', 'table2', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/table2', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334390762455965697', '1334378897302753280', 'admin', NULL, '2021-01-06 11:43:35', '2021-01-06 11:43:35', 'quyuxiaoshou', 'quyuxiaoshou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/quyuxiaoshou', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334440263732436994', '1334420681185566722', 'admin', NULL, '2021-01-04 21:28:19', '2021-01-04 21:28:19', 'laiyuan', 'laiyuan', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/laiyuan', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334465135435063298', '1334457419857793024', 'admin', NULL, '2021-01-04 21:29:28', '2021-01-04 21:29:28', 'xiaoshou', 'xiaoshou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/xiaoshou', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334708015269490689', '1334696790477377536', 'admin', NULL, '2021-01-04 21:30:29', '2021-01-04 21:30:29', 'shouru', 'shouru', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/shouru', '0', 1, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1334763434197200897', '1334757703079301120', 'admin', NULL, '2020-12-04 15:40:31', '2020-12-04 15:40:31', 'chejian', 'chejian', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/chejian', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1335886666363158530', '1334028738995818496', 'admin', NULL, '2020-12-07 17:59:35', '2020-12-07 17:59:35', 'sandian', 'sandian', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/sandian', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1335889985047478274', '1334028738995818496', 'admin', NULL, '2020-12-07 18:12:47', '2020-12-07 18:12:47', 'loudou', 'loudou', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/loudou', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1335901385547431937', '1333962561053396992', 'admin', NULL, '2020-12-14 17:16:28', '2020-12-14 17:16:28', 'ditu', 'ditu', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/ditu', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1335909918854725633', '1334074491629867008', 'admin', NULL, '2020-12-07 19:31:59', '2020-12-07 19:31:59', 'ditu1', 'ditu1', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/ditu1', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1337360015912087554', '1337271712059887616', 'admin', NULL, '2020-12-11 19:37:56', '2020-12-15 13:54:34', 'pp', 'pp', '0', NULL, 'select * from yanshi_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338457100451328002', '1337271712059887616', 'admin', NULL, '2020-12-15 10:13:25', '2020-12-15 13:54:34', 'laiyuan', '游客来源', '0', NULL, 'select * from laiyuan_wxtl order by value desc', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338667866760679426', '1337271712059887616', 'admin', NULL, '2020-12-15 10:12:11', '2020-12-15 13:54:34', 'fenbu1', '游客分布', '0', NULL, 'select * from fenbu_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338669749617299458', '1337271712059887616', 'admin', NULL, '2020-12-15 10:21:25', '2020-12-15 13:54:34', 'yanshi', '停留时长', '0', NULL, 'select * from yanshi_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338675446962720769', '1337271712059887616', 'admin', NULL, '2020-12-15 10:41:13', '2020-12-15 13:54:34', 'fangshi1', '出行方式1', '0', NULL, 'select * from fangshi1_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338678877395881985', '1337271712059887616', 'admin', NULL, '2020-12-15 10:54:50', '2020-12-15 13:54:34', 'laiyuan1', '游客来源1', '0', NULL, 'select * from laiyuan1_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338687259901169665', '1337271712059887616', 'admin', NULL, '2020-12-15 11:37:58', '2020-12-15 13:54:34', 'xianlu', 'xianlu', '0', NULL, 'select * from xianlu_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338687435562815489', '1337271712059887616', 'admin', NULL, '2020-12-15 11:28:51', '2020-12-15 13:54:34', 'xianlu1', 'xianlu1', '0', NULL, 'select * from xianlu1_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338720793164517378', '1337271712059887616', 'admin', NULL, '2020-12-15 13:41:24', '2020-12-15 13:54:34', 'ditu', 'ditu', '0', NULL, 'select * from ditu_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338724105821622274', '1337271712059887616', 'admin', NULL, '2020-12-15 13:54:34', '2020-12-15 13:54:34', 'qushi', 'qushi', '0', NULL, 'select * from qushi_wxtl', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '1', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338741640998686721', '1338370016550195200', 'admin', NULL, '2020-12-16 19:11:38', '2020-12-16 19:11:38', 'tiaoma', 'tiaoma', '0', NULL, 'select * from yanshi_tima', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1338756341933543425', '1338744112815411200', 'admin', NULL, '2021-01-11 14:55:01', '2021-01-11 14:55:01', 'jdcx', 'jdcx', '0', NULL, 'select * from yanshi_jdcx', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339491107951640577', '1339478701846433792', 'admin', NULL, '2020-12-17 16:42:21', '2020-12-17 19:50:14', 'xiaoshoue', '销售额', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/xiaoshoue', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1339495346077728770', '1339478701846433792', 'admin', NULL, '2020-12-17 16:59:12', '2020-12-17 19:50:14', 'chengshi', '城市', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/chengshi', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1339498906765000705', '1339478701846433792', 'admin', NULL, '2020-12-17 17:13:21', '2020-12-17 19:50:14', 'xsjd', '销售进度', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/xsjd', '0', 0, '0', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1339538388453195777', '1339478701846433792', 'admin', NULL, '2020-12-17 19:50:14', '2020-12-17 19:50:14', 'zhexian', 'zhexian', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/zhexian', '0', 1, '1', '', NULL); +INSERT INTO `jimu_report_db` VALUES ('1339870475496497153', '1339859143477039104', 'admin', NULL, '2020-12-18 17:49:50', '2020-12-18 17:49:50', 'pp', '会员数量', '0', NULL, 'select * from huiyuan_wxtlshuliang', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '1', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339873097620168705', '1339859143477039104', 'admin', NULL, '2020-12-18 18:00:15', '2020-12-18 18:00:15', 'se', '会员性别', '0', NULL, 'select * from huiyuan_sex', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339876173672390658', '1339859143477039104', 'admin', NULL, '2020-12-18 18:12:28', '2020-12-18 18:12:28', 'aa', '会员年龄', '0', NULL, 'select * from huiyuan_age', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339878700639887362', '1339859143477039104', 'admin', NULL, '2020-12-18 18:22:31', '2020-12-18 18:22:31', 'ww', '工作性质', '0', NULL, 'select * from huiyuan_work', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339884367194923010', '1339859143477039104', 'admin', NULL, '2020-12-18 18:45:02', '2020-12-18 18:45:02', 'hh', '活跃度', '0', NULL, 'select * from huiyuan_huoyuedu', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339886300563546113', '1339859143477039104', 'admin', NULL, '2020-12-18 18:52:43', '2020-12-18 18:52:43', 'xx', '会员学历', '0', NULL, 'select * from huiyuan_xueli', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('1339888452912586753', '1339859143477039104', 'admin', NULL, '2020-12-18 19:05:18', '2020-12-18 19:05:18', 'gg', '分公司', '0', NULL, 'select * from huiyuan_fengongsi', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('4af57d343f1d6521b71b85097b580786', '1347459370216198144', 'admin', NULL, '2021-01-08 17:26:57', '2021-01-08 17:26:57', 'tmp_report_data_income', '来源收入统计', '0', NULL, 'select * from tmp_report_data_income', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '1', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('7b20679054449c554cde856ef24126ab', '1347454742040809472', 'admin', NULL, '2021-01-08 16:24:16', '2021-01-08 16:24:16', 'tmp_report_data_1', '年度佣金收入', '0', NULL, 'select monty,main_income,total,his_lowest,his_average,his_highest from tmp_report_data_1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('9b7d28336b01f9a6b1a613957c3d7cda', '1338769064067076098', 'admin', NULL, '2021-01-13 14:03:36', '2021-01-13 14:03:36', 'pop', 'pop', '0', NULL, 'select * from yanshi_dxtj', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1, '0', '', 'MYSQL'); +INSERT INTO `jimu_report_db` VALUES ('f7649b77cfc9e0a9dacdac370cd4036b', '1347373863746539520', 'admin', NULL, '2021-01-08 10:47:52', '2021-01-08 10:47:52', 'tt', 'tt', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL, 'http://api.jero.com/mock/26/baobiao/shixi', '0', 0, '0', '', NULL); + +-- ---------------------------- +-- Table structure for jimu_report_db_field +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report_db_field`; +CREATE TABLE `jimu_report_db_field` ( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'id', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + `jimu_report_db_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '数据源ID', + `field_name` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段名', + `field_text` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字段文本', + `widget_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '控件类型', + `widget_width` int(10) NULL DEFAULT NULL COMMENT '控件宽度', + `order_num` int(3) NULL DEFAULT NULL COMMENT '排序', + `search_flag` int(3) NULL DEFAULT 0 COMMENT '查询标识0否1是 默认0', + `search_mode` int(3) NULL DEFAULT NULL COMMENT '查询模式1简单2范围', + `dict_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典编码支持从表中取数据', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_jrdf_jimu_report_db_id`(`jimu_report_db_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report_db_field +-- ---------------------------- +INSERT INTO `jimu_report_db_field` VALUES ('014179e260e0adf1706c616a3ad6e552', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'main_income', 'main_income', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('01cb1f61f836aae43bca333dbaf293be', NULL, '2021-01-11 14:38:14', NULL, NULL, '1317006713165049858', 'zhuanye', 'zhuanye', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('0470c07d386940053253fe8a8c200225', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'chengbao_gz_money', 'chengbao_gz_money', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('0680555456f0e579a0065c4ca5dd8d06', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('0c82931edb766ad89ead9e98a998d43f', NULL, '2021-01-11 14:38:14', NULL, NULL, '1317006713165049858', 'kdate', 'kdate', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('0fb03c8e2330e051564f3dd1de54512f', NULL, '2021-01-11 14:38:14', NULL, NULL, '1317006713165049858', 'jstudent', 'jstudent', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('10e61155dcf655d7843ebc01cc90c8b1', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'total', 'total', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('115c1ac01462ca1fbecb3c0a55218395', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'his_highest', 'his_highest', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('11aa0711d51babb3985fe23660a120ec', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'address', 'address', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907562864641', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'id', 'id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907567058946', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'bnum', 'bnum', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253250', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'ftime', 'ftime', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253251', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'sfkong', 'sfkong', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253252', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'kaishi', 'kaishi', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253253', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'jieshu', 'jieshu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253254', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'hezairen', 'hezairen', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907571253255', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'jpnum', 'jpnum', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1272834907575447554', NULL, '2020-06-16 18:14:25', NULL, NULL, '1272834687525482497', 'shihelv', 'shihelv', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618340024321', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'id', 'id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618352607233', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'cname', 'cname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618356801538', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'hname', 'hname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618356801539', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'num', 'num', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618356801540', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'jtotal', 'jtotal', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618360995842', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'jaddress', 'jaddress', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618365190145', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'snum', 'snum', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618369384449', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'hushu', 'hushu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618369384450', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'renkou', 'renkou', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618369384451', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'money', 'money', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618369384452', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'shouru', 'shouru', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618373578754', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'bkey', 'bkey', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618373578755', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'brenkou', 'brenkou', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618373578756', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'cbuzhu', 'cbuzhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618373578757', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'qbuzhu', 'qbuzhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618377773058', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'zbuzhu', 'zbuzhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618381967361', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'hbuzhu', 'hbuzhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618381967362', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'sxinzeng', 'sxinzeng', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618381967363', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'schaobiao', 'schaobiao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618386161665', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'jchaobiao', 'jchaobiao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618386161666', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'die', 'die', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1282993618386161667', NULL, '2020-07-14 19:01:30', NULL, NULL, '1282993618201612289', 'qita', 'qita', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016175415297', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yphone', 'yphone', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016183803906', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yzhenliao', 'yzhenliao', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016187998209', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'ysex', 'ysex', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016192192513', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'danwei', 'danwei', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016196386818', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'kdata', 'kdata', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016204775425', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yname', 'yname', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016208969729', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yprice', 'yprice', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016213164033', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'ytotal', 'ytotal', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016217358337', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yishe', 'yishe', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016221552641', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yizhu', 'yizhu', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016225746946', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yage', 'yage', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1283957016229941249', NULL, '2020-07-17 10:49:42', NULL, NULL, '1283957016150249473', 'yjieguo', 'yjieguo', NULL, NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155649130497', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'xtype', 'xtype', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155686879234', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'danyuan', 'danyuan', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155691073538', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'chanquan', 'chanquan', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155695267841', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'zhuzhi', 'zhuzhi', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155699462145', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'fujian', 'fujian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155707850754', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'didian', 'didian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155707850755', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'type', 'type', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155712045058', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'suoyou', 'suoyou', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155716239361', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'name', 'name', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155716239362', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'bianhao', 'bianhao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155720433666', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'yname', 'yname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155720433667', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'riqi', 'riqi', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155724627969', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'beizhu', 'beizhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155728822274', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'time', 'time', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285150155728822275', NULL, '2020-07-20 17:50:49', NULL, NULL, '1284070508744257537', 'mianji', 'mianji', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608326889474', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'fsex', 'fsex', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608335278082', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'fname', 'fname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608339472385', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'shiqing', 'shiqing', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608339472386', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'pname', 'pname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608339472387', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'zhuzhi', 'zhuzhi', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608339472388', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'gdata', 'gdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285159608343666690', NULL, '2020-07-20 18:28:22', NULL, NULL, '1285157606524002305', 'cdata', 'cdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420749664258', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'shiqing', 'shiqing', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420753858561', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'name', 'name', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420758052866', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'gdata', 'gdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420758052867', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'value', 'value', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420758052868', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'percent', 'percent', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285164420762247169', NULL, '2020-07-20 18:47:30', NULL, NULL, '1285164420728692737', 'tdata', 'tdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919124803585', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'ktime', 'ktime', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919133192193', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'danwei', 'danwei', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919133192194', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'wtime', 'wtime', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919133192195', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'yusuan', 'yusuan', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919133192196', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'dshenhe', 'dshenhe', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919133192197', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'zhuren', 'zhuren', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919137386498', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'neirong', 'neirong', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919137386499', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'yijian', 'yijian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919137386500', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'time1', 'time1', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919137386501', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'time2', 'time2', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919137386502', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'time3', 'time3', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919141580801', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'time4', 'time4', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919141580802', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'pingjia', 'pingjia', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919141580803', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'name', 'name', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919141580804', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'bianhao', 'bianhao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919141580805', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'zongjie', 'zongjie', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919145775105', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'nengli', 'nengli', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285178919145775106', NULL, '2020-07-20 19:45:06', NULL, NULL, '1285178919099637762', 'time', 'time', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875810967553', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'id', 'id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875823550466', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'gname', 'gname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875823550467', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'gdata', 'gdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875823550468', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'tdata', 'tdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875827744769', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'didian', 'didian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875827744770', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'zhaiyao', 'zhaiyao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1285473875827744771', NULL, '2020-07-21 15:17:10', NULL, NULL, '1273495682564534273', 'num', 'num', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655394324482', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'ctotal', '库存量', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655402713090', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'cname', '产品名称', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655406907393', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'cprice', '单价', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655411101697', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'dtotal', '订购量', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655411101698', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'tp', '库存总值', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655415296002', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'ztotal', '二次订购量', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288038655415296003', NULL, '2020-07-28 17:08:41', NULL, NULL, '1288038655293661186', 'cnum', '产品数量', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290843074561', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'id', 'id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290847268865', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'hnum', 'hnum', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463170', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'hname', 'hname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463171', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'xinghao', 'xinghao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463172', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'fahuocangku', 'fahuocangku', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463173', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'danwei', 'danwei', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463174', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'num', 'num', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463175', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'danjia', 'danjia', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290851463176', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'zhekoulv', 'zhekoulv', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290855657473', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'xiaoshoujine', 'xiaoshoujine', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290859851778', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 'beizhu', 'beizhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1288048290859851779', NULL, '2020-07-28 17:46:58', NULL, NULL, '1272858455908073473', 's_id', 's_id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038439886849', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'id', 'id', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038448275458', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'gname', 'gname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038448275459', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'gdata', 'gdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038448275460', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'tdata', 'tdata', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038452469761', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'didian', 'didian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038452469762', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'zhaiyao', 'zhaiyao', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1290104038452469763', NULL, '2020-08-03 09:55:46', NULL, NULL, '1290104038414721025', 'num', 'num', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317007979534479361', NULL, '2020-10-16 15:42:26', NULL, NULL, '1317007979484147714', 'zmphone', 'zmphone', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317007979534479362', NULL, '2020-10-16 15:42:26', NULL, NULL, '1317007979484147714', 'jstudent', 'jstudent', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317007979534479363', NULL, '2020-10-16 15:42:26', NULL, NULL, '1317007979484147714', 'kdate', 'kdate', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317007979534479364', NULL, '2020-10-16 15:42:26', NULL, NULL, '1317007979484147714', 'jdate', 'jdate', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317007979534479365', NULL, '2020-10-16 15:42:26', NULL, NULL, '1317007979484147714', 'zmname', 'zmname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317009166149218305', NULL, '2020-10-16 15:47:09', NULL, NULL, '1317009166140829698', 'zcname', 'zcname', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317009166149218306', NULL, '2020-10-16 15:47:09', NULL, NULL, '1317009166140829698', 'danwei', 'danwei', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317009166149218307', NULL, '2020-10-16 15:47:09', NULL, NULL, '1317009166140829698', 'fdate', 'fdate', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317009166149218308', NULL, '2020-10-16 15:47:09', NULL, NULL, '1317009166140829698', 'jibie', 'jibie', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317009166149218309', NULL, '2020-10-16 15:47:09', NULL, NULL, '1317009166140829698', 'beizhu', 'beizhu', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144706', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'danwei', 'danwei', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144707', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'phone', 'phone', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144708', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'name', 'name', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144709', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'zzmm', 'zzmm', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144710', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'guanxi', 'guanxi', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317013474643144711', NULL, '2020-10-16 16:04:16', NULL, NULL, '1317013474634756097', 'age', 'age', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317015169502670849', NULL, '2020-10-16 16:11:00', NULL, NULL, '1317015169494282241', 'date', 'date', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317015169502670850', NULL, '2020-10-16 16:11:00', NULL, NULL, '1317015169494282241', 'mingcheng', 'mingcheng', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1317015169502670851', NULL, '2020-10-16 16:11:00', NULL, NULL, '1317015169494282241', 'didian', 'didian', 'string', NULL, NULL, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331447376279285763', NULL, '2020-11-25 11:59:26', NULL, NULL, '1331447376279285762', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331447376287674369', NULL, '2020-11-25 11:59:26', NULL, NULL, '1331447376279285762', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331447376287674370', NULL, '2020-11-25 11:59:26', NULL, NULL, '1331447376279285762', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331479590526300162', NULL, '2020-11-25 14:07:27', NULL, NULL, '1331474698436915202', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331479590526300163', NULL, '2020-11-25 14:07:27', NULL, NULL, '1331474698436915202', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331479590526300164', NULL, '2020-11-25 14:07:27', NULL, NULL, '1331474698436915202', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331483873669853186', NULL, '2020-11-25 14:24:28', NULL, NULL, '1331483873661464578', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331483873669853187', NULL, '2020-11-25 14:24:28', NULL, NULL, '1331483873661464578', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331486475249823745', NULL, '2020-11-25 14:34:48', NULL, NULL, '1331486475245629441', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331486475249823746', NULL, '2020-11-25 14:34:48', NULL, NULL, '1331486475245629441', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331491961407844353', NULL, '2020-11-25 14:56:36', NULL, NULL, '1331491194517106690', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331491961412038658', NULL, '2020-11-25 14:56:36', NULL, NULL, '1331491194517106690', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331493951017889794', NULL, '2020-11-25 15:04:31', NULL, NULL, '1331493951013695490', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331493951017889795', NULL, '2020-11-25 15:04:31', NULL, NULL, '1331493951013695490', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331511745855926274', NULL, '2020-11-25 16:15:13', NULL, NULL, '1331511745851731969', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331511745855926275', NULL, '2020-11-25 16:15:13', NULL, NULL, '1331511745851731969', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331511745855926276', NULL, '2020-11-25 16:15:13', NULL, NULL, '1331511745851731969', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514838215602178', NULL, '2020-11-25 16:27:30', NULL, NULL, '1331514838211407873', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514838215602179', NULL, '2020-11-25 16:27:30', NULL, NULL, '1331514838211407873', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514838215602180', NULL, '2020-11-25 16:27:30', NULL, NULL, '1331514838211407873', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514935032721409', NULL, '2020-11-25 16:27:54', NULL, NULL, '1331514935028527106', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514935032721410', NULL, '2020-11-25 16:27:54', NULL, NULL, '1331514935028527106', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331514935032721411', NULL, '2020-11-25 16:27:54', NULL, NULL, '1331514935028527106', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331872643539914754', NULL, '2020-11-26 16:09:18', NULL, NULL, '1331872643531526146', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331872643539914755', NULL, '2020-11-26 16:09:18', NULL, NULL, '1331872643531526146', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331872643539914756', NULL, '2020-11-26 16:09:18', NULL, NULL, '1331872643531526146', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331878107560398849', NULL, '2020-11-26 16:31:01', NULL, NULL, '1331878107552010242', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331878107560398850', NULL, '2020-11-26 16:31:01', NULL, NULL, '1331878107552010242', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331916030229991425', NULL, '2020-11-26 19:01:42', NULL, NULL, '1331916030221602818', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331916030229991426', NULL, '2020-11-26 19:01:42', NULL, NULL, '1331916030221602818', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331916030229991427', NULL, '2020-11-26 19:01:42', NULL, NULL, '1331916030221602818', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331919172480913409', NULL, '2020-11-26 19:14:11', NULL, NULL, '1331919172472524801', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331919172480913410', NULL, '2020-11-26 19:14:11', NULL, NULL, '1331919172472524801', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331922734942375938', NULL, '2020-11-26 19:28:21', NULL, NULL, '1331922734933987329', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331922734942375939', NULL, '2020-11-26 19:28:21', NULL, NULL, '1331922734933987329', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829634', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'cjl', 'cjl', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829635', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'cjje', 'cjje', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829636', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'xsmj', 'xsmj', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829637', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'cjjj', 'cjjj', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829638', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'sfyj', 'sfyj', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1331926127605829639', NULL, '2020-11-26 19:41:49', NULL, NULL, '1331926127597441025', 'ydkh', 'ydkh', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333970913154048002', NULL, '2020-12-02 11:07:04', NULL, NULL, '1333968597264900097', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333970913158242305', NULL, '2020-12-02 11:07:04', NULL, NULL, '1333968597264900097', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333970913158242306', NULL, '2020-12-02 11:07:04', NULL, NULL, '1333968597264900097', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333974073687941121', NULL, '2020-12-02 11:19:38', NULL, NULL, '1333974073679552514', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333974073687941122', NULL, '2020-12-02 11:19:38', NULL, NULL, '1333974073679552514', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333977108203970561', NULL, '2020-12-02 11:31:41', NULL, NULL, '1333977108195581953', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333977108203970562', NULL, '2020-12-02 11:31:41', NULL, NULL, '1333977108195581953', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333981011083534337', NULL, '2020-12-02 11:47:12', NULL, NULL, '1333980382663548929', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333981011087728641', NULL, '2020-12-02 11:47:12', NULL, NULL, '1333980382663548929', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333981011087728642', NULL, '2020-12-02 11:47:12', NULL, NULL, '1333980382663548929', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333983587250216961', NULL, '2020-12-02 11:57:26', NULL, NULL, '1333983587241828354', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333983587254411265', NULL, '2020-12-02 11:57:26', NULL, NULL, '1333983587241828354', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1333983587254411266', NULL, '2020-12-02 11:57:26', NULL, NULL, '1333983587241828354', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334008609364779010', NULL, '2020-12-02 13:36:52', NULL, NULL, '1334008609356390402', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334008609364779011', NULL, '2020-12-02 13:36:52', NULL, NULL, '1334008609356390402', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334008609364779012', NULL, '2020-12-02 13:36:52', NULL, NULL, '1334008609356390402', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334013423217811457', NULL, '2020-12-02 13:56:00', NULL, NULL, '1334013423209422849', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334013423217811458', NULL, '2020-12-02 13:56:00', NULL, NULL, '1334013423209422849', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334037720057520130', NULL, '2020-12-02 15:32:32', NULL, NULL, '1334037720053325825', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334037720061714433', NULL, '2020-12-02 15:32:32', NULL, NULL, '1334037720053325825', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334039611348885506', NULL, '2020-12-02 15:40:03', NULL, NULL, '1334039611344691202', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334039611353079810', NULL, '2020-12-02 15:40:03', NULL, NULL, '1334039611344691202', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334043138255233026', NULL, '2020-12-02 15:54:04', NULL, NULL, '1334043138246844418', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334043138255233027', NULL, '2020-12-02 15:54:04', NULL, NULL, '1334043138246844418', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334043138255233028', NULL, '2020-12-02 15:54:04', NULL, NULL, '1334043138246844418', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334049545566298114', NULL, '2020-12-02 16:19:32', NULL, NULL, '1334049545562103810', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334049545570492418', NULL, '2020-12-02 16:19:32', NULL, NULL, '1334049545562103810', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334052375127662594', NULL, '2020-12-02 16:30:46', NULL, NULL, '1334052375119273986', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334052375127662595', NULL, '2020-12-02 16:30:46', NULL, NULL, '1334052375119273986', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334052375127662596', NULL, '2020-12-02 16:30:46', NULL, NULL, '1334052375119273986', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334058269185941505', NULL, '2020-12-02 16:54:12', NULL, NULL, '1334058269181747202', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334058269190135810', NULL, '2020-12-02 16:54:12', NULL, NULL, '1334058269181747202', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334060474139942914', NULL, '2020-12-02 17:02:57', NULL, NULL, '1334060474135748610', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334060474144137218', NULL, '2020-12-02 17:02:57', NULL, NULL, '1334060474135748610', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334063192938127362', NULL, '2020-12-02 17:13:46', NULL, NULL, '1334063192933933058', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334063192942321665', NULL, '2020-12-02 17:13:46', NULL, NULL, '1334063192933933058', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334063880170643458', NULL, '2020-12-02 17:16:29', NULL, NULL, '1334063880162254850', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334063880170643459', NULL, '2020-12-02 17:16:29', NULL, NULL, '1334063880162254850', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334068361952239617', NULL, '2020-12-02 17:34:18', NULL, NULL, '1334068361943851009', 'yname', 'yname', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334068361952239618', NULL, '2020-12-02 17:34:18', NULL, NULL, '1334068361943851009', 'ysex', 'ysex', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334068361952239619', NULL, '2020-12-02 17:34:18', NULL, NULL, '1334068361943851009', 'yage', 'yage', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334068361952239620', NULL, '2020-12-02 17:34:18', NULL, NULL, '1334068361943851009', 'danwei', 'danwei', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334083843619037185', NULL, '2020-12-02 18:35:49', NULL, NULL, '1334083843610648578', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334083843619037186', NULL, '2020-12-02 18:35:49', NULL, NULL, '1334083843610648578', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015609327618', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015613521921', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'sj', 'sj', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015613521922', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015613521923', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'je', 'je', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015613521924', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'jg', 'jg', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334107015613521925', NULL, '2020-12-02 20:07:54', NULL, NULL, '1334107015605133314', 'jl', 'jl', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825602', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'class', 'class', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825603', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'school', 'school', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825604', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'lv', 'lv', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825605', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'renyuan_jy', 'renyuan_jy', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825606', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'richang_jy', 'richang_jy', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825607', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'biaozhun_jy', 'biaozhun_jy', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825608', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'xinxi_jy', 'xinxi_jy', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825609', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'jichubokuan_jy', 'jichubokuan_jy', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825610', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'renyuan_ct', 'renyuan_ct', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825611', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'richang_ct', 'richang_ct', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825612', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'xiangmu_ct', 'xiangmu_ct', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825613', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'jichubokuan_ct', 'jichubokuan_ct', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825614', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'xiangmu_sh', 'xiangmu_sh', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825615', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'jichubokuan_sh', 'jichubokuan_sh', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825616', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'diannao', 'diannao', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334440263740825617', NULL, '2020-12-03 18:12:06', NULL, NULL, '1334440263732436994', 'xiaoyuanwang', 'xiaoyuanwang', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451905', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'diqu', 'diqu', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451906', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'class', 'class', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451907', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_11', 'sales_11', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451908', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_12', 'sales_12', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451909', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_13', 'sales_13', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451910', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_14', 'sales_14', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451911', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_15', 'sales_15', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451912', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_16', 'sales_16', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135443451913', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_17', 'sales_17', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646210', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_18', 'sales_18', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646211', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_19', 'sales_19', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646212', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_20', 'sales_20', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646213', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_21', 'sales_21', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646214', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_22', 'sales_22', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646215', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_31', 'sales_31', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646216', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_32', 'sales_32', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646217', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_33', 'sales_33', 'String', NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646218', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_34', 'sales_34', 'String', NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646219', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_35', 'sales_35', 'String', NULL, 19, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646220', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_36', 'sales_36', 'String', NULL, 20, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646221', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_37', 'sales_37', 'String', NULL, 21, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646222', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_38', 'sales_38', 'String', NULL, 22, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646223', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_39', 'sales_39', 'String', NULL, 23, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646224', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_40', 'sales_40', 'String', NULL, 24, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646225', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_41', 'sales_41', 'String', NULL, 25, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334465135447646226', NULL, '2020-12-03 19:50:56', NULL, NULL, '1334465135435063298', 'sales_42', 'sales_42', 'String', NULL, 26, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015277879297', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'city', 'city', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073601', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'school', 'school', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073602', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'ncnum', 'ncnum', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073603', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'num', 'num', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073604', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'name', 'name', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073605', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'class', 'class', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073606', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'pay', 'pay', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073607', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'paytime', 'paytime', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073608', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'payclass', 'payclass', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073609', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'pay1', 'pay1', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073610', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'paymoth', 'paymoth', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073611', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'pay2', 'pay2', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073612', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'tuition_09', 'tuition_09', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073613', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'meals_09', 'meals_09', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073614', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'busfee_09', 'busfee_09', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073615', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'tuition_10', 'tuition_10', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073616', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'meals_10', 'meals_10', 'String', NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334708015282073617', NULL, '2020-12-04 11:56:03', NULL, NULL, '1334708015269490689', 'busfee_10', 'busfee_10', 'String', NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504126402561', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'city', 'city', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596866', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'finish', 'finish', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596867', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'semifinish', 'semifinish', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596868', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'time', 'time', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596869', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'state', 'state', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596870', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'attribute', 'attribute', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596871', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'num', 'num', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596872', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'gnum', 'gnum', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596873', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'jnum', 'jnum', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596874', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'wnum', 'wnum', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596875', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'uph', 'uph', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596876', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'hc', 'hc', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596877', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'jtime', 'jtime', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596878', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'yield', 'yield', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334764504130596879', NULL, '2020-12-04 15:40:31', NULL, NULL, '1334763434197200897', 'beizhu', 'beizhu', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754305', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754306', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754307', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key1', 'key1', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754308', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key2', 'key2', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754309', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key3', 'key3', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754310', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key4', 'key4', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754311', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key5', 'key5', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754312', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key6', 'key6', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754313', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'key7', 'key7', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1334782903430754314', NULL, '2020-12-04 16:53:38', NULL, NULL, '1283730831482937345', 'percent', 'percent', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335886666392518658', NULL, '2020-12-07 17:59:35', NULL, NULL, '1335886666363158530', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335886666413490177', NULL, '2020-12-07 17:59:36', NULL, NULL, '1335886666363158530', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335889985055866881', NULL, '2020-12-07 18:12:47', NULL, NULL, '1335889985047478274', 'value', 'value', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335889985060061186', NULL, '2020-12-07 18:12:47', NULL, NULL, '1335889985047478274', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335909918863114242', NULL, '2020-12-07 19:31:59', NULL, NULL, '1335909918854725633', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1335909918863114243', NULL, '2020-12-07 19:31:59', NULL, NULL, '1335909918854725633', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1337360966253293570', NULL, '2020-12-11 19:37:56', NULL, NULL, '1337360015912087554', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1337360966253293571', NULL, '2020-12-11 19:37:56', NULL, NULL, '1337360015912087554', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1337360966253293572', NULL, '2020-12-11 19:37:56', NULL, NULL, '1337360015912087554', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338412526932602882', NULL, '2020-12-14 17:16:28', NULL, NULL, '1335901385547431937', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338412526936797186', NULL, '2020-12-14 17:16:28', NULL, NULL, '1335901385547431937', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338459533034401794', NULL, '2020-12-14 20:23:15', NULL, NULL, '1338457100451328002', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338459533038596098', NULL, '2020-12-14 20:23:15', NULL, NULL, '1338457100451328002', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338459533038596099', NULL, '2020-12-14 20:23:15', NULL, NULL, '1338457100451328002', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338459533038596100', NULL, '2020-12-14 20:23:15', NULL, NULL, '1338457100451328002', 'type', 'type', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338667866769068033', NULL, '2020-12-15 10:11:05', NULL, NULL, '1338667866760679426', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338667866769068034', NULL, '2020-12-15 10:11:05', NULL, NULL, '1338667866760679426', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338667866769068035', NULL, '2020-12-15 10:11:05', NULL, NULL, '1338667866760679426', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338670467426291713', NULL, '2020-12-15 10:21:25', NULL, NULL, '1338669749617299458', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338670467426291714', NULL, '2020-12-15 10:21:25', NULL, NULL, '1338669749617299458', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338670467426291715', NULL, '2020-12-15 10:21:25', NULL, NULL, '1338669749617299458', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338675446966915074', NULL, '2020-12-15 10:41:13', NULL, NULL, '1338675446962720769', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338675446971109377', NULL, '2020-12-15 10:41:13', NULL, NULL, '1338675446962720769', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338675446971109378', NULL, '2020-12-15 10:41:13', NULL, NULL, '1338675446962720769', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338678877404270594', NULL, '2020-12-15 10:54:50', NULL, NULL, '1338678877395881985', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338678877408464898', NULL, '2020-12-15 10:54:50', NULL, NULL, '1338678877395881985', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338678877408464899', NULL, '2020-12-15 10:54:50', NULL, NULL, '1338678877395881985', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338687435571204098', NULL, '2020-12-15 11:28:51', NULL, NULL, '1338687435562815489', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338687435575398402', NULL, '2020-12-15 11:28:51', NULL, NULL, '1338687435562815489', 'from_name', 'from_name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338687435575398403', NULL, '2020-12-15 11:28:51', NULL, NULL, '1338687435562815489', 'to_name', 'to_name', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338689731134754817', NULL, '2020-12-15 11:37:58', NULL, NULL, '1338687259901169665', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338689731138949122', NULL, '2020-12-15 11:37:58', NULL, NULL, '1338687259901169665', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338689731138949123', NULL, '2020-12-15 11:37:58', NULL, NULL, '1338687259901169665', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338689731138949124', NULL, '2020-12-15 11:37:58', NULL, NULL, '1338687259901169665', 'type', 'type', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338720793172905986', NULL, '2020-12-15 13:41:24', NULL, NULL, '1338720793164517378', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338720793172905987', NULL, '2020-12-15 13:41:24', NULL, NULL, '1338720793164517378', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338720793172905988', NULL, '2020-12-15 13:41:24', NULL, NULL, '1338720793164517378', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338724105830010882', NULL, '2020-12-15 13:54:34', NULL, NULL, '1338724105821622274', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338724105830010883', NULL, '2020-12-15 13:54:34', NULL, NULL, '1338724105821622274', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338724105830010884', NULL, '2020-12-15 13:54:34', NULL, NULL, '1338724105821622274', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641002881025', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641002881026', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641002881027', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'sex', 'sex', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641002881028', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'nation', 'nation', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075330', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'birth', 'birth', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075331', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'address', 'address', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075332', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'card', 'card', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075333', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'date', 'date', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075334', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'orga', 'orga', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075335', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'reason', 'reason', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075336', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'time', 'time', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075337', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'num', 'num', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075338', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'undertaker', 'undertaker', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075339', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'leader', 'leader', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075340', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'autograph', 'autograph', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075341', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'phone', 'phone', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075342', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'qianming', 'qianming', 'String', NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075343', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'ltime', 'ltime', 'String', NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075344', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'os', 'os', 'String', NULL, 19, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075345', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'taddress', 'taddress', 'String', NULL, 20, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075346', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'addressee', 'addressee', 'String', NULL, 21, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075347', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'code', 'code', 'String', NULL, 22, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1338741641007075348', NULL, '2020-12-15 15:04:14', NULL, NULL, '1338741640998686721', 'remarks', 'remarks', 'String', NULL, 23, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339491107960029185', NULL, '2020-12-17 16:42:21', NULL, NULL, '1339491107951640577', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339491107960029186', NULL, '2020-12-17 16:42:21', NULL, NULL, '1339491107951640577', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339491107960029187', NULL, '2020-12-17 16:42:21', NULL, NULL, '1339491107951640577', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339495346086117377', NULL, '2020-12-17 16:59:12', NULL, NULL, '1339495346077728770', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339495346086117378', NULL, '2020-12-17 16:59:12', NULL, NULL, '1339495346077728770', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339495346086117379', NULL, '2020-12-17 16:59:12', NULL, NULL, '1339495346077728770', 'type', 'type', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339498906773389314', NULL, '2020-12-17 17:13:21', NULL, NULL, '1339498906765000705', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339498906773389315', NULL, '2020-12-17 17:13:21', NULL, NULL, '1339498906765000705', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339538388457390081', NULL, '2020-12-17 19:50:14', NULL, NULL, '1339538388453195777', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339538388461584385', NULL, '2020-12-17 19:50:14', NULL, NULL, '1339538388453195777', 'value', 'value', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339870475500691457', NULL, '2020-12-18 17:49:50', NULL, NULL, '1339870475496497153', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339870475500691458', NULL, '2020-12-18 17:49:50', NULL, NULL, '1339870475496497153', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339870475500691459', NULL, '2020-12-18 17:49:50', NULL, NULL, '1339870475496497153', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339873097628557314', NULL, '2020-12-18 18:00:15', NULL, NULL, '1339873097620168705', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339873097632751618', NULL, '2020-12-18 18:00:15', NULL, NULL, '1339873097620168705', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339873097632751619', NULL, '2020-12-18 18:00:15', NULL, NULL, '1339873097620168705', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339876173676584962', NULL, '2020-12-18 18:12:28', NULL, NULL, '1339876173672390658', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339876173680779266', NULL, '2020-12-18 18:12:28', NULL, NULL, '1339876173672390658', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339876173680779267', NULL, '2020-12-18 18:12:28', NULL, NULL, '1339876173672390658', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339878700648275969', NULL, '2020-12-18 18:22:31', NULL, NULL, '1339878700639887362', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339878700648275970', NULL, '2020-12-18 18:22:31', NULL, NULL, '1339878700639887362', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339878700652470274', NULL, '2020-12-18 18:22:31', NULL, NULL, '1339878700639887362', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339884367199117313', NULL, '2020-12-18 18:45:02', NULL, NULL, '1339884367194923010', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339884367203311617', NULL, '2020-12-18 18:45:02', NULL, NULL, '1339884367194923010', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339884367203311618', NULL, '2020-12-18 18:45:02', NULL, NULL, '1339884367194923010', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339886300571934722', NULL, '2020-12-18 18:52:43', NULL, NULL, '1339886300563546113', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339886300571934723', NULL, '2020-12-18 18:52:43', NULL, NULL, '1339886300563546113', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339886300571934724', NULL, '2020-12-18 18:52:43', NULL, NULL, '1339886300563546113', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339889468164841473', NULL, '2020-12-18 19:05:18', NULL, NULL, '1339888452912586753', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339889468164841474', NULL, '2020-12-18 19:05:18', NULL, NULL, '1339888452912586753', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339889468164841475', NULL, '2020-12-18 19:05:18', NULL, NULL, '1339888452912586753', 'value', 'value', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1339889468164841476', NULL, '2020-12-18 19:05:18', NULL, NULL, '1339888452912586753', 'type', 'type', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('179c2bc8ef420a995c3751062e909b66', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'gtime', 'gtime', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('17a278c53299d1342c56a8eb1614a44e', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'ctime', 'ctime', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('19e6fe3dc95b352d97f460648dc93e15', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_z', 'proportion_z', 'String', NULL, 23, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1b09540b3d8deddc06ebdbec26f6ae87', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'political', 'political', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1b6fbe11728a1c4633eeea8ffb12bc25', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'update_by', 'update_by', 'String', NULL, 30, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1d21c72184f2e06ca1be3dc95fbcc259', NULL, '2021-01-11 14:38:14', NULL, NULL, '1317006713165049858', 'zhiwu', 'zhiwu', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1ee3018b4d0c305e2c06f77e1e5f3c4c', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_3', 'sales_3', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('1fac3f8219222b8963dc6b85870ffd86', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'telphone', 'telphone', NULL, NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('21f7de0326129dbbbc03d64aceb4d3f7', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'yprice', 'yprice', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('23b2e3b8d0f3f2b564d4284460fe9e79', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'ftime', '发货日期', 'date', NULL, 6, 1, 2, ''); +INSERT INTO `jimu_report_db_field` VALUES ('29fcb4292d4782888e9fd0496bd8ddc8', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('2a3b35b4830f1b1eff84a5a9bceed0b6', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_z', 'gift_z', 'String', NULL, 22, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('2be25d6c7e3ac28abec99854618d0e3d', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'birthday', 'birthday', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('2f94a4be25426f3f4013c50103559969', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_4', 'sales_4', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('30f8183ff4ec5a6b30724a1da7fbbed0', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'pworktime', 'pworktime', NULL, NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('319702c956aa5f2e000c89e7b4ad2358', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'customer', 'customer', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('334ffa2aec9300ff712a1f3f3143a4cd', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'bx_gg_moeny', 'bx_gg_moeny', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('34c933903ddf6ba5bad588d913c487c5', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_4', 'gift_4', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('350be7312c299482acfe44fb086f91c1', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_5', 'sales_5', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('35d9204189dd1d1f142a7587f89ab46c', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'email', 'email', 'String', NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('3c2a8313af79dbecba4c5687b65a66ab', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'cnum', 'cnum', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('3c71c10a0d27796808cb201e30024fe8', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'school', 'school', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('3c7597c1efa73ca9400cdc36a9a48e23', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_1', 'gift_1', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('3f7ce1ee2ad20770e64016384f2c1cd5', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'homephone', 'homephone', NULL, NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('3f979afa0462738682773d468168b95f', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'region', 'region', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('450316da5f9b7d8505944e16f1284a38', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'monty', 'monty', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('467edbfc6ca934a7a4d600391ed0fb75', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'bx_jj_yongjin', 'bx_jj_yongjin', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('4942cc4d04ac7330799ecc3fec48ac8b', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'id_card', 'id_card', 'String', NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('49def4afc641cb52775ff03fdba3007a', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'his_lowest', 'his_lowest', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('49fa04e98f2ed62966d7f6141611dd7e', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'children', 'children', NULL, NULL, 24, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('49febadfe1eb3a59bfbe802d506aa590', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'data', 'data', NULL, NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('4d0cf377fcd2f03130a53838cbca8069', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('4d782de2bf10be3a79f04e8841053f00', NULL, '2021-01-08 10:47:52', NULL, NULL, 'f7649b77cfc9e0a9dacdac370cd4036b', 'pingjia', 'pingjia', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('4d7dd94ecf26b5fa69f9a1f811583340', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'address', 'address', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('52444b20f2fcdfe43461a5a49079e4dc', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'health', 'health', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('538563757aa1a49935824ce14568f27c', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'archivesdi', 'archivesdi', NULL, NULL, 34, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('5406c33ff49384c2bcad5b85a9701355', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'province', 'province', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('57ee0e6ffe7135a943dde2408d424c97', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_1', 'proportion_1', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('5a88459afcf01cc20ac5a50322b35fd6', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'hukounum', 'hukounum', NULL, NULL, 26, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('5bc99af9cfddd240794167a6765a1517', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'neikong_zx_money', 'neikong_zx_money', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('5cf4a1ca15691d6340e522e1831dc3ac', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_6', 'sales_6', 'String', NULL, 18, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('5eb381603c577d06f31e66cb7e2d0a61', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'jperson', 'jperson', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('6020e457162b86b75a2d335999ab06ec', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'nation', 'nation', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('631632bc2243018788d11d4f8348bfd2', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'socialsecurity', 'socialsecurity', NULL, NULL, 30, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('665f13c7fcebac6c35c894d885c4b344', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_6', 'proportion_6', 'String', NULL, 20, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('677bf4d6400fc465067b0d5bd6ad2a58', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_2', 'gift_2', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('6d1c7b2ec7dbd0488abcd6d2ea59981e', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'company', 'company', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('6dae70a5323b3d517c8f13278f0e1d5f', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_5', 'proportion_5', 'String', NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('6fdacbeb31220d3bbf203934c158628a', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'hukou', 'hukou', 'String', NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('70abaf24c413f38ff6a3c315ad8824b2', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'height', 'height', 'String', NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('718a062a1e42276c1913c7d7836b1bee', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'hobby', 'hobby', NULL, NULL, 32, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('71cb567cd27fda05d55d80324c7b59e1', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'del_flag', 'del_flag', 'String', NULL, 32, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('768fb670937ab4aadde39842df36bfd3', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'cprice', 'cprice', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('7b794ecee6f61f64839eb1094a7c20bb', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'region', 'region', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('80017f23232ea91ae32e4718eb10e8c3', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_4', 'proportion_4', 'String', NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('80b5e3fd550d9be1a8c8ea69a2a593f8', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'birth', 'birth', NULL, NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('812da8abd9d8c538743d0f3617c6ef07', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'jphone', 'jphone', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('81dea8f0ccba2b3530038ebcf92b36b1', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'name', 'name', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8217bf89dcd0a193f9e2f573fcecf52e', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'name', 'name', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('84391d55c9bd4185c4abbc0d9a8a3f9b', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'native_place', 'native_place', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('85b745b659e7b1e00371b49642ae7cc2', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'update_by', '职位', 'string', NULL, 4, 1, 3, 'zhiwu'); +INSERT INTO `jimu_report_db_field` VALUES ('865ca077977b78934e5e82e733ef4e47', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'major', 'major', 'String', NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8749d00c6c3cf873841a227a5206478a', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_1', 'sales_1', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('87f43f4f5220c34a95d55ff3fa9de0c1', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'health', 'health', NULL, NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('89bd5c1f5b37b82ab2d56d8c9e50a674', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'sex', 'sex', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8a122291db744a6109a93af5d289787f', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'computer_level', 'computer_level', 'String', NULL, 22, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8ab8d51dfb792cdc767e68d7e9370f3d', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'num', 'num', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8d186f249df9e1c1c549fbdc6a0a4d77', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'currentdi', 'currentdi', NULL, NULL, 28, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8db810062e3a19eb83fca651691b848e', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_2', 'sales_2', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8e39d42a7fad183fe75ce1a56f148db1', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'bianma', 'bianma', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8fb12c3929ea745f94cc4a90df9d5181', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'idcard', 'idcard', NULL, NULL, 21, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('8fb53733d1fb32d21d2bc2b3c0178c73', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'sex', '性别', 'string', NULL, 10, 1, 1, 'sex'); +INSERT INTO `jimu_report_db_field` VALUES ('9282683fd000d19b205ad6841f0f7b6e', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'total', 'total', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('955f449180fafa0c0a88fcb3aa9138c4', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'id', 'id', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('967c9254ce5afbb671b2a8fe729ad981', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'city', 'city', NULL, NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('98ff7d929c393a2fcbd41ecc43d1a303', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'birth', 'birth', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('9ae6caeaee4354eb80635343707f6e6c', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'dtime', '收货日期', 'datetime', NULL, 9, 1, 2, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('9bb9b5329f79564ec030694a639ffd7f', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'bx_zx_money', 'bx_zx_money', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('9ddf87596d6701eda383c3d8d7853b2b', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'education', 'education', 'String', NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('9e28f1951ea83b6e6dae4e3892baea90', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'positional_titles', 'positional_titles', 'String', NULL, 25, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('9ef07ae18b494bb6cef4fd19efba4771', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'ttime', 'ttime', NULL, NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('a2e680c356e712b43343d589539da011', NULL, '2021-01-08 10:47:52', NULL, NULL, 'f7649b77cfc9e0a9dacdac370cd4036b', 'name', 'name', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('a42eed89da67da0653650edcc1576f8c', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'currentnum', 'currentnum', NULL, NULL, 29, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('a93ce07361b9d6ec02a58cf7f6b94664', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'political', 'political', NULL, NULL, 7, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('a949c4beac3fec79e96309a6d2d8f5bb', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'entrytime', 'entrytime', NULL, NULL, 19, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('a9c7c96a412537b4da3df68ff8e93cc8', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'post', 'post', NULL, NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ab0aabf8cc08327a4510420bd553e6c0', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'providentfund', 'providentfund', NULL, NULL, 31, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ad146af051ba273a480223d49f59358b', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'hukoustreet', 'hukoustreet', NULL, NULL, 25, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ad1d1fe2ee182c2d3a263a127fea041e', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_2', 'proportion_2', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ae5ec6e56478a098b36587e93b1d8908', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'arrival_time', 'arrival_time', 'String', NULL, 24, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b14588abed341d314a08d316dfde553f', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'work_experience', 'work_experience', 'String', NULL, 27, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b1de05c2d02cdde59c1e2a93e45964f9', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'create_time', 'create_time', 'String', NULL, 29, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b279ab8f7d20ebbeec67f5bf2109ba22', NULL, '2021-01-08 16:10:28', NULL, NULL, '7b20679054449c554cde856ef24126ab', 'his_average', 'his_average', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b450669f376fa9f075ac403c7d7f2ee9', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'proportion_3', 'proportion_3', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b46d80bfe53372b6ff92a6f8e8bf38df', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'hukoudi', 'hukoudi', NULL, NULL, 27, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b5afa6c7c63f649460d4d45b7d697098', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'zip_code', 'zip_code', 'String', NULL, 17, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b5df568754994e67a15a8f5b8d4bc297', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'phone', 'phone', 'String', NULL, 19, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b6c59afb66a4143ab7c4dc65ef679926', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'freight', 'freight', 'String', NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('b8aafd56ddcf6902909722c7d2529797', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'department', 'department', NULL, NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ba83ad8a89105b198aa49798f2940c29', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'foreign_language', 'foreign_language', 'String', NULL, 20, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c1913cffe0a0a65b8f76ef280af93038', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'tb_zx_money', 'tb_zx_money', 'String', NULL, 6, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c357b23ae68c0ee6c9dab322507dce0b', NULL, '2021-01-11 14:38:14', NULL, NULL, '1317006713165049858', 'jdate', 'jdate', 'String', NULL, 2, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c3b0443ebecc7152343c5ea3ef32a38f', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'graduation_time', 'graduation_time', 'String', NULL, 23, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c3d8cd6e68c605fd6d6ac217fed5c8d4', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'weight', 'weight', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c3fe8f62ea0c6ce9990bfa22dc0265b6', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'major', 'major', NULL, NULL, 13, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c40fe2cf7a74a6e96575f73ef5e7d205', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'nation', 'nation', NULL, NULL, 9, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c4d6132699dcdff382c93ab10d64551a', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'education_experience', 'education_experience', 'String', NULL, 26, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c5a801ff78f2ca6b1b7a03b3222fdd61', NULL, '2021-01-08 16:29:02', NULL, NULL, '4af57d343f1d6521b71b85097b580786', 'biz_income', 'biz_income', 'String', NULL, 1, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c6144f2ca7422a71e951abea1bce6aaf', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'education', 'education', NULL, NULL, 12, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('c8d1276d19bdd946e9fc18b83aacda15', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'cname', 'cname', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('cec893b2241134ba9b03ed6d4edf2919', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'marital', 'marital', NULL, NULL, 23, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('d076942aecee8f5197b66eb382ba1995', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'sbtype', 'sbtype', NULL, NULL, 33, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('d3ef9876d3c56889157747be606f70fc', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_6', 'gift_6', 'String', NULL, 19, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('d4872ee0d267f85fd7d0bb090a2e0aa2', NULL, '2021-01-06 11:15:32', NULL, NULL, '1338756341933543425', 'code1', 'code1', 'String', NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('d5b7b92023a2fb09fed9d36a4ac7b3e3', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'sales_z', 'sales_z', 'String', NULL, 21, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('db503c31de99f35cbcb1f66a69f9964c', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'mailbox', 'mailbox', NULL, NULL, 15, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('dd56fbd98db5c1cda9dd77637ba1c7e6', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'create_by', 'create_by', 'String', NULL, 28, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('dfbc8bba6261dcd4ceb3da5f517a0d58', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'school', 'school', NULL, NULL, 20, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('e7f6104183a7b2408f72b91f4638e9e2', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_3', 'gift_3', 'String', NULL, 10, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('ef685270770a69bddb4f24e37eed9dc0', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'office', 'office', NULL, NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('efe17d82b5daaa3f95364e9afaeffd1c', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'register', 'register', NULL, NULL, 11, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('efe4e0110a61d9791e18308aed422aa7', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'name', 'name', NULL, NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f110f1f947e0f895b552f7edd133a60a', NULL, '2021-01-05 15:09:15', NULL, NULL, '1289140698221678593', 'ctotal', 'ctotal', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f11af753ccbf495818e9c23c1b083ae2', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'foreign_language_level', 'foreign_language_level', 'String', NULL, 21, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f13ddfd9a041fc3b02a164d0541292d5', NULL, '2021-01-06 11:20:40', NULL, NULL, '9b7d28336b01f9a6b1a613957c3d7cda', 'laddress', 'laddress', 'String', NULL, 8, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f1905f7a175f8e56afd8f6c2969582e6', NULL, '2021-01-06 11:43:35', NULL, NULL, '1334390762455965697', 'gift_5', 'gift_5', 'String', NULL, 16, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f430837a3f4c08f425bcd1de46d3a2d3', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'sex', 'sex', NULL, NULL, 5, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f82904af04e557b12dcfe3562900597c', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'gdata', 'gdata', NULL, NULL, 14, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f978117e8eda0daee2c00223f9df4b48', NULL, '2021-01-13 11:59:53', NULL, NULL, '1316997232402231298', 'update_time', 'update_time', 'String', NULL, 31, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('f984ef26fe0a505b279a0e4a3b27201f', NULL, '2021-01-08 10:47:52', NULL, NULL, 'f7649b77cfc9e0a9dacdac370cd4036b', 'shijian', 'shijian', 'String', NULL, 4, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('fac871f69237c6c25abe8c4332eabcbf', NULL, '2021-01-08 10:47:52', NULL, NULL, 'f7649b77cfc9e0a9dacdac370cd4036b', 'lingdao', 'lingdao', 'String', NULL, 3, 0, NULL, NULL); +INSERT INTO `jimu_report_db_field` VALUES ('fc07c053ed0ecbfcc45041640acf6cb1', NULL, '2021-01-05 15:33:07', NULL, NULL, '1316987047604514817', 'party', 'party', NULL, NULL, 22, 0, NULL, NULL); + +-- ---------------------------- +-- Table structure for jimu_report_db_param +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report_db_param`; +CREATE TABLE `jimu_report_db_param` ( + `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jimu_report_head_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '动态报表ID', + `param_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '参数字段', + `param_txt` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数文本', + `param_value` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参数默认值', + `order_num` int(11) NULL DEFAULT NULL COMMENT '排序', + `create_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人登录名称', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建日期', + `update_by` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人登录名称', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新日期', + PRIMARY KEY (`id`) USING BTREE, + INDEX `idx_jmrheadid`(`jimu_report_head_id`) USING BTREE, + INDEX `idx_jrdp_jimu_report_head_id`(`jimu_report_head_id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report_db_param +-- ---------------------------- +INSERT INTO `jimu_report_db_param` VALUES ('078d99565feef91904c84b42b43f5174', '1273495682564534273', 'id', 'id', '1', 1, NULL, '2020-08-03 09:55:26', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('1324279360203526146', '1324279359998005250', 'pageSize', 'pageSize', '10', 2, NULL, '2020-08-03 15:19:54', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('1324279360220303361', '1324279359998005250', 'pageNo', 'pageNo', '1', 1, NULL, '2020-08-03 15:19:54', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('143f8c164072ddbdeafec5c5b1466827', '1272858455908073473', 'id', 'id', '1', 1, NULL, '2020-07-21 15:31:51', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('173c869cc45b683a9cfe25826110cead', '1272834687525482497', 'id', 'id', '1', 1, NULL, '2020-08-03 09:57:08', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('1805eb351a966dc3c039b5239b6faa49', '1291310198925840385', 'sex', 'sex', '男', 2, NULL, '2020-06-08 15:21:09', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('256eb2f8582ce4d74559b1fc1e2917ca', '1291310198925840385', 'id', 'id', '111', 1, NULL, '2020-06-08 15:21:09', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('3a9efc51a6b6723d5a0ddf109aacb2b5', '1288038655293661186', 'pageNo', 'pageNo', '1', 1, NULL, '2020-07-30 17:26:29', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('3ced36c7a2cce40c667cc485bf59cd11', '1291217511962902530', 'pageSize', 'pageSize', '10', 2, NULL, '2020-08-03 15:19:54', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('49bd3f212cd6c406c8584e6bb0d9cf93', '1291549569390243841', 'pageSize', 'pageSize', '10', 2, NULL, '2020-07-30 17:26:29', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('57165a6fe5f2b700d4ef19518de4defd', '1290104038414721025', 'id', 'id', '1', 1, NULL, '2020-08-03 09:55:46', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('7569e95c1fa73d5438aceb19c1b85ef0', '1288038655293661186', 'pageSize', 'pageSize', '10', 2, NULL, '2020-07-30 17:26:29', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('7d7765754aadaddab91bf1257447ae73', '1291549569390243841', 'pageNo', 'pageNo', '1', 1, NULL, '2020-07-30 17:26:29', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('90b22a058cc331146b548bc93f09b5cd', '1289140698221678593', 'pageSize', 'pageSize', '10', 2, NULL, '2020-08-03 15:19:54', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('a29c10ed01c6608e899e1368f2d5d7e3', '1316997232402231298', 'id', 'id', '1', 1, NULL, '2021-01-13 14:31:13', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('a803707f3383dd9f4685fadc7efa07f4', '1224643501392728065', 'sex', 'sex', '男', 2, NULL, '2020-06-08 15:21:09', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('b7c34e8a3c2804715825af4bdbcf857a', '1224643501392728065', 'id', 'id', '111', 1, NULL, '2020-06-08 15:21:09', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('d8010a4ffbe567e6117e7f59641aeb7c', '1289140698221678593', 'pageNo', 'pageNo', '1', 1, NULL, '2020-08-03 15:19:54', NULL, NULL); +INSERT INTO `jimu_report_db_param` VALUES ('d9d94d6b09dd074f39af96d7a4696f9a', '1291217511962902530', 'pageNo', 'pageNo', '1', 1, NULL, '2020-08-03 15:19:54', NULL, NULL); + +-- ---------------------------- +-- Table structure for jimu_report_map +-- ---------------------------- +DROP TABLE IF EXISTS `jimu_report_map`; +CREATE TABLE `jimu_report_map` ( + `id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键', + `label` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地图名称', + `name` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '地图编码', + `data` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '地图数据', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `del_flag` varchar(1) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '0表示未删除,1表示删除', + `sys_org_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '所属部门', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `uniq_jmreport_map_name`(`name`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '地图配置表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of jimu_report_map +-- ---------------------------- +INSERT INTO `jimu_report_map` VALUES ('1334703777051127809', '山东', 'shandong', '{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"adcode\":370100,\"name\":\"济南市\",\"center\":[117.000923,36.675807],\"centroid\":[117.221244,36.639974],\"childrenNum\":12,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":0,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.273417,37.532619],[117.275549,37.526193],[117.284393,37.522266],[117.286525,37.510046],[117.307215,37.507744],[117.317718,37.499371],[117.312585,37.487068],[117.285894,37.479328],[117.283998,37.471587],[117.304609,37.466069],[117.307768,37.46194],[117.295449,37.4538],[117.309189,37.447486],[117.353332,37.450901],[117.369758,37.436048],[117.368257,37.419563],[117.360202,37.405697],[117.368652,37.396399],[117.401029,37.379071],[117.415401,37.364203],[117.41319,37.342255],[117.409163,37.329488],[117.411611,37.308604],[117.417612,37.296587],[117.430168,37.285166],[117.432379,37.272032],[117.43688,37.27235],[117.438302,37.25786],[117.443908,37.250056],[117.431037,37.254396],[117.424403,37.243367],[117.429141,37.239783],[117.408768,37.239703],[117.402371,37.224808],[117.404977,37.21716],[117.417928,37.20003],[117.436091,37.184251],[117.442724,37.170859],[117.444066,37.156868],[117.4507,37.153957],[117.4507,37.143711],[117.455596,37.11767],[117.459781,37.109931],[117.442092,37.093574],[117.409241,37.089425],[117.391158,37.083479],[117.365256,37.069272],[117.336433,37.073941],[117.339434,37.056419],[117.33667,37.046838],[117.326088,37.036178],[117.315349,37.030547],[117.317323,37.020923],[117.328457,37.011218],[117.35349,37.003349],[117.365335,36.99496],[117.378286,36.956997],[117.391632,36.952],[117.40403,36.955038],[117.415322,36.964311],[117.432853,36.954878],[117.444461,36.958116],[117.458754,36.957676],[117.477628,36.961154],[117.476522,36.968348],[117.494527,36.972344],[117.509847,36.969267],[117.519875,36.957117],[117.536854,36.978498],[117.549094,36.979817],[117.555253,36.970785],[117.54933,36.96507],[117.56544,36.959954],[117.56465,36.945084],[117.553674,36.940727],[117.551305,36.93385],[117.539538,36.941486],[117.534248,36.931611],[117.56923,36.915736],[117.58376,36.894176],[117.585024,36.886815],[117.579891,36.878093],[117.577364,36.862847],[117.580523,36.85136],[117.608556,36.821815],[117.648119,36.805436],[117.677811,36.783245],[117.687603,36.763853],[117.695974,36.754115],[117.724165,36.755998],[117.747303,36.748584],[117.736642,36.729423],[117.739959,36.721004],[117.71848,36.704724],[117.718006,36.697826],[117.715637,36.691208],[117.701265,36.685191],[117.695184,36.666978],[117.698027,36.652974],[117.709003,36.651569],[117.712241,36.642258],[117.70853,36.635154],[117.715321,36.627527],[117.714926,36.610545],[117.706555,36.611549],[117.705055,36.605807],[117.690525,36.604883],[117.697869,36.599422],[117.715163,36.600546],[117.706792,36.593559],[117.715321,36.578537],[117.706792,36.581469],[117.696132,36.575042],[117.694315,36.568896],[117.720849,36.560057],[117.72377,36.54732],[117.739406,36.539925],[117.742486,36.525737],[117.750777,36.524652],[117.76586,36.512994],[117.765544,36.509496],[117.751646,36.509979],[117.735853,36.504993],[117.743118,36.498439],[117.755673,36.496228],[117.757332,36.484485],[117.748566,36.478694],[117.765544,36.469845],[117.757016,36.459144],[117.763491,36.452868],[117.755752,36.445303],[117.779838,36.441239],[117.786471,36.434277],[117.7965,36.43963],[117.799343,36.432265],[117.817268,36.436129],[117.822717,36.44305],[117.833062,36.44301],[117.826823,36.427114],[117.829508,36.417776],[117.855094,36.412945],[117.859279,36.389433],[117.867492,36.386373],[117.879732,36.370626],[117.882101,36.35673],[117.890314,36.366035],[117.89521,36.359227],[117.893472,36.339446],[117.902633,36.352057],[117.915346,36.352903],[117.933904,36.341219],[117.933509,36.334369],[117.919611,36.324738],[117.918347,36.317725],[117.924823,36.313171],[117.922533,36.300514],[117.93114,36.283742],[117.926797,36.277532],[117.932719,36.271846],[117.943696,36.274064],[117.972993,36.268378],[117.975362,36.262328],[117.96707,36.248251],[117.96328,36.224971],[117.967781,36.21464],[117.959332,36.204308],[117.943933,36.207981],[117.928534,36.196558],[117.921664,36.203662],[117.914636,36.200837],[117.915899,36.192562],[117.903027,36.172092],[117.912109,36.171648],[117.917873,36.16337],[117.90666,36.152708],[117.914162,36.140631],[117.91203,36.132753],[117.923875,36.1174],[117.921111,36.110005],[117.931535,36.094203],[117.939984,36.094324],[117.946618,36.100387],[117.954041,36.090201],[117.953172,36.081833],[117.946223,36.08151],[117.94188,36.071807],[117.948829,36.062589],[117.935799,36.061214],[117.932798,36.052196],[117.946855,36.04253],[117.949855,36.018259],[117.94338,36.017288],[117.950803,35.996489],[117.937536,35.99653],[117.935088,36.004421],[117.926165,36.005068],[117.922848,36.015467],[117.914557,36.020039],[117.895052,36.020363],[117.877047,36.016357],[117.866386,36.007415],[117.854462,36.006889],[117.841827,36.011947],[117.828719,36.008022],[117.825244,36.013363],[117.801159,36.012959],[117.794763,36.015143],[117.782286,36.007294],[117.781022,35.995437],[117.762307,35.990621],[117.756621,35.991916],[117.756542,36.002236],[117.750304,36.011947],[117.757016,36.019392],[117.741696,36.036058],[117.725824,36.029667],[117.720454,36.038243],[117.701186,36.04528],[117.689972,36.052358],[117.656569,36.049729],[117.630588,36.059879],[117.601844,36.075648],[117.575943,36.074516],[117.561649,36.079327],[117.552884,36.087978],[117.547672,36.106166],[117.534879,36.111419],[117.505898,36.098245],[117.491052,36.096587],[117.484893,36.10075],[117.473758,36.089797],[117.451963,36.087412],[117.447067,36.09206],[117.456148,36.100467],[117.454885,36.111177],[117.463571,36.116875],[117.44683,36.120834],[117.459623,36.1498],[117.469178,36.154687],[117.476601,36.150123],[117.487972,36.15921],[117.475653,36.173102],[117.461202,36.170194],[117.446988,36.18691],[117.440434,36.191189],[117.452437,36.203138],[117.447778,36.203541],[117.447383,36.218313],[117.427878,36.221662],[117.412716,36.210927],[117.396607,36.215972],[117.385235,36.226989],[117.393132,36.226747],[117.392895,36.237439],[117.417217,36.243652],[117.413901,36.267934],[117.394553,36.266522],[117.397791,36.283782],[117.387604,36.285556],[117.38792,36.296361],[117.379707,36.315146],[117.38871,36.326148],[117.387762,36.337915],[117.362729,36.360234],[117.351753,36.377997],[117.35041,36.393379],[117.344962,36.403968],[117.339434,36.425786],[117.339118,36.438181],[117.346936,36.455724],[117.346383,36.46373],[117.335328,36.466345],[117.30682,36.467029],[117.30682,36.472097],[117.288184,36.476039],[117.288973,36.468718],[117.275786,36.451218],[117.263862,36.449206],[117.249726,36.436732],[117.242145,36.41528],[117.218297,36.406182],[117.208742,36.405297],[117.200924,36.389755],[117.191685,36.378762],[117.180945,36.37256],[117.18292,36.360798],[117.179603,36.353144],[117.161361,36.351895],[117.142567,36.345731],[117.137039,36.335135],[117.111691,36.340413],[117.107347,36.338882],[117.088711,36.346013],[117.07734,36.321957],[117.077655,36.307205],[117.074102,36.296724],[117.066995,36.296885],[117.051201,36.288741],[117.0482,36.283701],[117.030275,36.277532],[117.027353,36.268983],[117.003347,36.265353],[117.002794,36.254503],[116.987632,36.250711],[116.975471,36.243208],[116.956835,36.259787],[116.950201,36.257327],[116.932828,36.261925],[116.928722,36.26991],[116.891133,36.255471],[116.873129,36.264062],[116.867759,36.28108],[116.855519,36.289709],[116.855756,36.301642],[116.830644,36.294587],[116.808612,36.299022],[116.786659,36.311357],[116.772761,36.312002],[116.762574,36.305391],[116.732961,36.294144],[116.710376,36.279185],[116.701058,36.280153],[116.686528,36.275435],[116.675709,36.276645],[116.649018,36.295797],[116.615536,36.294587],[116.610403,36.282451],[116.595794,36.270999],[116.587502,36.268862],[116.581264,36.255471],[116.574393,36.263457],[116.558837,36.261037],[116.552361,36.247767],[116.53641,36.245588],[116.525591,36.255229],[116.512325,36.253414],[116.506402,36.240344],[116.485239,36.236067],[116.487529,36.228441],[116.472604,36.21464],[116.481922,36.197002],[116.502059,36.192764],[116.51035,36.176857],[116.525986,36.168297],[116.52188,36.157151],[116.510192,36.148346],[116.507192,36.141277],[116.519748,36.141196],[116.528513,36.145276],[116.525275,36.135298],[116.543122,36.13958],[116.5586,36.133804],[116.562153,36.121643],[116.569024,36.118774],[116.566891,36.108752],[116.554651,36.108187],[116.546597,36.101195],[116.543359,36.086604],[116.532303,36.074274],[116.504112,36.064732],[116.471182,36.06457],[116.452072,36.058019],[116.449387,36.047302],[116.434541,36.038607],[116.436121,36.046534],[116.429566,36.052439],[116.433357,36.059839],[116.427829,36.067441],[116.409508,36.068007],[116.401059,36.074031],[116.398058,36.084582],[116.386845,36.090807],[116.360233,36.084744],[116.352731,36.070797],[116.338753,36.060082],[116.324855,36.054178],[116.310404,36.052196],[116.304718,36.046251],[116.301244,36.031123],[116.294689,36.031407],[116.271552,36.043824],[116.267998,36.052964],[116.267287,36.074233],[116.273368,36.093758],[116.27171,36.109843],[116.261444,36.122693],[116.246677,36.149436],[116.226066,36.173748],[116.234911,36.180935],[116.255047,36.203703],[116.280159,36.221945],[116.28624,36.239174],[116.307166,36.259464],[116.310799,36.270515],[116.322644,36.284669],[116.331251,36.290677],[116.374526,36.3039],[116.406745,36.319015],[116.430593,36.318007],[116.441411,36.321755],[116.449071,36.337149],[116.484607,36.336948],[116.503717,36.369982],[116.519984,36.384158],[116.528592,36.387259],[116.546202,36.40892],[116.591213,36.416286],[116.612377,36.42333],[116.6198,36.428522],[116.620905,36.44144],[116.611429,36.459104],[116.613009,36.473425],[116.595636,36.480383],[116.593267,36.485973],[116.602032,36.495223],[116.624301,36.497233],[116.627223,36.508853],[116.610087,36.51609],[116.60835,36.52011],[116.622801,36.532651],[116.629592,36.544587],[116.646728,36.544105],[116.658968,36.553026],[116.662916,36.563111],[116.661258,36.578376],[116.682421,36.580586],[116.694345,36.591149],[116.693319,36.607895],[116.71314,36.608858],[116.742042,36.620381],[116.759494,36.632746],[116.763126,36.651971],[116.777262,36.660718],[116.780736,36.671552],[116.780657,36.691048],[116.799689,36.694417],[116.802768,36.706729],[116.830881,36.723851],[116.842489,36.72786],[116.861757,36.730345],[116.873997,36.739846],[116.88679,36.745538],[116.883868,36.758243],[116.87076,36.759164],[116.865548,36.777877],[116.868233,36.801872],[116.872813,36.812004],[116.887975,36.811404],[116.882447,36.824058],[116.887106,36.833427],[116.892476,36.830023],[116.919404,36.822776],[116.933223,36.823697],[116.935908,36.829743],[116.934724,36.845116],[116.9442,36.844916],[116.948069,36.839231],[116.962836,36.842674],[116.96181,36.867529],[116.963152,36.893896],[116.957466,36.916495],[116.934408,36.925973],[116.922563,36.93453],[116.935434,36.93457],[116.931881,36.946204],[116.933381,36.959595],[116.907717,36.963272],[116.897767,36.962712],[116.899188,36.977499],[116.886158,36.983573],[116.885764,36.991444],[116.875024,36.999274],[116.891607,37.00271],[116.907796,37.019046],[116.943173,37.030907],[116.948701,37.036537],[116.944279,37.042327],[116.928643,37.05103],[116.925247,37.069831],[116.91972,37.081364],[116.919009,37.093056],[116.931486,37.100477],[116.982578,37.113601],[117.004531,37.121219],[117.024273,37.119664],[117.044884,37.122615],[117.047411,37.134739],[117.059809,37.137251],[117.054676,37.141717],[117.050648,37.160894],[117.061783,37.16496],[117.06352,37.182656],[117.05744,37.192141],[117.045358,37.197161],[117.037382,37.195169],[117.037777,37.207361],[117.022299,37.215089],[117.03596,37.224091],[117.036592,37.237393],[117.042673,37.238867],[117.041251,37.247667],[117.032328,37.253241],[117.030275,37.264229],[117.038961,37.266538],[117.024273,37.278918],[117.002241,37.285962],[116.993397,37.32201],[116.986684,37.335335],[116.987158,37.342692],[117.006663,37.355138],[117.009664,37.359671],[116.99924,37.376964],[117.008164,37.392464],[117.019693,37.405419],[117.018193,37.418967],[117.029406,37.435174],[117.085631,37.437517],[117.096845,37.440099],[117.104978,37.455309],[117.098819,37.469721],[117.109795,37.47901],[117.124878,37.483853],[117.135618,37.475239],[117.163809,37.478971],[117.176049,37.486116],[117.199345,37.487148],[117.22114,37.51318],[117.230063,37.528891],[117.238197,37.532897],[117.260861,37.530081],[117.273417,37.532619]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370200,\"name\":\"青岛市\",\"center\":[120.355173,36.082982],\"centroid\":[120.150851,36.451234],\"childrenNum\":10,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":1,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.850108,36.612271],[120.86598,36.605606],[120.884854,36.60143],[120.891961,36.58898],[120.893382,36.57918],[120.91265,36.568414],[120.923785,36.572029],[120.936341,36.56532],[120.962163,36.562789],[120.969349,36.559495],[120.983326,36.545913],[120.983958,36.540809],[120.962716,36.519225],[120.954345,36.507567],[120.95861,36.498721],[120.954977,36.489311],[120.967691,36.47797],[120.963585,36.464334],[120.952371,36.459184],[120.947238,36.449287],[120.938315,36.44812],[120.934524,36.454678],[120.920152,36.455201],[120.907833,36.445987],[120.917388,36.435364],[120.91881,36.425383],[120.925522,36.419909],[120.935077,36.421036],[120.927812,36.410047],[120.918968,36.419144],[120.903332,36.406142],[120.891645,36.389675],[120.895909,36.376104],[120.872061,36.367001],[120.87443,36.373244],[120.854925,36.381903],[120.851134,36.406021],[120.859505,36.412422],[120.858952,36.424578],[120.838342,36.436974],[120.842369,36.441601],[120.843001,36.457736],[120.83921,36.464374],[120.828471,36.466627],[120.759453,36.462604],[120.756768,36.458098],[120.761664,36.443211],[120.760084,36.434559],[120.751003,36.431299],[120.736868,36.432829],[120.726997,36.422928],[120.72597,36.413912],[120.71144,36.408678],[120.694383,36.390158],[120.700385,36.37123],[120.709703,36.368089],[120.716494,36.360516],[120.72676,36.359831],[120.729603,36.349801],[120.739632,36.3386],[120.744449,36.328163],[120.73821,36.32373],[120.707966,36.328929],[120.692093,36.325544],[120.663033,36.33179],[120.656005,36.322158],[120.66635,36.309342],[120.665718,36.29749],[120.656005,36.28862],[120.65482,36.27983],[120.659716,36.27483],[120.677326,36.281443],[120.686249,36.279104],[120.685855,36.260231],[120.689724,36.251437],[120.681038,36.238932],[120.689171,36.230176],[120.696752,36.204026],[120.693041,36.190624],[120.697147,36.168579],[120.707255,36.165066],[120.707018,36.159331],[120.698332,36.158887],[120.704333,36.152344],[120.705439,36.139702],[120.716257,36.142085],[120.719811,36.13441],[120.71223,36.126572],[120.695647,36.123744],[120.672667,36.129844],[120.650951,36.117885],[120.632235,36.113319],[120.621259,36.119259],[120.612099,36.117521],[120.607834,36.107217],[120.599859,36.101801],[120.579248,36.103943],[120.580827,36.111419],[120.573325,36.114248],[120.567087,36.105964],[120.547187,36.10952],[120.552241,36.097881],[120.547345,36.092141],[120.526261,36.093435],[120.497832,36.08624],[120.479827,36.091656],[120.467587,36.087169],[120.449662,36.07302],[120.441923,36.063236],[120.437185,36.0655],[120.42226,36.054986],[120.415311,36.057413],[120.404413,36.051589],[120.38783,36.051711],[120.389172,36.059394],[120.37022,36.053409],[120.371089,36.044835],[120.365166,36.041398],[120.35798,36.04892],[120.345661,36.043541],[120.337922,36.044633],[120.342897,36.05167],[120.337527,36.054986],[120.324577,36.051104],[120.324814,36.059515],[120.315969,36.059677],[120.307993,36.050214],[120.296069,36.052439],[120.297649,36.045361],[120.286119,36.047181],[120.290147,36.060526],[120.30136,36.071282],[120.311231,36.087614],[120.312653,36.100185],[120.317549,36.108106],[120.326235,36.111662],[120.333658,36.134652],[120.347004,36.155818],[120.356953,36.166076],[120.358217,36.174757],[120.369509,36.177745],[120.35877,36.200312],[120.336896,36.213954],[120.319997,36.232234],[120.297412,36.225455],[120.293305,36.219241],[120.29828,36.203783],[120.313205,36.196316],[120.310283,36.185295],[120.291489,36.185941],[120.28075,36.17932],[120.276564,36.185699],[120.262982,36.182267],[120.260929,36.198415],[120.244819,36.199384],[120.235027,36.189211],[120.224445,36.19131],[120.217338,36.211412],[120.20723,36.211613],[120.181566,36.203945],[120.164351,36.188767],[120.140345,36.173304],[120.142556,36.143539],[120.128105,36.129723],[120.1086,36.12742],[120.116023,36.114046],[120.116891,36.102852],[120.152111,36.095254],[120.161903,36.082682],[120.173906,36.077225],[120.181645,36.066511],[120.19499,36.064206],[120.231868,36.063842],[120.241345,36.060445],[120.24095,36.047828],[120.230605,36.044916],[120.23479,36.030638],[120.223656,36.022385],[120.223577,36.016398],[120.19886,35.99572],[120.213232,35.998351],[120.244977,36.020444],[120.25698,36.024813],[120.265509,36.014011],[120.256427,36.005433],[120.248768,35.992078],[120.247662,35.982567],[120.254927,35.980826],[120.265588,36.001062],[120.271273,35.99394],[120.278775,35.996368],[120.27459,36.004664],[120.289673,36.017086],[120.309494,36.014132],[120.316522,36.002155],[120.305072,35.97184],[120.284619,35.965565],[120.261718,35.965484],[120.251531,35.95937],[120.246477,35.947466],[120.233132,35.941553],[120.222076,35.924947],[120.209284,35.917616],[120.204388,35.910404],[120.202098,35.89205],[120.185198,35.88747],[120.169405,35.888565],[120.172169,35.904408],[120.184172,35.915671],[120.194438,35.93402],[120.210784,35.938435],[120.207862,35.947344],[120.179276,35.936653],[120.167983,35.918426],[120.15677,35.909149],[120.147768,35.907852],[120.141924,35.919438],[120.142714,35.909392],[120.135843,35.905421],[120.12542,35.906718],[120.123998,35.895291],[120.118392,35.888524],[120.102203,35.881918],[120.084041,35.880378],[120.07875,35.885768],[120.062798,35.87134],[120.036423,35.824753],[120.033264,35.806013],[120.041319,35.799198],[120.049453,35.782278],[120.043135,35.776759],[120.03745,35.763041],[120.037529,35.753908],[120.031369,35.752244],[120.020235,35.722239],[120.011074,35.713223],[120.001519,35.720209],[119.981224,35.715335],[119.986041,35.729711],[119.978461,35.739496],[119.967879,35.74108],[119.969932,35.749078],[119.959982,35.759104],[119.937081,35.763407],[119.924841,35.758252],[119.920735,35.737548],[119.930369,35.728899],[119.949321,35.729873],[119.953349,35.72561],[119.952954,35.713142],[119.94482,35.705506],[119.923894,35.696529],[119.910864,35.674305],[119.912285,35.660651],[119.927921,35.65045],[119.925157,35.63736],[119.902493,35.63297],[119.894597,35.628742],[119.877619,35.610972],[119.868379,35.608817],[119.851717,35.622074],[119.844768,35.623619],[119.831422,35.618333],[119.829606,35.643702],[119.824315,35.646304],[119.818472,35.63858],[119.800625,35.626465],[119.802204,35.620244],[119.792649,35.615446],[119.802994,35.609183],[119.800467,35.59869],[119.792649,35.59385],[119.800862,35.581891],[119.786174,35.576073],[119.780172,35.58486],[119.76967,35.577212],[119.762483,35.578351],[119.752849,35.588684],[119.751349,35.617845],[119.729949,35.618943],[119.717946,35.615649],[119.682173,35.590027],[119.662115,35.589294],[119.651455,35.588766],[119.634713,35.598731],[119.614972,35.606336],[119.609286,35.59202],[119.600599,35.590271],[119.592308,35.600683],[119.57762,35.586243],[119.556535,35.592508],[119.538215,35.589294],[119.536872,35.606011],[119.518157,35.615446],[119.517762,35.625774],[119.524474,35.632279],[119.528265,35.674305],[119.519105,35.68552],[119.51484,35.697992],[119.518473,35.700632],[119.521079,35.716879],[119.517762,35.723742],[119.525422,35.730604],[119.527317,35.723214],[119.545085,35.726747],[119.560563,35.721752],[119.566485,35.714523],[119.576988,35.71237],[119.588833,35.715701],[119.601231,35.709446],[119.614182,35.716675],[119.624685,35.712817],[119.627843,35.722077],[119.605495,35.747454],[119.591992,35.753218],[119.596256,35.773756],[119.611576,35.776597],[119.617972,35.789623],[119.60897,35.799279],[119.612445,35.812707],[119.622631,35.816114],[119.629344,35.833878],[119.649796,35.845191],[119.664326,35.841015],[119.676014,35.842515],[119.68699,35.861814],[119.704047,35.863962],[119.71834,35.853138],[119.725211,35.856746],[119.72221,35.865138],[119.736898,35.86303],[119.738003,35.873123],[119.727738,35.902544],[119.721262,35.906718],[119.716208,35.927337],[119.701362,35.923732],[119.701757,35.944469],[119.690149,35.963702],[119.684858,35.982648],[119.689122,36.000212],[119.681068,36.012068],[119.706495,36.028292],[119.717314,36.044229],[119.704126,36.055269],[119.695677,36.053045],[119.675698,36.064085],[119.666695,36.062993],[119.633608,36.067683],[119.632187,36.091535],[119.657061,36.100872],[119.657614,36.108631],[119.643716,36.127178],[119.651218,36.130531],[119.649954,36.137157],[119.660852,36.154122],[119.671039,36.177866],[119.681305,36.18045],[119.691728,36.176292],[119.723473,36.175565],[119.732792,36.172536],[119.733818,36.163572],[119.748111,36.158645],[119.772354,36.167691],[119.782778,36.165308],[119.792333,36.171648],[119.813023,36.167691],[119.81326,36.175242],[119.821315,36.171285],[119.82242,36.177987],[119.831738,36.180612],[119.823131,36.19894],[119.828816,36.210685],[119.819498,36.211856],[119.808048,36.232839],[119.82092,36.244499],[119.820446,36.257367],[119.82929,36.258859],[119.83387,36.278822],[119.848795,36.292692],[119.854402,36.302328],[119.862773,36.302368],[119.865379,36.308898],[119.891991,36.318773],[119.896966,36.334047],[119.895939,36.34827],[119.904784,36.369942],[119.90431,36.38154],[119.909837,36.384359],[119.93029,36.385165],[119.936371,36.380655],[119.945452,36.384682],[119.941425,36.39503],[119.926421,36.403324],[119.925236,36.419346],[119.933923,36.42007],[119.935976,36.427436],[119.949795,36.446511],[119.953981,36.444217],[119.968432,36.450051],[119.994175,36.450333],[119.996623,36.446309],[120.011864,36.454236],[120.012812,36.467833],[120.006889,36.468799],[120.004125,36.477447],[120.010758,36.484445],[120.004204,36.489512],[120.010364,36.509255],[119.997571,36.504431],[119.974749,36.515688],[119.971985,36.522441],[119.951375,36.519788],[119.936292,36.511507],[119.936687,36.496389],[119.923025,36.495464],[119.920261,36.522079],[119.917576,36.525858],[119.826763,36.54101],[119.798019,36.551619],[119.784516,36.554673],[119.755929,36.565521],[119.74748,36.571788],[119.72758,36.562749],[119.730107,36.581027],[119.701125,36.602634],[119.681857,36.606891],[119.670328,36.616246],[119.651297,36.623633],[119.625079,36.638807],[119.617025,36.652532],[119.61355,36.66453],[119.607154,36.667379],[119.596651,36.689884],[119.587412,36.696101],[119.579831,36.711581],[119.567433,36.713065],[119.561036,36.720884],[119.547059,36.725454],[119.534977,36.743333],[119.530555,36.765256],[119.532766,36.78008],[119.539162,36.787732],[119.539162,36.799949],[119.550613,36.80868],[119.563721,36.802753],[119.56767,36.805717],[119.597757,36.857244],[119.599652,36.878253],[119.599968,36.920614],[119.5837,36.950441],[119.598072,36.989406],[119.604548,36.996038],[119.60976,37.013894],[119.619078,37.017848],[119.61971,37.012895],[119.629344,37.01621],[119.66251,37.008262],[119.681699,36.998475],[119.716998,37.007144],[119.722289,36.993401],[119.731133,36.988487],[119.743057,36.992483],[119.750559,36.990844],[119.769906,36.996597],[119.771881,37.006984],[119.804968,37.013814],[119.820209,36.999594],[119.829606,37.002031],[119.85148,37.002031],[119.900045,36.997556],[119.902257,36.9948],[119.923341,36.993961],[119.939608,37.004108],[119.949716,37.006185],[119.961561,37.013654],[119.975618,37.011098],[119.980198,37.018088],[119.993543,37.012176],[120.002309,37.013494],[120.024104,36.999913],[120.035238,36.998395],[120.049374,37.020045],[120.09249,37.017928],[120.101571,37.014293],[120.123051,37.01645],[120.138134,37.022201],[120.142319,37.015292],[120.159929,37.013375],[120.167273,37.017968],[120.166404,37.025795],[120.173037,37.034421],[120.180697,37.032544],[120.189621,37.038094],[120.193411,37.034261],[120.205335,37.038374],[120.21647,37.056699],[120.214101,37.07019],[120.220497,37.08711],[120.229894,37.089544],[120.231237,37.106301],[120.236606,37.125965],[120.245688,37.118906],[120.264087,37.114718],[120.280828,37.13111],[120.303413,37.130153],[120.300176,37.119584],[120.315337,37.113043],[120.320628,37.10654],[120.331684,37.111966],[120.336896,37.104267],[120.336343,37.092058],[120.34574,37.087789],[120.348583,37.077094],[120.357822,37.084357],[120.362244,37.100477],[120.369667,37.104626],[120.388225,37.104227],[120.398096,37.096447],[120.408914,37.09517],[120.412942,37.103149],[120.407098,37.112803],[120.415153,37.110569],[120.439475,37.116912],[120.440265,37.122655],[120.462928,37.115157],[120.478643,37.124211],[120.493015,37.126723],[120.493805,37.1345],[120.505729,37.143551],[120.506834,37.148854],[120.517258,37.148974],[120.527129,37.143352],[120.527998,37.136733],[120.542528,37.128677],[120.547661,37.113003],[120.536368,37.081963],[120.539843,37.060371],[120.533289,37.053944],[120.541738,37.044163],[120.549793,37.041288],[120.558953,37.047437],[120.570877,37.046399],[120.58446,37.058136],[120.586513,37.048515],[120.606176,37.047157],[120.613915,37.023839],[120.601754,37.012696],[120.606413,37.001192],[120.593857,36.991244],[120.582328,37.001791],[120.575931,36.999074],[120.574036,36.987568],[120.568508,36.983293],[120.566534,36.96559],[120.560296,36.960674],[120.563218,36.95172],[120.571114,36.948682],[120.574984,36.927053],[120.592909,36.912216],[120.617389,36.911136],[120.622838,36.907377],[120.622838,36.890856],[120.592909,36.882134],[120.576642,36.879894],[120.57988,36.858885],[120.588408,36.859045],[120.595989,36.852681],[120.58754,36.843635],[120.589751,36.838791],[120.609809,36.832906],[120.612336,36.829223],[120.601517,36.804996],[120.590382,36.801552],[120.563454,36.802953],[120.56377,36.795343],[120.5554,36.778718],[120.540791,36.7679],[120.544502,36.76213],[120.546397,36.744616],[120.560375,36.742492],[120.562586,36.736479],[120.584065,36.735236],[120.58525,36.728501],[120.596542,36.708052],[120.586118,36.698829],[120.589751,36.694497],[120.616521,36.689764],[120.619206,36.681541],[120.631446,36.673357],[120.625128,36.671231],[120.627339,36.659836],[120.642027,36.666095],[120.652135,36.663327],[120.648977,36.655863],[120.660585,36.647998],[120.657426,36.626644],[120.644712,36.626524],[120.643449,36.613436],[120.635947,36.597775],[120.637763,36.574199],[120.664059,36.583478],[120.665402,36.587454],[120.679695,36.589181],[120.702991,36.598338],[120.699121,36.60665],[120.70836,36.612914],[120.708281,36.621385],[120.725733,36.624436],[120.751556,36.615042],[120.757557,36.606088],[120.765533,36.607011],[120.777062,36.600546],[120.779747,36.591551],[120.786223,36.589663],[120.850108,36.612271]]],[[[120.584381,36.096183],[120.587461,36.099457],[120.595042,36.090282],[120.579485,36.091535],[120.584381,36.096183]]],[[[120.990039,36.413348],[120.981431,36.417494],[120.963663,36.41363],[120.950318,36.414757],[120.948502,36.421117],[120.9639,36.424618],[120.969823,36.431581],[120.978115,36.428643],[120.990039,36.413348]]],[[[121.004253,36.488306],[120.988538,36.485249],[120.989881,36.492367],[121.004253,36.488306]]],[[[120.877352,35.89359],[120.888802,35.897277],[120.875377,35.888443],[120.877352,35.89359]]],[[[119.73524,35.595762],[119.738872,35.599666],[119.743689,35.591328],[119.741873,35.583884],[119.73524,35.595762]]],[[[120.158823,35.76499],[120.17209,35.785727],[120.180539,35.788649],[120.184725,35.766978],[120.192858,35.757156],[120.187962,35.748712],[120.173037,35.741405],[120.158665,35.744896],[120.155428,35.751838],[120.158823,35.76499]]],[[[120.775088,36.237963],[120.777457,36.222308],[120.76806,36.230701],[120.775088,36.237963]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370300,\"name\":\"淄博市\",\"center\":[118.047648,36.814939],\"centroid\":[118.058672,36.610968],\"childrenNum\":8,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":2,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.718006,36.697826],[117.725666,36.695219],[117.754173,36.696944],[117.777942,36.695219],[117.78197,36.70304],[117.793025,36.707451],[117.795157,36.719761],[117.810161,36.734394],[117.820743,36.756359],[117.826429,36.763011],[117.834404,36.751871],[117.832983,36.744816],[117.852488,36.750708],[117.850672,36.764735],[117.840327,36.777516],[117.825639,36.775834],[117.824297,36.787933],[117.815531,36.788573],[117.814662,36.797306],[117.820901,36.801511],[117.822085,36.825139],[117.831877,36.836629],[117.828008,36.855883],[117.832825,36.859966],[117.856594,36.859926],[117.865597,36.866529],[117.875152,36.861246],[117.891103,36.864408],[117.891814,36.871811],[117.917005,36.86973],[117.9189,36.880094],[117.929719,36.890216],[117.940616,36.891616],[117.9403,36.901177],[117.950645,36.902137],[117.960674,36.910376],[117.96178,36.922494],[117.949145,36.918375],[117.94338,36.930012],[117.935404,36.915736],[117.936115,36.93489],[117.931772,36.941886],[117.913372,36.953679],[117.910292,36.962592],[117.911951,36.975141],[117.906581,36.981695],[117.870493,36.985451],[117.866623,36.993282],[117.866386,37.007024],[117.870493,37.013375],[117.865992,37.023719],[117.841827,37.026354],[117.840327,37.035539],[117.847355,37.065959],[117.800369,37.070789],[117.771783,37.069032],[117.761991,37.065839],[117.739801,37.064921],[117.726692,37.068753],[117.703002,37.068673],[117.673942,37.073143],[117.644645,37.083878],[117.619375,37.090103],[117.608477,37.090622],[117.590946,37.084996],[117.575074,37.089185],[117.567888,37.11029],[117.576969,37.114758],[117.574442,37.12106],[117.557464,37.124211],[117.551305,37.146781],[117.574284,37.151366],[117.586366,37.160216],[117.592052,37.169624],[117.598212,37.203058],[117.615348,37.212699],[117.627193,37.228074],[117.63043,37.247269],[117.644329,37.265862],[117.659491,37.274101],[117.675995,37.270121],[117.693447,37.257661],[117.729851,37.249101],[117.760333,37.244959],[117.773678,37.244959],[117.782128,37.248702],[117.818848,37.276012],[117.83859,37.282659],[117.850909,37.28246],[117.8776,37.273027],[117.888497,37.262319],[117.909266,37.265065],[117.941327,37.280549],[117.948829,37.26829],[117.947013,37.262159],[117.963833,37.271753],[117.990603,37.262358],[117.990761,37.248981],[117.996446,37.246273],[117.981048,37.238429],[117.973862,37.216483],[117.98089,37.218674],[117.984364,37.210349],[117.994393,37.212699],[118.010898,37.20756],[118.019584,37.210309],[118.022348,37.2221],[118.036799,37.220905],[118.046275,37.216324],[118.048012,37.205568],[118.064122,37.21007],[118.074072,37.204094],[118.077941,37.188953],[118.082995,37.185605],[118.071545,37.177675],[118.074467,37.170341],[118.062385,37.162528],[118.059858,37.151087],[118.065069,37.139564],[118.079679,37.120781],[118.068623,37.115875],[118.057252,37.106141],[118.045485,37.105982],[118.045959,37.098202],[118.056857,37.093654],[118.063016,37.082841],[118.086075,37.091899],[118.111187,37.094652],[118.115925,37.100636],[118.130455,37.091101],[118.136062,37.077773],[118.13622,37.06536],[118.156909,37.065281],[118.15762,37.057776],[118.150829,37.054743],[118.15146,37.047038],[118.139615,37.044363],[118.139299,37.033103],[118.134008,37.025955],[118.139299,37.014693],[118.138983,37.005985],[118.153198,37.000512],[118.15146,36.988527],[118.161331,36.988567],[118.160936,36.981934],[118.192918,36.977739],[118.195209,36.967348],[118.209739,36.963152],[118.222531,36.967109],[118.231376,36.974822],[118.235087,36.98557],[118.247327,36.98613],[118.250802,37.002949],[118.262568,37.00271],[118.271412,37.006744],[118.288785,36.999993],[118.291628,36.995878],[118.294629,36.969666],[118.312476,36.970905],[118.322347,36.974502],[118.324637,36.964751],[118.3443,36.960714],[118.352276,36.974582],[118.384652,36.974382],[118.387574,36.971305],[118.386548,36.950481],[118.401788,36.949802],[118.40321,36.943125],[118.439061,36.942206],[118.467411,36.945484],[118.494339,36.941846],[118.492365,36.931611],[118.496708,36.924733],[118.48968,36.914096],[118.481862,36.914136],[118.474913,36.905297],[118.483046,36.900777],[118.482809,36.879214],[118.476966,36.876893],[118.465042,36.861366],[118.479967,36.860166],[118.480993,36.852641],[118.460462,36.846597],[118.461488,36.854322],[118.453828,36.857564],[118.450038,36.83747],[118.435508,36.838391],[118.44072,36.828142],[118.438666,36.809682],[118.424531,36.802673],[118.419872,36.796304],[118.388522,36.791217],[118.350222,36.768301],[118.321636,36.770905],[118.318161,36.77972],[118.307501,36.776234],[118.297788,36.777677],[118.298183,36.753914],[118.279546,36.753033],[118.27157,36.744015],[118.276151,36.731749],[118.284363,36.72337],[118.277019,36.719801],[118.264147,36.72373],[118.254276,36.731789],[118.234219,36.726457],[118.227743,36.717957],[118.237614,36.712704],[118.227585,36.697625],[118.238246,36.697305],[118.245037,36.690647],[118.228059,36.694016],[118.21653,36.6811],[118.215819,36.668262],[118.226796,36.668382],[118.230191,36.660357],[118.221189,36.664169],[118.215898,36.648921],[118.199631,36.639047],[118.20658,36.637482],[118.214793,36.621144],[118.200657,36.612071],[118.189523,36.599141],[118.180363,36.593599],[118.176967,36.582996],[118.180678,36.577412],[118.180915,36.5607],[118.183916,36.561142],[118.191892,36.546074],[118.214556,36.539322],[118.221663,36.531887],[118.210844,36.526099],[118.213766,36.513075],[118.210528,36.503466],[118.218346,36.497354],[118.212818,36.490075],[118.216135,36.478573],[118.229638,36.467793],[118.233508,36.456609],[118.22719,36.451379],[118.232797,36.432869],[118.228533,36.430736],[118.224427,36.414234],[118.227427,36.408034],[118.250407,36.411214],[118.251592,36.401995],[118.235403,36.389634],[118.239825,36.376748],[118.256093,36.363175],[118.262726,36.352218],[118.261857,36.345852],[118.269912,36.339849],[118.300157,36.338116],[118.291075,36.326189],[118.304105,36.321393],[118.30908,36.307125],[118.315477,36.304464],[118.310107,36.295716],[118.317609,36.288903],[118.31366,36.277371],[118.315003,36.266361],[118.306948,36.252123],[118.31524,36.24938],[118.350775,36.263538],[118.368385,36.248412],[118.379756,36.245265],[118.386548,36.239053],[118.382046,36.207335],[118.374387,36.203097],[118.387653,36.174555],[118.402262,36.162926],[118.405263,36.141641],[118.402183,36.131622],[118.412844,36.127218],[118.428953,36.132672],[118.440956,36.132511],[118.447116,36.140913],[118.457303,36.13247],[118.462594,36.14059],[118.487863,36.131784],[118.492601,36.127057],[118.479493,36.118814],[118.484468,36.104064],[118.478545,36.098245],[118.482099,36.092546],[118.48044,36.074071],[118.496866,36.067683],[118.507842,36.074961],[118.516608,36.068573],[118.513449,36.064085],[118.522214,36.05349],[118.522609,36.043622],[118.516845,36.026107],[118.507447,36.029789],[118.503341,36.024246],[118.489206,36.025784],[118.476097,36.031407],[118.469859,36.022992],[118.476571,36.012797],[118.487074,36.005797],[118.49268,35.995437],[118.486521,35.988759],[118.499393,35.976212],[118.505157,35.965808],[118.502157,35.962488],[118.470964,35.960868],[118.459356,35.952689],[118.430612,35.969694],[118.415213,35.990783],[118.387021,35.987586],[118.382283,35.975078],[118.360725,35.970908],[118.352828,35.956698],[118.344774,35.955888],[118.320136,35.946575],[118.314134,35.950827],[118.303552,35.948923],[118.293523,35.937503],[118.281362,35.935964],[118.26928,35.928512],[118.257593,35.925717],[118.257119,35.930699],[118.245906,35.932157],[118.236904,35.939245],[118.236351,35.947749],[118.22569,35.948235],[118.209897,35.955767],[118.207054,35.964391],[118.193787,35.974026],[118.206106,35.97864],[118.197578,36.004947],[118.178388,36.017005],[118.135588,36.02364],[118.132666,36.030436],[118.10937,36.030031],[118.096104,36.024246],[118.093261,36.014618],[118.084338,36.012149],[118.078415,36.017652],[118.075888,36.009034],[118.066807,36.009155],[118.058989,35.992968],[118.042248,35.986371],[118.032693,35.974268],[118.03293,35.964998],[118.02298,35.958965],[118.021084,35.949004],[117.988471,35.947709],[117.984443,35.956293],[117.992577,35.971273],[117.971414,35.969937],[117.953962,35.957913],[117.947013,35.960382],[117.946065,35.970949],[117.937221,35.98119],[117.937536,35.99653],[117.950803,35.996489],[117.94338,36.017288],[117.949855,36.018259],[117.946855,36.04253],[117.932798,36.052196],[117.935799,36.061214],[117.948829,36.062589],[117.94188,36.071807],[117.946223,36.08151],[117.953172,36.081833],[117.954041,36.090201],[117.946618,36.100387],[117.939984,36.094324],[117.931535,36.094203],[117.921111,36.110005],[117.923875,36.1174],[117.91203,36.132753],[117.914162,36.140631],[117.90666,36.152708],[117.917873,36.16337],[117.912109,36.171648],[117.903027,36.172092],[117.915899,36.192562],[117.914636,36.200837],[117.921664,36.203662],[117.928534,36.196558],[117.943933,36.207981],[117.959332,36.204308],[117.967781,36.21464],[117.96328,36.224971],[117.96707,36.248251],[117.975362,36.262328],[117.972993,36.268378],[117.943696,36.274064],[117.932719,36.271846],[117.926797,36.277532],[117.93114,36.283742],[117.922533,36.300514],[117.924823,36.313171],[117.918347,36.317725],[117.919611,36.324738],[117.933509,36.334369],[117.933904,36.341219],[117.915346,36.352903],[117.902633,36.352057],[117.893472,36.339446],[117.89521,36.359227],[117.890314,36.366035],[117.882101,36.35673],[117.879732,36.370626],[117.867492,36.386373],[117.859279,36.389433],[117.855094,36.412945],[117.829508,36.417776],[117.826823,36.427114],[117.833062,36.44301],[117.822717,36.44305],[117.817268,36.436129],[117.799343,36.432265],[117.7965,36.43963],[117.786471,36.434277],[117.779838,36.441239],[117.755752,36.445303],[117.763491,36.452868],[117.757016,36.459144],[117.765544,36.469845],[117.748566,36.478694],[117.757332,36.484485],[117.755673,36.496228],[117.743118,36.498439],[117.735853,36.504993],[117.751646,36.509979],[117.765544,36.509496],[117.76586,36.512994],[117.750777,36.524652],[117.742486,36.525737],[117.739406,36.539925],[117.72377,36.54732],[117.720849,36.560057],[117.694315,36.568896],[117.696132,36.575042],[117.706792,36.581469],[117.715321,36.578537],[117.706792,36.593559],[117.715163,36.600546],[117.697869,36.599422],[117.690525,36.604883],[117.705055,36.605807],[117.706555,36.611549],[117.714926,36.610545],[117.715321,36.627527],[117.70853,36.635154],[117.712241,36.642258],[117.709003,36.651569],[117.698027,36.652974],[117.695184,36.666978],[117.701265,36.685191],[117.715637,36.691208],[117.718006,36.697826]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370400,\"name\":\"枣庄市\",\"center\":[117.557964,34.856424],\"centroid\":[117.39817,34.916234],\"childrenNum\":6,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":3,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.392342,34.574909],[117.393922,34.587676],[117.398976,34.588335],[117.397949,34.604393],[117.407978,34.610651],[117.4109,34.623454],[117.402687,34.628434],[117.384051,34.628228],[117.376707,34.622301],[117.374022,34.636172],[117.366915,34.650246],[117.354201,34.653538],[117.35657,34.661643],[117.346067,34.670982],[117.329247,34.677359],[117.335485,34.692454],[117.324272,34.697307],[117.326167,34.703434],[117.310611,34.717333],[117.304609,34.714866],[117.278787,34.715647],[117.271443,34.726501],[117.253675,34.721444],[117.242067,34.729995],[117.236697,34.746355],[117.22422,34.745533],[117.212927,34.761027],[117.191369,34.780914],[117.180551,34.784201],[117.176523,34.779065],[117.162467,34.782105],[117.172733,34.799194],[117.180314,34.800221],[117.194686,34.816239],[117.17755,34.828722],[117.156623,34.834306],[117.140593,34.846499],[117.139013,34.854052],[117.125826,34.863451],[117.12093,34.903581],[117.110111,34.90514],[117.111059,34.917774],[117.103399,34.937459],[117.082551,34.934917],[117.073707,34.925485],[117.06123,34.930406],[117.05815,34.926961],[117.041093,34.925157],[117.043462,34.932825],[117.038487,34.937869],[117.017719,34.942503],[116.989448,34.93873],[116.980367,34.941027],[116.9671,34.951072],[116.955334,34.967142],[116.943015,34.975627],[116.954466,34.993331],[116.956993,35.01054],[116.951702,35.020618],[116.937172,35.0275],[116.907875,35.046995],[116.900767,35.05977],[116.881183,35.058133],[116.880473,35.062595],[116.900373,35.068737],[116.888212,35.085193],[116.888922,35.093829],[116.863179,35.091496],[116.848649,35.103774],[116.832065,35.123783],[116.825748,35.147631],[116.81793,35.150699],[116.813192,35.159573],[116.81564,35.170777],[116.811218,35.17736],[116.832776,35.184392],[116.85394,35.16861],[116.86618,35.172617],[116.876603,35.188031],[116.898398,35.195757],[116.904716,35.182471],[116.913718,35.178791],[116.925721,35.182266],[116.938277,35.172168],[116.962047,35.177319],[116.969706,35.187377],[116.995687,35.1978],[117.014639,35.214844],[117.028774,35.221219],[117.053333,35.224202],[117.065336,35.22792],[117.092896,35.220361],[117.104899,35.221464],[117.123536,35.23078],[117.152675,35.232047],[117.176681,35.243159],[117.199108,35.24749],[117.204873,35.258518],[117.220824,35.26489],[117.269231,35.261296],[117.262203,35.287472],[117.284472,35.294331],[117.290079,35.299394],[117.305794,35.295229],[117.311163,35.28588],[117.314085,35.302129],[117.308557,35.312579],[117.318034,35.320252],[117.347568,35.315109],[117.359571,35.318375],[117.399528,35.306374],[117.403635,35.301394],[117.406004,35.283348],[117.419191,35.273997],[117.426456,35.261786],[117.439486,35.258927],[117.449752,35.246795],[117.448331,35.231842],[117.468073,35.228369],[117.480628,35.222771],[117.494843,35.205893],[117.507162,35.198986],[117.526825,35.200621],[117.528009,35.184351],[117.548462,35.161741],[117.556043,35.161291],[117.570336,35.168365],[117.58376,35.164317],[117.586208,35.152989],[117.591025,35.152539],[117.600344,35.135524],[117.604371,35.13401],[117.623007,35.113063],[117.650725,35.092724],[117.656885,35.077497],[117.676469,35.065543],[117.69321,35.06018],[117.707345,35.052318],[117.704423,35.031227],[117.736247,35.031514],[117.744618,35.022748],[117.737985,35.013203],[117.728035,35.008041],[117.726534,34.979561],[117.719506,34.968331],[117.724323,34.958329],[117.714689,34.947833],[117.712004,34.934999],[117.704265,34.933605],[117.698501,34.919989],[117.70466,34.906699],[117.715163,34.896238],[117.729298,34.876994],[117.742407,34.874163],[117.75291,34.857623],[117.763175,34.848839],[117.795315,34.835907],[117.803686,34.830734],[117.798632,34.810653],[117.77739,34.801248],[117.784023,34.79484],[117.784576,34.780667],[117.79958,34.768875],[117.830614,34.760246],[117.830061,34.740888],[117.823665,34.72868],[117.825244,34.713139],[117.831719,34.707793],[117.825639,34.684392],[117.819243,34.681842],[117.805818,34.646254],[117.793657,34.651768],[117.796026,34.637736],[117.793657,34.625594],[117.798553,34.621848],[117.791446,34.585082],[117.794605,34.559751],[117.793499,34.548463],[117.799185,34.535155],[117.801712,34.518753],[117.790498,34.518918],[117.773994,34.529056],[117.748645,34.533383],[117.700712,34.54525],[117.684523,34.547351],[117.681996,34.529551],[117.673389,34.515827],[117.659096,34.501071],[117.647014,34.492908],[117.642039,34.496825],[117.629246,34.488538],[117.609662,34.490476],[117.603187,34.476828],[117.592289,34.462518],[117.569783,34.463054],[117.561334,34.471962],[117.54783,34.475179],[117.538275,34.46722],[117.513005,34.472581],[117.493263,34.472663],[117.487341,34.466354],[117.48663,34.482065],[117.48205,34.48594],[117.465467,34.48458],[117.45141,34.506264],[117.438223,34.516445],[117.439486,34.520031],[117.426772,34.525224],[117.424482,34.537009],[117.403793,34.546898],[117.402529,34.569431],[117.392342,34.574909]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370500,\"name\":\"东营市\",\"center\":[118.66471,37.434564],\"centroid\":[118.625299,37.636119],\"childrenNum\":5,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":4,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.039928,37.304466],[118.856959,37.293842],[118.821897,37.288788],[118.777991,37.280112],[118.728399,37.252764],[118.709684,37.241256],[118.680624,37.229269],[118.672332,37.215129],[118.668779,37.198436],[118.660408,37.187877],[118.649274,37.189112],[118.645483,37.178153],[118.633638,37.171178],[118.634191,37.163366],[118.64572,37.159579],[118.649195,37.164243],[118.653617,37.149692],[118.673754,37.144309],[118.667041,37.11392],[118.668384,37.091539],[118.665146,37.081763],[118.655512,37.082681],[118.654091,37.076935],[118.632138,37.070429],[118.631901,37.066757],[118.610895,37.063005],[118.591469,37.068474],[118.580414,37.063325],[118.561303,37.063325],[118.557592,37.051469],[118.56004,37.041408],[118.545431,37.038494],[118.545826,37.023519],[118.57149,37.022081],[118.588389,37.017409],[118.583572,37.008422],[118.590206,37.001351],[118.571174,37.004148],[118.566199,36.999034],[118.580493,36.994999],[118.564146,36.99416],[118.553959,37.000233],[118.552301,36.979657],[118.559803,36.977059],[118.557434,36.96539],[118.560751,36.946564],[118.55467,36.938368],[118.537771,36.936769],[118.52711,36.939687],[118.524583,36.945284],[118.503183,36.944285],[118.503736,36.95156],[118.47665,36.957077],[118.467411,36.945484],[118.439061,36.942206],[118.40321,36.943125],[118.401788,36.949802],[118.386548,36.950481],[118.387574,36.971305],[118.384652,36.974382],[118.352276,36.974582],[118.3443,36.960714],[118.324637,36.964751],[118.322347,36.974502],[118.312476,36.970905],[118.294629,36.969666],[118.291628,36.995878],[118.288785,36.999993],[118.28997,37.00946],[118.308212,37.019885],[118.310186,37.028231],[118.3259,37.035459],[118.324558,37.046279],[118.337588,37.053904],[118.338535,37.072265],[118.332928,37.081923],[118.338851,37.093894],[118.338298,37.10311],[118.349354,37.101753],[118.338219,37.123134],[118.346116,37.123931],[118.340667,37.131748],[118.347616,37.139803],[118.356224,37.139325],[118.361594,37.148495],[118.366569,37.146781],[118.377545,37.154157],[118.380467,37.175164],[118.387574,37.177834],[118.383389,37.190587],[118.376598,37.196962],[118.375966,37.206126],[118.3642,37.210189],[118.346669,37.233252],[118.350459,37.243765],[118.36033,37.244561],[118.368385,37.258576],[118.375729,37.258497],[118.372096,37.273703],[118.36262,37.273783],[118.368069,37.279594],[118.358277,37.280669],[118.355197,37.286997],[118.342168,37.287076],[118.342168,37.295075],[118.325584,37.296866],[118.326058,37.306535],[118.319741,37.305978],[118.31524,37.31477],[118.315398,37.352514],[118.287285,37.352434],[118.291865,37.358518],[118.286495,37.362772],[118.273624,37.360029],[118.262015,37.364283],[118.258541,37.37911],[118.245827,37.376646],[118.245353,37.367781],[118.222768,37.367861],[118.217951,37.371478],[118.216925,37.385191],[118.202,37.382409],[118.161015,37.362573],[118.156198,37.364322],[118.154935,37.377401],[118.141668,37.376487],[118.135509,37.384834],[118.144037,37.392822],[118.16141,37.389961],[118.160147,37.399618],[118.165596,37.4082],[118.163937,37.416742],[118.14996,37.438351],[118.136141,37.441688],[118.114898,37.439742],[118.118531,37.456182],[118.125322,37.45912],[118.112766,37.463528],[118.120426,37.480757],[118.128481,37.483694],[118.127849,37.491831],[118.135035,37.496752],[118.134245,37.507387],[118.139378,37.507427],[118.136772,37.516791],[118.142537,37.518933],[118.150987,37.530517],[118.156988,37.530358],[118.159831,37.539164],[118.173255,37.546858],[118.176098,37.557129],[118.173176,37.563593],[118.141431,37.556297],[118.134166,37.558478],[118.13922,37.571364],[118.131324,37.571285],[118.127612,37.578103],[118.134877,37.590035],[118.148696,37.594078],[118.146722,37.599943],[118.154935,37.605491],[118.157462,37.62035],[118.154935,37.628036],[118.163542,37.63069],[118.165596,37.644633],[118.172545,37.644079],[118.177125,37.657623],[118.195445,37.661742],[118.200657,37.667404],[118.207449,37.661583],[118.22569,37.663682],[118.239431,37.65596],[118.246459,37.658376],[118.260989,37.654614],[118.2846,37.662058],[118.293129,37.670096],[118.294076,37.678529],[118.305132,37.683122],[118.3045,37.690722],[118.316187,37.714151],[118.319425,37.712924],[118.31753,37.728395],[118.337509,37.729502],[118.341931,37.74667],[118.353697,37.750151],[118.353065,37.75814],[118.340667,37.763913],[118.340588,37.774391],[118.348406,37.790719],[118.36191,37.792063],[118.352355,37.814274],[118.356382,37.820834],[118.344932,37.824627],[118.346116,37.832371],[118.334271,37.832134],[118.340193,37.838059],[118.328111,37.865272],[118.313265,37.861521],[118.301657,37.870208],[118.286337,37.8569],[118.269754,37.853109],[118.258304,37.844182],[118.258146,37.854886],[118.247643,37.871788],[118.248749,37.858164],[118.239115,37.868708],[118.236588,37.884501],[118.243142,37.895673],[118.235403,37.905343],[118.232718,37.922509],[118.225611,37.923417],[118.226954,37.939672],[118.224742,37.950559],[118.215503,37.949376],[118.213529,37.95541],[118.223479,37.959788],[118.220873,37.98258],[118.22956,37.986444],[118.2234,38.00095],[118.40779,38.026212],[118.419951,38.025503],[118.419319,38.053119],[118.410001,38.053277],[118.227585,38.037874],[118.230665,38.056743],[118.226638,38.079583],[118.235324,38.082969],[118.245511,38.103322],[118.241247,38.112138],[118.227664,38.119262],[118.236272,38.125754],[118.245432,38.144286],[118.274334,38.138542],[118.330717,38.125046],[118.360172,38.120954],[118.38023,38.119931],[118.39097,38.123315],[118.404078,38.120914],[118.420425,38.107337],[118.43148,38.106274],[118.449722,38.124259],[118.461409,38.126659],[118.483204,38.123236],[118.504526,38.113909],[118.513212,38.10466],[118.517081,38.088363],[118.526321,38.071314],[118.534533,38.063517],[118.552459,38.055679],[118.565568,38.060209],[118.597629,38.078993],[118.603946,38.101354],[118.607816,38.12906],[118.62582,38.138306],[118.726425,38.154238],[118.777754,38.156952],[118.811474,38.15762],[118.853721,38.154985],[118.877491,38.149596],[118.908051,38.139368],[118.931426,38.127486],[118.958512,38.110131],[118.974068,38.09415],[118.985282,38.062099],[118.996495,38.013996],[119.00455,37.992278],[119.045297,37.967597],[119.110604,37.921365],[119.120554,37.897054],[119.122844,37.866536],[119.128293,37.855992],[119.126555,37.845723],[119.119764,37.839442],[119.121501,37.827511],[119.128293,37.814393],[119.15451,37.80645],[119.180254,37.809098],[119.204734,37.815618],[119.217605,37.810244],[119.219974,37.793723],[119.21421,37.769647],[119.215394,37.76332],[119.225344,37.752998],[119.275252,37.739353],[119.278963,37.729819],[119.275726,37.717435],[119.26009,37.702398],[119.247218,37.698519],[119.22487,37.697332],[119.196916,37.699073],[119.138006,37.705128],[119.107129,37.703941],[119.080122,37.696382],[119.047509,37.679044],[119.020186,37.657227],[118.997206,37.632592],[118.972331,37.594474],[118.9518,37.556019],[118.939638,37.527066],[118.942955,37.497466],[118.958275,37.454912],[118.973121,37.404346],[118.977385,37.382052],[118.982597,37.378077],[119.003444,37.383403],[119.012842,37.376089],[119.009841,37.370763],[118.985598,37.365754],[118.981412,37.35983],[118.98694,37.339511],[119.001233,37.318748],[119.010315,37.313218],[119.039928,37.304466]]],[[[118.410001,38.053277],[118.40779,38.026212],[118.2234,38.00095],[118.227585,38.037874],[118.410001,38.053277]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370600,\"name\":\"烟台市\",\"center\":[121.391382,37.539297],\"centroid\":[120.805129,37.241857],\"childrenNum\":12,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":5,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.576514,37.127561],[119.629423,37.142116],[119.678541,37.157984],[119.68628,37.15611],[119.687069,37.14395],[119.698598,37.127002],[119.744795,37.135257],[119.754034,37.147459],[119.771091,37.160456],[119.780488,37.175204],[119.790517,37.185008],[119.80789,37.196404],[119.822104,37.220068],[119.83008,37.225724],[119.865063,37.233969],[119.877066,37.24046],[119.885989,37.252286],[119.858982,37.253719],[119.860956,37.262557],[119.892149,37.263911],[119.895781,37.275495],[119.887332,37.283972],[119.889227,37.298457],[119.883383,37.310871],[119.874697,37.313099],[119.869406,37.321016],[119.85306,37.326226],[119.848085,37.337323],[119.838214,37.34309],[119.842715,37.361341],[119.839714,37.37112],[119.843978,37.376725],[119.927131,37.386702],[119.937397,37.393339],[119.949874,37.42004],[119.986357,37.425681],[120.012654,37.442919],[120.06493,37.449114],[120.086252,37.465275],[120.108758,37.470515],[120.144372,37.481908],[120.194517,37.512982],[120.199492,37.524646],[120.222313,37.532857],[120.235975,37.548128],[120.246793,37.556614],[120.208178,37.588648],[120.217575,37.603787],[120.210152,37.616745],[120.215048,37.621143],[120.24861,37.623876],[120.265667,37.628868],[120.2723,37.63683],[120.273563,37.650891],[120.269299,37.658495],[120.244661,37.657703],[120.232895,37.662138],[120.220339,37.672036],[120.216154,37.686605],[120.227209,37.693611],[120.341555,37.693215],[120.368246,37.698005],[120.386408,37.707701],[120.437817,37.74141],[120.447924,37.754659],[120.47201,37.757626],[120.482354,37.755015],[120.518443,37.750586],[120.528235,37.757151],[120.579959,37.760868],[120.595357,37.767551],[120.621654,37.790877],[120.63421,37.796371],[120.657031,37.793051],[120.733393,37.833556],[120.743185,37.833082],[120.754241,37.837506],[120.762611,37.829961],[120.778563,37.831146],[120.797278,37.827709],[120.811887,37.822098],[120.832972,37.821624],[120.865112,37.832963],[120.890381,37.832963],[120.900489,37.823679],[120.915019,37.824034],[120.921653,37.819885],[120.935788,37.822375],[120.94637,37.813405],[120.947712,37.798624],[120.941158,37.793367],[120.943448,37.78554],[120.952924,37.776882],[120.975588,37.762371],[120.995724,37.759049],[121.016098,37.741766],[121.019573,37.731085],[121.037735,37.718583],[121.055108,37.715734],[121.064584,37.717119],[121.068375,37.72519],[121.075482,37.717791],[121.096329,37.722698],[121.139841,37.723054],[121.148527,37.719651],[121.159583,37.70687],[121.160057,37.699034],[121.146079,37.678846],[121.142684,37.661267],[121.156582,37.657386],[121.161715,37.646336],[121.150107,37.628987],[121.149554,37.619875],[121.16977,37.600617],[121.182483,37.594276],[121.215887,37.583098],[121.251264,37.581116],[121.304963,37.582979],[121.354791,37.596178],[121.361583,37.600855],[121.358266,37.616467],[121.344289,37.627759],[121.349264,37.635206],[121.361898,37.634216],[121.374849,37.628749],[121.386142,37.627798],[121.411174,37.609494],[121.43676,37.600815],[121.439603,37.596218],[121.427047,37.590788],[121.411016,37.591263],[121.389774,37.59705],[121.385905,37.591303],[121.395934,37.589876],[121.401066,37.557804],[121.412438,37.547652],[121.436444,37.541227],[121.459819,37.522623],[121.45666,37.502665],[121.46045,37.493855],[121.479245,37.474961],[121.514938,37.46186],[121.532074,37.462456],[121.537207,37.451219],[121.56532,37.440377],[121.571558,37.441449],[121.576059,37.460391],[121.586562,37.467299],[121.599118,37.46992],[121.618939,37.481948],[121.633469,37.49318],[121.653843,37.493061],[121.660239,37.487187],[121.665767,37.473453],[121.747893,37.467458],[121.773084,37.466505],[121.838943,37.471468],[121.887587,37.470039],[121.923992,37.473096],[121.92944,37.460868],[121.929519,37.454713],[121.920438,37.429931],[121.91878,37.420755],[121.908435,37.400969],[121.90038,37.391232],[121.882454,37.381694],[121.870293,37.368894],[121.865239,37.336727],[121.859396,37.329249],[121.834047,37.318311],[121.822281,37.303988],[121.815253,37.300447],[121.794879,37.30375],[121.790615,37.299532],[121.792431,37.288469],[121.784692,37.268409],[121.778296,37.260487],[121.7749,37.248225],[121.757211,37.247667],[121.74813,37.241575],[121.748525,37.223255],[121.755632,37.220506],[121.754527,37.212022],[121.761634,37.217997],[121.769057,37.196364],[121.759738,37.19222],[121.760686,37.178831],[121.749315,37.176439],[121.753895,37.172493],[121.761002,37.177954],[121.767872,37.170979],[121.747656,37.135776],[121.737706,37.136175],[121.733995,37.125607],[121.699328,37.125926],[121.694037,37.141239],[121.683455,37.141917],[121.688983,37.133503],[121.682271,37.13127],[121.683692,37.123014],[121.678007,37.121658],[121.669162,37.110649],[121.666714,37.12082],[121.654316,37.121897],[121.639865,37.131908],[121.638839,37.139524],[121.628889,37.137969],[121.625414,37.131908],[121.612147,37.125846],[121.600539,37.141079],[121.590747,37.144269],[121.585377,37.132306],[121.590352,37.128518],[121.589168,37.116712],[121.580323,37.10674],[121.574954,37.110091],[121.547868,37.104945],[121.49946,37.104426],[121.465425,37.12086],[121.447578,37.123333],[121.441656,37.12106],[121.427363,37.100796],[121.391432,37.098282],[121.382746,37.112125],[121.376823,37.115915],[121.369795,37.110889],[121.351475,37.126962],[121.363715,37.129236],[121.358187,37.140282],[121.348316,37.135975],[121.34113,37.127002],[121.326916,37.12768],[121.317992,37.132825],[121.314044,37.141079],[121.306542,37.141996],[121.287827,37.136055],[121.26153,37.117989],[121.246368,37.102631],[121.243131,37.092138],[121.204279,37.07897],[121.191407,37.072026],[121.192512,37.052108],[121.188011,37.041169],[121.188564,37.029948],[121.19496,37.027273],[121.194565,37.019485],[121.181299,37.016131],[121.177587,37.003748],[121.182404,36.99456],[121.19038,36.996558],[121.209096,36.985371],[121.222915,36.986649],[121.22639,36.971065],[121.233734,36.956917],[121.248501,36.953679],[121.252607,36.938088],[121.263189,36.926093],[121.272191,36.927532],[121.282615,36.918535],[121.304173,36.918335],[121.308358,36.905177],[121.312938,36.904097],[121.347605,36.920574],[121.360951,36.921494],[121.366557,36.903617],[121.36482,36.897417],[121.385431,36.877333],[121.363873,36.871651],[121.357397,36.864048],[121.357239,36.852401],[121.36174,36.841273],[121.373428,36.840593],[121.376665,36.830384],[121.396802,36.803834],[121.395855,36.794342],[121.409121,36.790176],[121.417334,36.792739],[121.450184,36.790056],[121.462424,36.784888],[121.478218,36.770825],[121.460687,36.76245],[121.454291,36.752351],[121.412596,36.748103],[121.394038,36.737962],[121.390406,36.728742],[121.404304,36.726457],[121.410385,36.714709],[121.405489,36.704443],[121.394354,36.699029],[121.374691,36.699791],[121.365531,36.711461],[121.357792,36.713105],[121.318308,36.702117],[121.298724,36.702318],[121.285536,36.699871],[121.274876,36.692652],[121.251896,36.671351],[121.239261,36.668342],[121.220941,36.671271],[121.194881,36.653295],[121.176877,36.65482],[121.161399,36.651288],[121.146079,36.640372],[121.113939,36.621907],[121.07793,36.607614],[121.055582,36.592675],[121.045237,36.579581],[121.02897,36.573194],[121.016019,36.574721],[120.955609,36.576087],[120.928681,36.589783],[120.924495,36.596892],[120.925917,36.613837],[120.90578,36.623473],[120.89504,36.622188],[120.882011,36.627086],[120.847107,36.618615],[120.850108,36.612271],[120.786223,36.589663],[120.779747,36.591551],[120.777062,36.600546],[120.765533,36.607011],[120.757557,36.606088],[120.751556,36.615042],[120.725733,36.624436],[120.708281,36.621385],[120.70836,36.612914],[120.699121,36.60665],[120.702991,36.598338],[120.679695,36.589181],[120.665402,36.587454],[120.664059,36.583478],[120.637763,36.574199],[120.635947,36.597775],[120.643449,36.613436],[120.644712,36.626524],[120.657426,36.626644],[120.660585,36.647998],[120.648977,36.655863],[120.652135,36.663327],[120.642027,36.666095],[120.627339,36.659836],[120.625128,36.671231],[120.631446,36.673357],[120.619206,36.681541],[120.616521,36.689764],[120.589751,36.694497],[120.586118,36.698829],[120.596542,36.708052],[120.58525,36.728501],[120.584065,36.735236],[120.562586,36.736479],[120.560375,36.742492],[120.546397,36.744616],[120.544502,36.76213],[120.540791,36.7679],[120.5554,36.778718],[120.56377,36.795343],[120.563454,36.802953],[120.590382,36.801552],[120.601517,36.804996],[120.612336,36.829223],[120.609809,36.832906],[120.589751,36.838791],[120.58754,36.843635],[120.595989,36.852681],[120.588408,36.859045],[120.57988,36.858885],[120.576642,36.879894],[120.592909,36.882134],[120.622838,36.890856],[120.622838,36.907377],[120.617389,36.911136],[120.592909,36.912216],[120.574984,36.927053],[120.571114,36.948682],[120.563218,36.95172],[120.560296,36.960674],[120.566534,36.96559],[120.568508,36.983293],[120.574036,36.987568],[120.575931,36.999074],[120.582328,37.001791],[120.593857,36.991244],[120.606413,37.001192],[120.601754,37.012696],[120.613915,37.023839],[120.606176,37.047157],[120.586513,37.048515],[120.58446,37.058136],[120.570877,37.046399],[120.558953,37.047437],[120.549793,37.041288],[120.541738,37.044163],[120.533289,37.053944],[120.539843,37.060371],[120.536368,37.081963],[120.547661,37.113003],[120.542528,37.128677],[120.527998,37.136733],[120.527129,37.143352],[120.517258,37.148974],[120.506834,37.148854],[120.505729,37.143551],[120.493805,37.1345],[120.493015,37.126723],[120.478643,37.124211],[120.462928,37.115157],[120.440265,37.122655],[120.439475,37.116912],[120.415153,37.110569],[120.407098,37.112803],[120.412942,37.103149],[120.408914,37.09517],[120.398096,37.096447],[120.388225,37.104227],[120.369667,37.104626],[120.362244,37.100477],[120.357822,37.084357],[120.348583,37.077094],[120.34574,37.087789],[120.336343,37.092058],[120.336896,37.104267],[120.331684,37.111966],[120.320628,37.10654],[120.315337,37.113043],[120.300176,37.119584],[120.303413,37.130153],[120.280828,37.13111],[120.264087,37.114718],[120.245688,37.118906],[120.236606,37.125965],[120.231237,37.106301],[120.229894,37.089544],[120.220497,37.08711],[120.214101,37.07019],[120.21647,37.056699],[120.205335,37.038374],[120.193411,37.034261],[120.189621,37.038094],[120.180697,37.032544],[120.173037,37.034421],[120.166404,37.025795],[120.167273,37.017968],[120.159929,37.013375],[120.142319,37.015292],[120.138134,37.022201],[120.123051,37.01645],[120.101571,37.014293],[120.09249,37.017928],[120.049374,37.020045],[120.035238,36.998395],[120.024104,36.999913],[120.002309,37.013494],[119.993543,37.012176],[119.980198,37.018088],[119.975618,37.011098],[119.961561,37.013654],[119.949716,37.006185],[119.939608,37.004108],[119.923341,36.993961],[119.902257,36.9948],[119.900045,36.997556],[119.85148,37.002031],[119.829606,37.002031],[119.820209,36.999594],[119.804968,37.013814],[119.771881,37.006984],[119.769906,36.996597],[119.750559,36.990844],[119.743057,36.992483],[119.731133,36.988487],[119.722289,36.993401],[119.716998,37.007144],[119.681699,36.998475],[119.66251,37.008262],[119.629344,37.01621],[119.61971,37.012895],[119.619078,37.017848],[119.60976,37.013894],[119.613155,37.034101],[119.606048,37.04037],[119.563406,37.058495],[119.559615,37.071786],[119.576198,37.087509],[119.568696,37.100157],[119.576514,37.127561]]],[[[121.508621,37.55253],[121.50712,37.556892],[121.520308,37.565139],[121.526625,37.562522],[121.508621,37.55253]]],[[[120.728339,37.92393],[120.725733,37.928586],[120.721548,37.931308],[120.722101,37.94551],[120.732446,37.948192],[120.737736,37.955174],[120.746423,37.951466],[120.758031,37.929454],[120.765375,37.922904],[120.759058,37.911776],[120.764901,37.896186],[120.760558,37.890581],[120.753056,37.894883],[120.740974,37.908777],[120.727708,37.909448],[120.721627,37.917182],[120.728339,37.92393]]],[[[120.692409,37.983842],[120.685539,37.991332],[120.697147,37.995117],[120.71602,37.987311],[120.724707,37.987429],[120.730787,37.974142],[120.736631,37.971146],[120.732525,37.961484],[120.706465,37.966808],[120.696278,37.974024],[120.692409,37.983842]]],[[[120.653004,37.980017],[120.658611,37.975483],[120.653952,37.963969],[120.64416,37.964757],[120.653004,37.980017]]],[[[120.452584,37.768856],[120.443976,37.770991],[120.435526,37.786608],[120.453136,37.788387],[120.463323,37.786054],[120.452584,37.768856]]],[[[120.682775,37.92831],[120.673536,37.929178],[120.679379,37.937147],[120.678511,37.944642],[120.692804,37.94693],[120.687829,37.931308],[120.682775,37.92831]]],[[[120.750687,38.150304],[120.73821,38.161711],[120.738052,38.174688],[120.742554,38.198986],[120.747607,38.202759],[120.753688,38.195291],[120.760321,38.176615],[120.777694,38.172565],[120.787328,38.158682],[120.771456,38.156558],[120.760479,38.15939],[120.750687,38.150304]]],[[[120.91881,38.34511],[120.90657,38.349778],[120.895277,38.363232],[120.900015,38.3719],[120.91494,38.373429],[120.913993,38.364566],[120.921021,38.362997],[120.914151,38.354682],[120.91881,38.34511]]],[[[120.841342,38.335655],[120.842843,38.355898],[120.85682,38.343188],[120.841342,38.335655]]],[[[120.62655,37.945786],[120.604913,37.956712],[120.598279,37.970633],[120.60207,37.97848],[120.614152,37.984512],[120.632472,37.978913],[120.630972,37.952018],[120.62655,37.945786]]],[[[120.903332,38.381742],[120.898515,38.386487],[120.91573,38.401933],[120.931997,38.391231],[120.931918,38.382291],[120.922126,38.385271],[120.903332,38.381742]]],[[[120.802253,38.284041],[120.797041,38.288282],[120.808492,38.311913],[120.816546,38.318075],[120.835262,38.320077],[120.849871,38.310343],[120.84308,38.30057],[120.82389,38.297939],[120.81552,38.288714],[120.802253,38.284041]]],[[[120.943843,38.019907],[120.932708,38.026882],[120.931287,38.035353],[120.94787,38.032398],[120.951108,38.02436],[120.943843,38.019907]]],[[[119.821394,37.309121],[119.818867,37.31656],[119.825895,37.315168],[119.821394,37.309121]]],[[[121.388668,36.266442],[121.391432,36.271926],[121.396644,36.264183],[121.388668,36.266442]]],[[[120.645818,38.132011],[120.637763,38.139171],[120.640922,38.148141],[120.647318,38.149557],[120.653715,38.141532],[120.645818,38.132011]]],[[[120.878141,38.026961],[120.87672,38.018213],[120.872693,38.027552],[120.878141,38.026961]]],[[[120.645423,38.05501],[120.641238,38.061233],[120.644791,38.06966],[120.652056,38.069109],[120.652767,38.058988],[120.645423,38.05501]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370700,\"name\":\"潍坊市\",\"center\":[119.107078,36.70925],\"centroid\":[119.077723,36.554349],\"childrenNum\":12,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":6,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[118.467411,36.945484],[118.47665,36.957077],[118.503736,36.95156],[118.503183,36.944285],[118.524583,36.945284],[118.52711,36.939687],[118.537771,36.936769],[118.55467,36.938368],[118.560751,36.946564],[118.557434,36.96539],[118.559803,36.977059],[118.552301,36.979657],[118.553959,37.000233],[118.564146,36.99416],[118.580493,36.994999],[118.566199,36.999034],[118.571174,37.004148],[118.590206,37.001351],[118.583572,37.008422],[118.588389,37.017409],[118.57149,37.022081],[118.545826,37.023519],[118.545431,37.038494],[118.56004,37.041408],[118.557592,37.051469],[118.561303,37.063325],[118.580414,37.063325],[118.591469,37.068474],[118.610895,37.063005],[118.631901,37.066757],[118.632138,37.070429],[118.654091,37.076935],[118.655512,37.082681],[118.665146,37.081763],[118.668384,37.091539],[118.667041,37.11392],[118.673754,37.144309],[118.653617,37.149692],[118.649195,37.164243],[118.64572,37.159579],[118.634191,37.163366],[118.633638,37.171178],[118.645483,37.178153],[118.649274,37.189112],[118.660408,37.187877],[118.668779,37.198436],[118.672332,37.215129],[118.680624,37.229269],[118.709684,37.241256],[118.728399,37.252764],[118.777991,37.280112],[118.821897,37.288788],[118.856959,37.293842],[119.039928,37.304466],[119.045376,37.298935],[119.052089,37.276848],[119.054142,37.254953],[119.066935,37.241814],[119.084465,37.239424],[119.091336,37.257581],[119.108393,37.260328],[119.128214,37.254874],[119.134294,37.263314],[119.135479,37.282102],[119.139032,37.288191],[119.157748,37.288191],[119.16983,37.278599],[119.166513,37.27438],[119.15759,37.281226],[119.142586,37.279475],[119.141559,37.262557],[119.128451,37.235721],[119.136979,37.231181],[119.20426,37.280112],[119.212788,37.273305],[119.190993,37.259452],[119.191941,37.254117],[119.202365,37.253759],[119.204418,37.246313],[119.194231,37.221741],[119.191941,37.197639],[119.205365,37.194292],[119.204102,37.21007],[119.206945,37.223175],[119.222106,37.225007],[119.232767,37.221821],[119.244533,37.211424],[119.261432,37.207998],[119.282201,37.21242],[119.296336,37.20505],[119.298389,37.19736],[119.291519,37.177635],[119.291756,37.164801],[119.297126,37.158781],[119.299337,37.142594],[119.30826,37.136733],[119.320421,37.120501],[119.329582,37.115715],[119.342296,37.11735],[119.351298,37.122894],[119.36567,37.126045],[119.425528,37.125447],[119.445585,37.130831],[119.489729,37.13446],[119.489965,37.142355],[119.479068,37.153399],[119.481832,37.155791],[119.493282,37.143591],[119.493282,37.133383],[119.503153,37.128279],[119.51942,37.130312],[119.576514,37.127561],[119.568696,37.100157],[119.576198,37.087509],[119.559615,37.071786],[119.563406,37.058495],[119.606048,37.04037],[119.613155,37.034101],[119.60976,37.013894],[119.604548,36.996038],[119.598072,36.989406],[119.5837,36.950441],[119.599968,36.920614],[119.599652,36.878253],[119.597757,36.857244],[119.56767,36.805717],[119.563721,36.802753],[119.550613,36.80868],[119.539162,36.799949],[119.539162,36.787732],[119.532766,36.78008],[119.530555,36.765256],[119.534977,36.743333],[119.547059,36.725454],[119.561036,36.720884],[119.567433,36.713065],[119.579831,36.711581],[119.587412,36.696101],[119.596651,36.689884],[119.607154,36.667379],[119.61355,36.66453],[119.617025,36.652532],[119.625079,36.638807],[119.651297,36.623633],[119.670328,36.616246],[119.681857,36.606891],[119.701125,36.602634],[119.730107,36.581027],[119.72758,36.562749],[119.74748,36.571788],[119.755929,36.565521],[119.784516,36.554673],[119.798019,36.551619],[119.826763,36.54101],[119.917576,36.525858],[119.920261,36.522079],[119.923025,36.495464],[119.936687,36.496389],[119.936292,36.511507],[119.951375,36.519788],[119.971985,36.522441],[119.974749,36.515688],[119.997571,36.504431],[120.010364,36.509255],[120.004204,36.489512],[120.010758,36.484445],[120.004125,36.477447],[120.006889,36.468799],[120.012812,36.467833],[120.011864,36.454236],[119.996623,36.446309],[119.994175,36.450333],[119.968432,36.450051],[119.953981,36.444217],[119.949795,36.446511],[119.935976,36.427436],[119.933923,36.42007],[119.925236,36.419346],[119.926421,36.403324],[119.941425,36.39503],[119.945452,36.384682],[119.936371,36.380655],[119.93029,36.385165],[119.909837,36.384359],[119.90431,36.38154],[119.904784,36.369942],[119.895939,36.34827],[119.896966,36.334047],[119.891991,36.318773],[119.865379,36.308898],[119.862773,36.302368],[119.854402,36.302328],[119.848795,36.292692],[119.83387,36.278822],[119.82929,36.258859],[119.820446,36.257367],[119.82092,36.244499],[119.808048,36.232839],[119.819498,36.211856],[119.828816,36.210685],[119.823131,36.19894],[119.831738,36.180612],[119.82242,36.177987],[119.821315,36.171285],[119.81326,36.175242],[119.813023,36.167691],[119.792333,36.171648],[119.782778,36.165308],[119.772354,36.167691],[119.748111,36.158645],[119.733818,36.163572],[119.732792,36.172536],[119.723473,36.175565],[119.691728,36.176292],[119.681305,36.18045],[119.671039,36.177866],[119.660852,36.154122],[119.649954,36.137157],[119.651218,36.130531],[119.643716,36.127178],[119.657614,36.108631],[119.657061,36.100872],[119.632187,36.091535],[119.633608,36.067683],[119.666695,36.062993],[119.675698,36.064085],[119.695677,36.053045],[119.704126,36.055269],[119.717314,36.044229],[119.706495,36.028292],[119.681068,36.012068],[119.689122,36.000212],[119.684858,35.982648],[119.690149,35.963702],[119.701757,35.944469],[119.701362,35.923732],[119.716208,35.927337],[119.721262,35.906718],[119.727738,35.902544],[119.738003,35.873123],[119.736898,35.86303],[119.72221,35.865138],[119.725211,35.856746],[119.71834,35.853138],[119.704047,35.863962],[119.68699,35.861814],[119.676014,35.842515],[119.664326,35.841015],[119.649796,35.845191],[119.629344,35.833878],[119.622631,35.816114],[119.612445,35.812707],[119.60897,35.799279],[119.617972,35.789623],[119.611576,35.776597],[119.596256,35.773756],[119.591992,35.753218],[119.605495,35.747454],[119.627843,35.722077],[119.624685,35.712817],[119.614182,35.716675],[119.601231,35.709446],[119.588833,35.715701],[119.576988,35.71237],[119.566485,35.714523],[119.560563,35.721752],[119.545085,35.726747],[119.527317,35.723214],[119.525422,35.730604],[119.504101,35.752325],[119.48807,35.754599],[119.48657,35.771646],[119.496599,35.779235],[119.493282,35.789866],[119.482385,35.799725],[119.464696,35.80861],[119.455693,35.809056],[119.444322,35.804026],[119.427739,35.802078],[119.397731,35.786823],[119.390466,35.778707],[119.375857,35.770712],[119.368829,35.770834],[119.374041,35.816154],[119.372382,35.830025],[119.358247,35.84511],[119.371435,35.860476],[119.360695,35.884066],[119.345533,35.893792],[119.315999,35.887552],[119.298153,35.893022],[119.294441,35.911336],[119.281964,35.910202],[119.240427,35.884269],[119.217053,35.879527],[119.190598,35.879446],[119.169119,35.894846],[119.161854,35.894481],[119.158221,35.882486],[119.135637,35.892982],[119.144718,35.904449],[119.151746,35.905502],[119.169672,35.91721],[119.183412,35.91875],[119.179385,35.926163],[119.182623,35.962285],[119.178595,35.97107],[119.155063,35.965767],[119.153246,35.971192],[119.134373,35.968601],[119.121817,35.962731],[119.088888,35.963176],[119.07878,35.959289],[119.066619,35.963986],[119.060538,35.978195],[119.05201,35.9803],[119.021054,35.977426],[119.015606,35.995923],[119.024924,36.003571],[119.023739,36.011219],[119.014105,36.013404],[119.017659,36.024044],[119.024134,36.02631],[119.035584,36.02275],[119.047903,36.024813],[119.052089,36.037838],[119.040322,36.042934],[119.042534,36.055512],[119.049641,36.066632],[119.063539,36.075042],[119.066935,36.081631],[119.048851,36.092707],[119.038506,36.090444],[119.020344,36.104307],[119.013868,36.09881],[119.000523,36.099497],[118.988756,36.092343],[118.970278,36.09873],[118.970041,36.104671],[118.958512,36.104145],[118.954642,36.1115],[118.943271,36.119582],[118.936322,36.11344],[118.916185,36.111702],[118.920765,36.105721],[118.908288,36.091292],[118.886493,36.088584],[118.880886,36.08438],[118.875911,36.091535],[118.860513,36.101316],[118.865961,36.113682],[118.860197,36.114733],[118.858302,36.129966],[118.863908,36.139298],[118.858302,36.143256],[118.859802,36.16232],[118.85459,36.170194],[118.846614,36.172092],[118.844561,36.18473],[118.848746,36.188606],[118.847009,36.199263],[118.835796,36.203138],[118.809026,36.198738],[118.802076,36.202855],[118.78573,36.197487],[118.766383,36.206649],[118.745535,36.191754],[118.751142,36.183115],[118.741824,36.165551],[118.733532,36.166802],[118.73298,36.1519],[118.736454,36.146528],[118.72603,36.141035],[118.714659,36.154485],[118.703761,36.150446],[118.701235,36.144509],[118.679913,36.152062],[118.683388,36.158564],[118.675491,36.170194],[118.666015,36.168983],[118.653143,36.176695],[118.644299,36.177018],[118.640824,36.171042],[118.622109,36.17718],[118.606236,36.164218],[118.581914,36.151456],[118.572201,36.156424],[118.563988,36.147094],[118.565015,36.130087],[118.556881,36.130935],[118.541719,36.124996],[118.535797,36.118531],[118.515502,36.109884],[118.509974,36.114612],[118.504762,36.105802],[118.526716,36.104671],[118.529479,36.093879],[118.522925,36.084784],[118.507842,36.074961],[118.496866,36.067683],[118.48044,36.074071],[118.482099,36.092546],[118.478545,36.098245],[118.484468,36.104064],[118.479493,36.118814],[118.492601,36.127057],[118.487863,36.131784],[118.462594,36.14059],[118.457303,36.13247],[118.447116,36.140913],[118.440956,36.132511],[118.428953,36.132672],[118.412844,36.127218],[118.402183,36.131622],[118.405263,36.141641],[118.402262,36.162926],[118.387653,36.174555],[118.374387,36.203097],[118.382046,36.207335],[118.386548,36.239053],[118.379756,36.245265],[118.368385,36.248412],[118.350775,36.263538],[118.31524,36.24938],[118.306948,36.252123],[118.315003,36.266361],[118.31366,36.277371],[118.317609,36.288903],[118.310107,36.295716],[118.315477,36.304464],[118.30908,36.307125],[118.304105,36.321393],[118.291075,36.326189],[118.300157,36.338116],[118.269912,36.339849],[118.261857,36.345852],[118.262726,36.352218],[118.256093,36.363175],[118.239825,36.376748],[118.235403,36.389634],[118.251592,36.401995],[118.250407,36.411214],[118.227427,36.408034],[118.224427,36.414234],[118.228533,36.430736],[118.232797,36.432869],[118.22719,36.451379],[118.233508,36.456609],[118.229638,36.467793],[118.216135,36.478573],[118.212818,36.490075],[118.218346,36.497354],[118.210528,36.503466],[118.213766,36.513075],[118.210844,36.526099],[118.221663,36.531887],[118.214556,36.539322],[118.191892,36.546074],[118.183916,36.561142],[118.180915,36.5607],[118.180678,36.577412],[118.176967,36.582996],[118.180363,36.593599],[118.189523,36.599141],[118.200657,36.612071],[118.214793,36.621144],[118.20658,36.637482],[118.199631,36.639047],[118.215898,36.648921],[118.221189,36.664169],[118.230191,36.660357],[118.226796,36.668382],[118.215819,36.668262],[118.21653,36.6811],[118.228059,36.694016],[118.245037,36.690647],[118.238246,36.697305],[118.227585,36.697625],[118.237614,36.712704],[118.227743,36.717957],[118.234219,36.726457],[118.254276,36.731789],[118.264147,36.72373],[118.277019,36.719801],[118.284363,36.72337],[118.276151,36.731749],[118.27157,36.744015],[118.279546,36.753033],[118.298183,36.753914],[118.297788,36.777677],[118.307501,36.776234],[118.318161,36.77972],[118.321636,36.770905],[118.350222,36.768301],[118.388522,36.791217],[118.419872,36.796304],[118.424531,36.802673],[118.438666,36.809682],[118.44072,36.828142],[118.435508,36.838391],[118.450038,36.83747],[118.453828,36.857564],[118.461488,36.854322],[118.460462,36.846597],[118.480993,36.852641],[118.479967,36.860166],[118.465042,36.861366],[118.476966,36.876893],[118.482809,36.879214],[118.483046,36.900777],[118.474913,36.905297],[118.481862,36.914136],[118.48968,36.914096],[118.496708,36.924733],[118.492365,36.931611],[118.494339,36.941846],[118.467411,36.945484]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370800,\"name\":\"济宁市\",\"center\":[116.587245,35.415393],\"centroid\":[116.74105,35.371092],\"childrenNum\":11,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":7,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.392342,34.574909],[117.363045,34.589241],[117.357991,34.582693],[117.344014,34.582075],[117.325378,34.570996],[117.333037,34.56177],[117.32135,34.565436],[117.294264,34.554025],[117.30303,34.548999],[117.302477,34.541253],[117.285341,34.533012],[117.268047,34.532806],[117.27547,34.520113],[117.269705,34.511664],[117.274364,34.503544],[117.259282,34.49736],[117.267494,34.480003],[117.263625,34.472622],[117.256044,34.476292],[117.252332,34.486518],[117.242698,34.478519],[117.255096,34.472539],[117.255886,34.462023],[117.24791,34.451052],[117.234644,34.454476],[117.222325,34.450599],[117.222088,34.445731],[117.200214,34.441606],[117.199503,34.43451],[117.166099,34.434675],[117.159861,34.453115],[117.156623,34.48091],[117.145963,34.503956],[117.139803,34.522875],[117.140593,34.538699],[117.151253,34.559257],[117.147621,34.570255],[117.133486,34.58607],[117.123694,34.604682],[117.115244,34.628146],[117.103952,34.64897],[117.095897,34.64753],[117.081525,34.638188],[117.072996,34.639094],[117.062336,34.657735],[117.061704,34.675713],[117.072049,34.694181],[117.07734,34.696484],[117.069048,34.708287],[117.070469,34.713714],[117.061151,34.723993],[117.043225,34.736531],[117.021904,34.759219],[116.995687,34.758274],[116.989685,34.765136],[116.978472,34.763616],[116.976814,34.771259],[116.96789,34.772984],[116.965837,34.785063],[116.951623,34.794553],[116.951149,34.810571],[116.971681,34.811885],[116.979183,34.814966],[116.966074,34.844487],[116.92888,34.842886],[116.930144,34.859675],[116.936303,34.865093],[116.951465,34.864313],[116.976892,34.868541],[116.966943,34.875599],[116.945226,34.876789],[116.945305,34.873794],[116.922168,34.871413],[116.922326,34.894515],[116.89903,34.904689],[116.876129,34.912524],[116.858125,34.928355],[116.822115,34.929299],[116.815877,34.965298],[116.80877,34.968823],[116.812166,34.927945],[116.803874,34.928314],[116.803716,34.970339],[116.789107,34.975094],[116.789107,34.959804],[116.781605,34.961895],[116.785474,34.9473],[116.796925,34.944143],[116.797635,34.938771],[116.786975,34.940453],[116.78121,34.916585],[116.756572,34.917487],[116.74599,34.915764],[116.74528,34.920973],[116.720405,34.926141],[116.706191,34.933974],[116.696951,34.932743],[116.677999,34.939182],[116.675709,34.933154],[116.658415,34.933441],[116.657862,34.929012],[116.640016,34.932579],[116.631803,34.94074],[116.622485,34.940043],[116.613877,34.922778],[116.5601,34.909324],[116.546123,34.909406],[116.523064,34.903951],[116.502769,34.906125],[116.500558,34.90112],[116.480737,34.897387],[116.455784,34.900628],[116.445044,34.895418],[116.445281,34.888648],[116.436042,34.883026],[116.409745,34.852944],[116.373815,34.86538],[116.339543,34.867022],[116.325803,34.874943],[116.299032,34.877733],[116.286713,34.88159],[116.266261,34.89751],[116.226935,34.911786],[116.213826,34.913098],[116.201586,34.919702],[116.192505,34.939182],[116.162181,34.94361],[116.155153,34.947259],[116.162023,34.957632],[116.171499,34.964683],[116.170789,34.974684],[116.139754,34.995421],[116.115748,35.025574],[116.114564,35.039828],[116.119381,35.053383],[116.141413,35.055062],[116.140228,35.06018],[116.15389,35.088467],[116.141018,35.09076],[116.154284,35.113513],[116.181765,35.11204],[116.204903,35.145668],[116.214537,35.155606],[116.223618,35.173231],[116.221881,35.181817],[116.213115,35.196697],[116.228356,35.194367],[116.234516,35.200008],[116.234437,35.208264],[116.248256,35.195634],[116.269104,35.191178],[116.284265,35.22506],[116.285608,35.242669],[116.269656,35.269872],[116.265866,35.271547],[116.237201,35.261745],[116.223539,35.260438],[116.215642,35.29131],[116.199612,35.304986],[116.193452,35.337555],[116.201744,35.345185],[116.215169,35.350734],[116.22117,35.358608],[116.223855,35.371702],[116.215879,35.393438],[116.212642,35.409054],[116.215958,35.419857],[116.215484,35.435957],[116.204429,35.436079],[116.20206,35.458247],[116.206798,35.465703],[116.19669,35.46334],[116.188319,35.467781],[116.188319,35.477313],[116.177817,35.466151],[116.178685,35.450342],[116.167946,35.452217],[116.15689,35.446838],[116.160918,35.471569],[116.15002,35.469573],[116.129567,35.475235],[116.128778,35.489614],[116.121276,35.497881],[116.12554,35.516042],[116.123408,35.540589],[116.115274,35.566471],[116.114327,35.577456],[116.125145,35.587871],[116.125145,35.59385],[116.116222,35.606621],[116.115906,35.618414],[116.134384,35.638539],[116.127514,35.649433],[116.121829,35.67459],[116.103034,35.687348],[116.089847,35.699373],[116.079897,35.712452],[116.071052,35.719072],[116.041518,35.733893],[116.026909,35.749687],[116.017591,35.756263],[115.970289,35.782156],[115.945493,35.791976],[115.922119,35.799157],[115.925988,35.804756],[115.911932,35.811733],[115.898192,35.805202],[115.883583,35.808163],[115.877107,35.820657],[115.875212,35.835095],[115.876002,35.867124],[115.876081,35.875069],[115.882872,35.879892],[115.883267,35.895413],[115.88911,35.897561],[115.884767,35.909108],[115.872369,35.909351],[115.875133,35.920168],[115.907826,35.926851],[115.909958,35.935762],[115.906325,35.9454],[115.911853,35.960261],[115.957654,35.967994],[115.985135,35.974107],[116.00006,35.974349],[116.036069,35.96771],[116.048704,35.970301],[116.0506,35.981919],[116.061892,35.97358],[116.065367,35.964714],[116.060392,35.956374],[116.048704,35.948114],[116.05897,35.936167],[116.07279,35.940055],[116.074606,35.927459],[116.086767,35.923246],[116.081634,35.914172],[116.09261,35.904935],[116.126172,35.891037],[116.142834,35.895656],[116.154284,35.886012],[116.161155,35.900397],[116.166998,35.90457],[116.185398,35.900478],[116.190057,35.892536],[116.20814,35.886863],[116.214774,35.889659],[116.218485,35.879811],[116.221091,35.892779],[116.233963,35.888403],[116.230804,35.860963],[116.233963,35.851273],[116.245808,35.834162],[116.250072,35.823536],[116.274868,35.803377],[116.277395,35.806581],[116.304007,35.799401],[116.297295,35.795546],[116.301875,35.777084],[116.309377,35.77404],[116.32983,35.787594],[116.336621,35.796723],[116.355652,35.800537],[116.362838,35.795952],[116.377921,35.796642],[116.385581,35.801754],[116.400822,35.794613],[116.421196,35.799279],[116.428698,35.796398],[116.436989,35.807271],[116.459811,35.81583],[116.459732,35.828241],[116.468024,35.836149],[116.475841,35.83327],[116.486976,35.84138],[116.507508,35.84361],[116.515325,35.841866],[116.520616,35.853057],[116.525275,35.847462],[116.53641,35.847178],[116.549834,35.857517],[116.55702,35.890753],[116.566023,35.899222],[116.595715,35.905056],[116.599663,35.916157],[116.618536,35.935195],[116.62817,35.938556],[116.665996,35.940176],[116.676973,35.925596],[116.672392,35.92118],[116.666944,35.898209],[116.647518,35.884674],[116.62438,35.878068],[116.614904,35.865746],[116.617036,35.855206],[116.641042,35.836879],[116.656441,35.828525],[116.676736,35.822198],[116.686607,35.814005],[116.687317,35.798062],[116.670497,35.761499],[116.662679,35.758252],[116.636699,35.764137],[116.619563,35.756628],[116.614588,35.74924],[116.612061,35.71237],[116.615615,35.705222],[116.627539,35.705791],[116.648939,35.713426],[116.664969,35.716716],[116.68866,35.724838],[116.698847,35.72098],[116.705322,35.70839],[116.733829,35.703435],[116.743069,35.703597],[116.743069,35.703597],[116.762732,35.708309],[116.770076,35.703557],[116.77742,35.690882],[116.795345,35.682188],[116.8049,35.686292],[116.811376,35.706034],[116.8218,35.705222],[116.8233,35.696935],[116.836882,35.697382],[116.861994,35.679059],[116.879367,35.685479],[116.88071,35.696732],[116.897135,35.701851],[116.909849,35.699982],[116.91814,35.706278],[116.930538,35.709406],[116.931012,35.713629],[116.949649,35.715741],[116.954939,35.719072],[116.952412,35.737507],[116.946253,35.744368],[116.952412,35.7561],[116.974366,35.760444],[116.993397,35.794045],[116.991423,35.805973],[117.009506,35.807636],[117.0268,35.799401],[117.049622,35.801307],[117.070864,35.790394],[117.083815,35.80431],[117.097318,35.802687],[117.103241,35.790272],[117.131275,35.786498],[117.137908,35.783374],[117.135855,35.774811],[117.128353,35.769901],[117.135381,35.767303],[117.143436,35.771727],[117.163651,35.775014],[117.175023,35.780209],[117.200214,35.775095],[117.21806,35.778464],[117.226984,35.773959],[117.260308,35.771037],[117.297581,35.788487],[117.306504,35.798833],[117.318428,35.793802],[117.341013,35.793558],[117.343382,35.784267],[117.350331,35.782725],[117.364467,35.770225],[117.379155,35.775785],[117.391,35.767141],[117.415559,35.775177],[117.431195,35.760971],[117.440197,35.744571],[117.452832,35.742298],[117.478733,35.732675],[117.488683,35.721102],[117.49121,35.707903],[117.511031,35.712411],[117.530931,35.707131],[117.520586,35.697626],[117.529431,35.682879],[117.576022,35.650206],[117.596948,35.630449],[117.588893,35.619878],[117.585577,35.593972],[117.592763,35.589701],[117.590394,35.573551],[117.593473,35.567448],[117.582418,35.554141],[117.528641,35.547182],[117.515058,35.551008],[117.499502,35.550845],[117.496264,35.543031],[117.50424,35.531675],[117.516401,35.527319],[117.520033,35.51991],[117.513795,35.514576],[117.501634,35.512947],[117.498396,35.503093],[117.481734,35.507898],[117.472416,35.514372],[117.467441,35.512255],[117.462703,35.497922],[117.452279,35.490306],[117.442171,35.469247],[117.42851,35.458614],[117.453779,35.442396],[117.455833,35.424953],[117.467441,35.418186],[117.474785,35.400941],[117.463334,35.39038],[117.463887,35.375617],[117.439644,35.359668],[117.439012,35.348939],[117.446988,35.330292],[117.453937,35.325027],[117.478891,35.314375],[117.463098,35.287472],[117.439565,35.282368],[117.419191,35.273997],[117.406004,35.283348],[117.403635,35.301394],[117.399528,35.306374],[117.359571,35.318375],[117.347568,35.315109],[117.318034,35.320252],[117.308557,35.312579],[117.314085,35.302129],[117.311163,35.28588],[117.305794,35.295229],[117.290079,35.299394],[117.284472,35.294331],[117.262203,35.287472],[117.269231,35.261296],[117.220824,35.26489],[117.204873,35.258518],[117.199108,35.24749],[117.176681,35.243159],[117.152675,35.232047],[117.123536,35.23078],[117.104899,35.221464],[117.092896,35.220361],[117.065336,35.22792],[117.053333,35.224202],[117.028774,35.221219],[117.014639,35.214844],[116.995687,35.1978],[116.969706,35.187377],[116.962047,35.177319],[116.938277,35.172168],[116.925721,35.182266],[116.913718,35.178791],[116.904716,35.182471],[116.898398,35.195757],[116.876603,35.188031],[116.86618,35.172617],[116.85394,35.16861],[116.832776,35.184392],[116.811218,35.17736],[116.81564,35.170777],[116.813192,35.159573],[116.81793,35.150699],[116.825748,35.147631],[116.832065,35.123783],[116.848649,35.103774],[116.863179,35.091496],[116.888922,35.093829],[116.888212,35.085193],[116.900373,35.068737],[116.880473,35.062595],[116.881183,35.058133],[116.900767,35.05977],[116.907875,35.046995],[116.937172,35.0275],[116.951702,35.020618],[116.956993,35.01054],[116.954466,34.993331],[116.943015,34.975627],[116.955334,34.967142],[116.9671,34.951072],[116.980367,34.941027],[116.989448,34.93873],[117.017719,34.942503],[117.038487,34.937869],[117.043462,34.932825],[117.041093,34.925157],[117.05815,34.926961],[117.06123,34.930406],[117.073707,34.925485],[117.082551,34.934917],[117.103399,34.937459],[117.111059,34.917774],[117.110111,34.90514],[117.12093,34.903581],[117.125826,34.863451],[117.139013,34.854052],[117.140593,34.846499],[117.156623,34.834306],[117.17755,34.828722],[117.194686,34.816239],[117.180314,34.800221],[117.172733,34.799194],[117.162467,34.782105],[117.176523,34.779065],[117.180551,34.784201],[117.191369,34.780914],[117.212927,34.761027],[117.22422,34.745533],[117.236697,34.746355],[117.242067,34.729995],[117.253675,34.721444],[117.271443,34.726501],[117.278787,34.715647],[117.304609,34.714866],[117.310611,34.717333],[117.326167,34.703434],[117.324272,34.697307],[117.335485,34.692454],[117.329247,34.677359],[117.346067,34.670982],[117.35657,34.661643],[117.354201,34.653538],[117.366915,34.650246],[117.374022,34.636172],[117.376707,34.622301],[117.384051,34.628228],[117.402687,34.628434],[117.4109,34.623454],[117.407978,34.610651],[117.397949,34.604393],[117.398976,34.588335],[117.393922,34.587676],[117.392342,34.574909]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":370900,\"name\":\"泰安市\",\"center\":[117.129063,36.194968],\"centroid\":[117.030947,36.002333],\"childrenNum\":6,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":8,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.596948,35.630449],[117.576022,35.650206],[117.529431,35.682879],[117.520586,35.697626],[117.530931,35.707131],[117.511031,35.712411],[117.49121,35.707903],[117.488683,35.721102],[117.478733,35.732675],[117.452832,35.742298],[117.440197,35.744571],[117.431195,35.760971],[117.415559,35.775177],[117.391,35.767141],[117.379155,35.775785],[117.364467,35.770225],[117.350331,35.782725],[117.343382,35.784267],[117.341013,35.793558],[117.318428,35.793802],[117.306504,35.798833],[117.297581,35.788487],[117.260308,35.771037],[117.226984,35.773959],[117.21806,35.778464],[117.200214,35.775095],[117.175023,35.780209],[117.163651,35.775014],[117.143436,35.771727],[117.135381,35.767303],[117.128353,35.769901],[117.135855,35.774811],[117.137908,35.783374],[117.131275,35.786498],[117.103241,35.790272],[117.097318,35.802687],[117.083815,35.80431],[117.070864,35.790394],[117.049622,35.801307],[117.0268,35.799401],[117.009506,35.807636],[116.991423,35.805973],[116.993397,35.794045],[116.974366,35.760444],[116.952412,35.7561],[116.946253,35.744368],[116.952412,35.737507],[116.954939,35.719072],[116.949649,35.715741],[116.931012,35.713629],[116.930538,35.709406],[116.91814,35.706278],[116.909849,35.699982],[116.897135,35.701851],[116.88071,35.696732],[116.879367,35.685479],[116.861994,35.679059],[116.836882,35.697382],[116.8233,35.696935],[116.8218,35.705222],[116.811376,35.706034],[116.8049,35.686292],[116.795345,35.682188],[116.77742,35.690882],[116.770076,35.703557],[116.762732,35.708309],[116.743069,35.703597],[116.743069,35.703597],[116.733829,35.703435],[116.705322,35.70839],[116.698847,35.72098],[116.68866,35.724838],[116.664969,35.716716],[116.648939,35.713426],[116.627539,35.705791],[116.615615,35.705222],[116.612061,35.71237],[116.614588,35.74924],[116.619563,35.756628],[116.636699,35.764137],[116.662679,35.758252],[116.670497,35.761499],[116.687317,35.798062],[116.686607,35.814005],[116.676736,35.822198],[116.656441,35.828525],[116.641042,35.836879],[116.617036,35.855206],[116.614904,35.865746],[116.62438,35.878068],[116.647518,35.884674],[116.666944,35.898209],[116.672392,35.92118],[116.676973,35.925596],[116.665996,35.940176],[116.62817,35.938556],[116.618536,35.935195],[116.599663,35.916157],[116.595715,35.905056],[116.566023,35.899222],[116.55702,35.890753],[116.549834,35.857517],[116.53641,35.847178],[116.525275,35.847462],[116.520616,35.853057],[116.515325,35.841866],[116.507508,35.84361],[116.486976,35.84138],[116.475841,35.83327],[116.468024,35.836149],[116.459732,35.828241],[116.459811,35.81583],[116.436989,35.807271],[116.428698,35.796398],[116.421196,35.799279],[116.400822,35.794613],[116.385581,35.801754],[116.377921,35.796642],[116.362838,35.795952],[116.355652,35.800537],[116.336621,35.796723],[116.32983,35.787594],[116.309377,35.77404],[116.301875,35.777084],[116.297295,35.795546],[116.304007,35.799401],[116.277395,35.806581],[116.274868,35.803377],[116.250072,35.823536],[116.245808,35.834162],[116.233963,35.851273],[116.230804,35.860963],[116.233963,35.888403],[116.221091,35.892779],[116.218485,35.879811],[116.214774,35.889659],[116.20814,35.886863],[116.190057,35.892536],[116.185398,35.900478],[116.166998,35.90457],[116.161155,35.900397],[116.154284,35.886012],[116.142834,35.895656],[116.126172,35.891037],[116.09261,35.904935],[116.081634,35.914172],[116.086767,35.923246],[116.074606,35.927459],[116.07279,35.940055],[116.05897,35.936167],[116.048704,35.948114],[116.060392,35.956374],[116.065367,35.964714],[116.061892,35.97358],[116.0506,35.981919],[116.052574,35.99912],[116.06284,36.028899],[116.073658,36.026148],[116.079502,36.042611],[116.076106,36.056887],[116.087162,36.071403],[116.091742,36.089474],[116.096875,36.092182],[116.099323,36.112066],[116.114011,36.122047],[116.123882,36.136429],[116.164313,36.146084],[116.164392,36.168862],[116.169446,36.171325],[116.213036,36.169831],[116.226066,36.173748],[116.246677,36.149436],[116.261444,36.122693],[116.27171,36.109843],[116.273368,36.093758],[116.267287,36.074233],[116.267998,36.052964],[116.271552,36.043824],[116.294689,36.031407],[116.301244,36.031123],[116.304718,36.046251],[116.310404,36.052196],[116.324855,36.054178],[116.338753,36.060082],[116.352731,36.070797],[116.360233,36.084744],[116.386845,36.090807],[116.398058,36.084582],[116.401059,36.074031],[116.409508,36.068007],[116.427829,36.067441],[116.433357,36.059839],[116.429566,36.052439],[116.436121,36.046534],[116.434541,36.038607],[116.449387,36.047302],[116.452072,36.058019],[116.471182,36.06457],[116.504112,36.064732],[116.532303,36.074274],[116.543359,36.086604],[116.546597,36.101195],[116.554651,36.108187],[116.566891,36.108752],[116.569024,36.118774],[116.562153,36.121643],[116.5586,36.133804],[116.543122,36.13958],[116.525275,36.135298],[116.528513,36.145276],[116.519748,36.141196],[116.507192,36.141277],[116.510192,36.148346],[116.52188,36.157151],[116.525986,36.168297],[116.51035,36.176857],[116.502059,36.192764],[116.481922,36.197002],[116.472604,36.21464],[116.487529,36.228441],[116.485239,36.236067],[116.506402,36.240344],[116.512325,36.253414],[116.525591,36.255229],[116.53641,36.245588],[116.552361,36.247767],[116.558837,36.261037],[116.574393,36.263457],[116.581264,36.255471],[116.587502,36.268862],[116.595794,36.270999],[116.610403,36.282451],[116.615536,36.294587],[116.649018,36.295797],[116.675709,36.276645],[116.686528,36.275435],[116.701058,36.280153],[116.710376,36.279185],[116.732961,36.294144],[116.762574,36.305391],[116.772761,36.312002],[116.786659,36.311357],[116.808612,36.299022],[116.830644,36.294587],[116.855756,36.301642],[116.855519,36.289709],[116.867759,36.28108],[116.873129,36.264062],[116.891133,36.255471],[116.928722,36.26991],[116.932828,36.261925],[116.950201,36.257327],[116.956835,36.259787],[116.975471,36.243208],[116.987632,36.250711],[117.002794,36.254503],[117.003347,36.265353],[117.027353,36.268983],[117.030275,36.277532],[117.0482,36.283701],[117.051201,36.288741],[117.066995,36.296885],[117.074102,36.296724],[117.077655,36.307205],[117.07734,36.321957],[117.088711,36.346013],[117.107347,36.338882],[117.111691,36.340413],[117.137039,36.335135],[117.142567,36.345731],[117.161361,36.351895],[117.179603,36.353144],[117.18292,36.360798],[117.180945,36.37256],[117.191685,36.378762],[117.200924,36.389755],[117.208742,36.405297],[117.218297,36.406182],[117.242145,36.41528],[117.249726,36.436732],[117.263862,36.449206],[117.275786,36.451218],[117.288973,36.468718],[117.288184,36.476039],[117.30682,36.472097],[117.30682,36.467029],[117.335328,36.466345],[117.346383,36.46373],[117.346936,36.455724],[117.339118,36.438181],[117.339434,36.425786],[117.344962,36.403968],[117.35041,36.393379],[117.351753,36.377997],[117.362729,36.360234],[117.387762,36.337915],[117.38871,36.326148],[117.379707,36.315146],[117.38792,36.296361],[117.387604,36.285556],[117.397791,36.283782],[117.394553,36.266522],[117.413901,36.267934],[117.417217,36.243652],[117.392895,36.237439],[117.393132,36.226747],[117.385235,36.226989],[117.396607,36.215972],[117.412716,36.210927],[117.427878,36.221662],[117.447383,36.218313],[117.447778,36.203541],[117.452437,36.203138],[117.440434,36.191189],[117.446988,36.18691],[117.461202,36.170194],[117.475653,36.173102],[117.487972,36.15921],[117.476601,36.150123],[117.469178,36.154687],[117.459623,36.1498],[117.44683,36.120834],[117.463571,36.116875],[117.454885,36.111177],[117.456148,36.100467],[117.447067,36.09206],[117.451963,36.087412],[117.473758,36.089797],[117.484893,36.10075],[117.491052,36.096587],[117.505898,36.098245],[117.534879,36.111419],[117.547672,36.106166],[117.552884,36.087978],[117.561649,36.079327],[117.575943,36.074516],[117.601844,36.075648],[117.630588,36.059879],[117.656569,36.049729],[117.689972,36.052358],[117.701186,36.04528],[117.720454,36.038243],[117.725824,36.029667],[117.741696,36.036058],[117.757016,36.019392],[117.750304,36.011947],[117.756542,36.002236],[117.756621,35.991916],[117.762307,35.990621],[117.781022,35.995437],[117.782286,36.007294],[117.794763,36.015143],[117.801159,36.012959],[117.825244,36.013363],[117.828719,36.008022],[117.841827,36.011947],[117.854462,36.006889],[117.866386,36.007415],[117.877047,36.016357],[117.895052,36.020363],[117.914557,36.020039],[117.922848,36.015467],[117.926165,36.005068],[117.935088,36.004421],[117.937536,35.99653],[117.937221,35.98119],[117.946065,35.970949],[117.947013,35.960382],[117.953962,35.957913],[117.971414,35.969937],[117.992577,35.971273],[117.984443,35.956293],[117.988471,35.947709],[117.997394,35.934587],[117.99921,35.925393],[117.988234,35.908703],[117.981364,35.906191],[117.97931,35.889699],[117.968097,35.884066],[117.960516,35.87057],[117.937615,35.874826],[117.924586,35.880946],[117.906265,35.884634],[117.883364,35.882648],[117.86686,35.86984],[117.85541,35.850219],[117.842143,35.84507],[117.827376,35.827754],[117.828403,35.821792],[117.840959,35.812058],[117.846092,35.796398],[117.831167,35.786661],[117.828482,35.773837],[117.833694,35.760484],[117.837405,35.741445],[117.823033,35.739496],[117.811504,35.732919],[117.781733,35.734096],[117.769019,35.726625],[117.754173,35.709609],[117.732615,35.71237],[117.707424,35.726016],[117.679154,35.713305],[117.663913,35.70969],[117.634616,35.709324],[117.62585,35.703841],[117.605319,35.674834],[117.599001,35.649149],[117.596948,35.630449]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371000,\"name\":\"威海市\",\"center\":[122.116394,37.509691],\"centroid\":[122.000809,37.118689],\"childrenNum\":4,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":9,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.923992,37.473096],[121.966002,37.489648],[121.979111,37.488378],[121.996958,37.493974],[121.999485,37.506236],[122.013225,37.510006],[122.017253,37.530914],[122.036284,37.529446],[122.045207,37.531628],[122.053736,37.543448],[122.069924,37.537062],[122.075215,37.540473],[122.074583,37.551816],[122.066529,37.562364],[122.069529,37.568747],[122.088797,37.554116],[122.107434,37.550309],[122.123148,37.552926],[122.119437,37.564227],[122.125833,37.56732],[122.133572,37.556455],[122.150471,37.557129],[122.144154,37.550388],[122.150708,37.544281],[122.171398,37.541147],[122.171714,37.534285],[122.163106,37.518973],[122.15442,37.518219],[122.14755,37.51199],[122.136336,37.512307],[122.131993,37.499371],[122.149524,37.493418],[122.153946,37.488616],[122.148892,37.481948],[122.156947,37.459438],[122.165712,37.450027],[122.167213,37.438073],[122.183717,37.431282],[122.185849,37.441688],[122.194456,37.456222],[122.212461,37.455666],[122.220595,37.463289],[122.233151,37.46051],[122.235046,37.469205],[122.24089,37.465354],[122.252656,37.467855],[122.260316,37.46047],[122.27682,37.456778],[122.286138,37.447287],[122.280373,37.442641],[122.280216,37.433863],[122.285664,37.425403],[122.31046,37.423059],[122.312355,37.416663],[122.336993,37.414438],[122.387375,37.42],[122.393376,37.415114],[122.416751,37.414676],[122.437046,37.420358],[122.464684,37.42441],[122.480952,37.433665],[122.489559,37.431917],[122.487348,37.420278],[122.495245,37.413683],[122.513408,37.410703],[122.553602,37.406929],[122.580293,37.410187],[122.595929,37.421152],[122.606511,37.424131],[122.626648,37.424688],[122.643862,37.428064],[122.649548,37.419881],[122.656655,37.428461],[122.665816,37.424251],[122.659735,37.421589],[122.666526,37.414438],[122.675923,37.413326],[122.669527,37.42858],[122.684847,37.4287],[122.688558,37.422423],[122.704273,37.414955],[122.706958,37.404108],[122.715802,37.396121],[122.697877,37.384118],[122.69456,37.376328],[122.680662,37.37438],[122.675134,37.383761],[122.655629,37.388292],[122.641809,37.385867],[122.626884,37.36957],[122.611486,37.366907],[122.594823,37.347981],[122.59356,37.336289],[122.611486,37.339431],[122.610459,37.331119],[122.594192,37.319822],[122.573897,37.296349],[122.581083,37.286957],[122.57137,37.279037],[122.577056,37.271395],[122.567185,37.261164],[122.584716,37.258736],[122.592454,37.261284],[122.590638,37.248065],[122.60043,37.242212],[122.60043,37.22895],[122.604063,37.221462],[122.623963,37.212739],[122.628859,37.203456],[122.624042,37.191144],[122.606274,37.193057],[122.596877,37.181262],[122.57903,37.183493],[122.573344,37.17624],[122.587243,37.163684],[122.586374,37.153519],[122.581083,37.147738],[122.559762,37.147419],[122.533544,37.153359],[122.501562,37.148695],[122.493113,37.142036],[122.484505,37.128877],[122.481189,37.117829],[122.477951,37.091539],[122.481031,37.071786],[122.480083,37.06105],[122.45963,37.04584],[122.461447,37.039532],[122.487901,37.034301],[122.498641,37.034301],[122.524226,37.04033],[122.548706,37.05091],[122.575634,37.054423],[122.585268,37.042965],[122.583373,37.037296],[122.555971,37.02324],[122.544837,37.004587],[122.545232,36.990205],[122.556919,36.978898],[122.557551,36.968707],[122.545863,36.956317],[122.546574,36.923494],[122.542468,36.913536],[122.532123,36.901457],[122.516408,36.890256],[122.497061,36.886095],[122.484663,36.891536],[122.485453,36.903777],[122.492639,36.912176],[122.483005,36.914056],[122.434124,36.914256],[122.428833,36.908856],[122.446601,36.898217],[122.454498,36.878813],[122.464448,36.879294],[122.457025,36.86913],[122.445732,36.873052],[122.416119,36.859485],[122.403326,36.860686],[122.392587,36.866209],[122.3839,36.865368],[122.386506,36.860046],[122.378373,36.844275],[122.350655,36.835228],[122.342758,36.828502],[122.335414,36.83767],[122.32657,36.830424],[122.298141,36.83707],[122.280452,36.835829],[122.263869,36.841633],[122.250603,36.839912],[122.245865,36.835428],[122.220437,36.848919],[122.196115,36.842874],[122.174714,36.842474],[122.17203,36.852441],[122.181427,36.856323],[122.188534,36.866209],[122.175662,36.894537],[122.164291,36.892536],[122.155999,36.883055],[122.119674,36.892096],[122.117463,36.895737],[122.127176,36.918535],[122.14139,36.938288],[122.136731,36.944325],[122.12765,36.945484],[122.112409,36.939607],[122.106486,36.941686],[122.0993,36.93289],[122.100801,36.921934],[122.09322,36.914136],[122.073636,36.914376],[122.051998,36.904977],[122.05342,36.895697],[122.046234,36.891176],[122.042522,36.872011],[122.037784,36.875492],[122.03731,36.895817],[122.025307,36.908856],[122.022464,36.942006],[122.013936,36.959994],[121.994668,36.953719],[121.98306,36.958436],[121.977611,36.947163],[121.964818,36.938128],[121.927545,36.932371],[121.897616,36.921694],[121.870846,36.915736],[121.862791,36.909256],[121.829388,36.898057],[121.816121,36.891856],[121.790457,36.884255],[121.767714,36.874852],[121.76195,36.866049],[121.763766,36.85084],[121.757606,36.841753],[121.73818,36.835068],[121.726256,36.82626],[121.718517,36.829223],[121.70683,36.822296],[121.670742,36.817651],[121.64176,36.805757],[121.628494,36.797306],[121.628968,36.783245],[121.634416,36.766858],[121.653527,36.72798],[121.651473,36.723851],[121.620834,36.737241],[121.606067,36.738122],[121.599671,36.745578],[121.60125,36.763412],[121.586009,36.756399],[121.570531,36.766257],[121.556317,36.764294],[121.574638,36.745538],[121.574322,36.737],[121.565477,36.728822],[121.542024,36.734595],[121.531995,36.731027],[121.532153,36.736198],[121.546051,36.741971],[121.547394,36.74642],[121.53239,36.753273],[121.520466,36.749386],[121.517702,36.761088],[121.507594,36.760928],[121.505857,36.770665],[121.482245,36.77355],[121.481061,36.780401],[121.496302,36.792379],[121.528205,36.805637],[121.546051,36.806558],[121.554027,36.81709],[121.569979,36.827501],[121.565083,36.830504],[121.539339,36.823417],[121.530179,36.818772],[121.522914,36.80824],[121.506962,36.803834],[121.480271,36.784487],[121.478218,36.770825],[121.462424,36.784888],[121.450184,36.790056],[121.417334,36.792739],[121.409121,36.790176],[121.395855,36.794342],[121.396802,36.803834],[121.376665,36.830384],[121.373428,36.840593],[121.36174,36.841273],[121.357239,36.852401],[121.357397,36.864048],[121.363873,36.871651],[121.385431,36.877333],[121.36482,36.897417],[121.366557,36.903617],[121.360951,36.921494],[121.347605,36.920574],[121.312938,36.904097],[121.308358,36.905177],[121.304173,36.918335],[121.282615,36.918535],[121.272191,36.927532],[121.263189,36.926093],[121.252607,36.938088],[121.248501,36.953679],[121.233734,36.956917],[121.22639,36.971065],[121.222915,36.986649],[121.209096,36.985371],[121.19038,36.996558],[121.182404,36.99456],[121.177587,37.003748],[121.181299,37.016131],[121.194565,37.019485],[121.19496,37.027273],[121.188564,37.029948],[121.188011,37.041169],[121.192512,37.052108],[121.191407,37.072026],[121.204279,37.07897],[121.243131,37.092138],[121.246368,37.102631],[121.26153,37.117989],[121.287827,37.136055],[121.306542,37.141996],[121.314044,37.141079],[121.317992,37.132825],[121.326916,37.12768],[121.34113,37.127002],[121.348316,37.135975],[121.358187,37.140282],[121.363715,37.129236],[121.351475,37.126962],[121.369795,37.110889],[121.376823,37.115915],[121.382746,37.112125],[121.391432,37.098282],[121.427363,37.100796],[121.441656,37.12106],[121.447578,37.123333],[121.465425,37.12086],[121.49946,37.104426],[121.547868,37.104945],[121.574954,37.110091],[121.580323,37.10674],[121.589168,37.116712],[121.590352,37.128518],[121.585377,37.132306],[121.590747,37.144269],[121.600539,37.141079],[121.612147,37.125846],[121.625414,37.131908],[121.628889,37.137969],[121.638839,37.139524],[121.639865,37.131908],[121.654316,37.121897],[121.666714,37.12082],[121.669162,37.110649],[121.678007,37.121658],[121.683692,37.123014],[121.682271,37.13127],[121.688983,37.133503],[121.683455,37.141917],[121.694037,37.141239],[121.699328,37.125926],[121.733995,37.125607],[121.737706,37.136175],[121.747656,37.135776],[121.767872,37.170979],[121.761002,37.177954],[121.753895,37.172493],[121.749315,37.176439],[121.760686,37.178831],[121.759738,37.19222],[121.769057,37.196364],[121.761634,37.217997],[121.754527,37.212022],[121.755632,37.220506],[121.748525,37.223255],[121.74813,37.241575],[121.757211,37.247667],[121.7749,37.248225],[121.778296,37.260487],[121.784692,37.268409],[121.792431,37.288469],[121.790615,37.299532],[121.794879,37.30375],[121.815253,37.300447],[121.822281,37.303988],[121.834047,37.318311],[121.859396,37.329249],[121.865239,37.336727],[121.870293,37.368894],[121.882454,37.381694],[121.90038,37.391232],[121.908435,37.400969],[121.91878,37.420755],[121.920438,37.429931],[121.933941,37.452529],[121.929519,37.454713],[121.92944,37.460868],[121.923992,37.473096]]],[[[122.183559,37.49957],[122.171951,37.501792],[122.184901,37.5156],[122.188218,37.510165],[122.199747,37.510323],[122.202748,37.501951],[122.216173,37.497824],[122.183559,37.49957]]],[[[122.257631,36.755638],[122.267028,36.754195],[122.260316,36.748704],[122.257631,36.755638]]],[[[121.484614,36.732871],[121.492274,36.740207],[121.499776,36.73712],[121.484614,36.732871]]],[[[121.620834,36.713827],[121.623124,36.728702],[121.631179,36.725855],[121.620834,36.713827]]],[[[122.482215,37.447089],[122.483479,37.454991],[122.490586,37.449829],[122.482215,37.447089]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371100,\"name\":\"日照市\",\"center\":[119.461208,35.428588],\"centroid\":[119.146499,35.578656],\"childrenNum\":4,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":10,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.662115,35.589294],[119.665748,35.570255],[119.649875,35.537658],[119.639215,35.509446],[119.628712,35.500854],[119.618999,35.459469],[119.612997,35.449813],[119.600205,35.443537],[119.592545,35.43339],[119.579673,35.406527],[119.578804,35.385568],[119.588991,35.376106],[119.586938,35.36387],[119.57912,35.357629],[119.543743,35.34796],[119.539794,35.329802],[119.552745,35.330006],[119.552113,35.324456],[119.53861,35.320456],[119.538452,35.29674],[119.528502,35.303721],[119.520447,35.303803],[119.516025,35.318089],[119.502442,35.321721],[119.476541,35.308334],[119.451113,35.28539],[119.42458,35.255332],[119.411313,35.231638],[119.397652,35.166893],[119.416604,35.167465],[119.416999,35.158183],[119.396073,35.157815],[119.393546,35.143582],[119.397731,35.137692],[119.418973,35.128283],[119.428292,35.121205],[119.432398,35.111385],[119.426633,35.108234],[119.412893,35.11073],[119.403259,35.106802],[119.396467,35.091701],[119.386518,35.088918],[119.374041,35.078685],[119.360379,35.075655],[119.350508,35.083883],[119.305812,35.076679],[119.301785,35.093174],[119.286702,35.11515],[119.267276,35.117154],[119.25551,35.122637],[119.240743,35.122923],[119.220685,35.10717],[119.203233,35.110894],[119.196679,35.129919],[119.189967,35.138101],[119.174252,35.139042],[119.164223,35.143173],[119.163433,35.154134],[119.173146,35.1617],[119.164855,35.166525],[119.157274,35.18243],[119.149219,35.189298],[119.1354,35.191669],[119.139032,35.202338],[119.161301,35.204136],[119.170225,35.21231],[119.174568,35.230331],[119.182149,35.241852],[119.181991,35.25231],[119.187519,35.258192],[119.179543,35.287595],[119.164065,35.289554],[119.155931,35.293882],[119.157669,35.301721],[119.143218,35.314048],[119.141322,35.320823],[119.148193,35.326741],[119.146455,35.334862],[119.133741,35.335596],[119.105708,35.330659],[119.096153,35.326864],[119.087229,35.340575],[119.085571,35.354243],[119.078385,35.357506],[119.075542,35.366113],[119.06575,35.364563],[119.04893,35.371498],[119.044587,35.377004],[119.024371,35.386873],[118.999654,35.388953],[118.984413,35.382224],[118.98852,35.36697],[118.986861,35.353141],[118.973042,35.340167],[118.961828,35.334168],[118.947219,35.336943],[118.930478,35.331271],[118.923213,35.339187],[118.92195,35.348408],[118.904814,35.355507],[118.889573,35.357261],[118.871015,35.367215],[118.874174,35.388464],[118.865725,35.391685],[118.859644,35.381694],[118.84314,35.370804],[118.816764,35.373292],[118.797575,35.369417],[118.784151,35.371049],[118.776412,35.37627],[118.768989,35.368031],[118.739455,35.359505],[118.723898,35.368479],[118.712527,35.363544],[118.709605,35.369825],[118.696891,35.379818],[118.682914,35.368642],[118.652274,35.373578],[118.632059,35.368438],[118.625425,35.370315],[118.624952,35.387036],[118.606157,35.390747],[118.601419,35.414517],[118.619029,35.423118],[118.635691,35.421039],[118.642246,35.425156],[118.632611,35.430903],[118.6289,35.449324],[118.64801,35.453276],[118.651011,35.458614],[118.662066,35.461547],[118.667831,35.456821],[118.693575,35.459103],[118.698234,35.455436],[118.709131,35.457677],[118.723898,35.468758],[118.734322,35.48607],[118.725004,35.496578],[118.698865,35.513558],[118.696575,35.528622],[118.725083,35.553205],[118.724056,35.562972],[118.734875,35.569767],[118.74056,35.581484],[118.735822,35.593443],[118.739692,35.62496],[118.751458,35.640409],[118.76662,35.653539],[118.791416,35.68296],[118.794101,35.697504],[118.806499,35.718056],[118.804209,35.728655],[118.798918,35.730117],[118.757223,35.725935],[118.743482,35.729346],[118.722161,35.73101],[118.707078,35.738075],[118.703288,35.745221],[118.706525,35.765152],[118.702182,35.772295],[118.700603,35.791367],[118.716712,35.80723],[118.724609,35.820454],[118.722082,35.834932],[118.732822,35.848111],[118.7498,35.849489],[118.75438,35.853544],[118.756038,35.877379],[118.765198,35.898331],[118.777281,35.896791],[118.775148,35.917251],[118.805709,35.923854],[118.80413,35.939731],[118.813922,35.948761],[118.837217,35.948883],[118.883571,35.957305],[118.893047,35.963257],[118.897312,35.97605],[118.87986,35.992321],[118.896048,36.006404],[118.956853,36.008427],[118.981886,36.017409],[118.999022,36.038404],[119.012526,36.03533],[119.024134,36.02631],[119.017659,36.024044],[119.014105,36.013404],[119.023739,36.011219],[119.024924,36.003571],[119.015606,35.995923],[119.021054,35.977426],[119.05201,35.9803],[119.060538,35.978195],[119.066619,35.963986],[119.07878,35.959289],[119.088888,35.963176],[119.121817,35.962731],[119.134373,35.968601],[119.153246,35.971192],[119.155063,35.965767],[119.178595,35.97107],[119.182623,35.962285],[119.179385,35.926163],[119.183412,35.91875],[119.169672,35.91721],[119.151746,35.905502],[119.144718,35.904449],[119.135637,35.892982],[119.158221,35.882486],[119.161854,35.894481],[119.169119,35.894846],[119.190598,35.879446],[119.217053,35.879527],[119.240427,35.884269],[119.281964,35.910202],[119.294441,35.911336],[119.298153,35.893022],[119.315999,35.887552],[119.345533,35.893792],[119.360695,35.884066],[119.371435,35.860476],[119.358247,35.84511],[119.372382,35.830025],[119.374041,35.816154],[119.368829,35.770834],[119.375857,35.770712],[119.390466,35.778707],[119.397731,35.786823],[119.427739,35.802078],[119.444322,35.804026],[119.455693,35.809056],[119.464696,35.80861],[119.482385,35.799725],[119.493282,35.789866],[119.496599,35.779235],[119.48657,35.771646],[119.48807,35.754599],[119.504101,35.752325],[119.525422,35.730604],[119.517762,35.723742],[119.521079,35.716879],[119.518473,35.700632],[119.51484,35.697992],[119.519105,35.68552],[119.528265,35.674305],[119.524474,35.632279],[119.517762,35.625774],[119.518157,35.615446],[119.536872,35.606011],[119.538215,35.589294],[119.556535,35.592508],[119.57762,35.586243],[119.592308,35.600683],[119.600599,35.590271],[119.609286,35.59202],[119.614972,35.606336],[119.634713,35.598731],[119.651455,35.588766],[119.662115,35.589294]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371300,\"name\":\"临沂市\",\"center\":[118.326443,35.065282],\"centroid\":[118.286436,35.311894],\"childrenNum\":12,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":11,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.419191,35.273997],[117.439565,35.282368],[117.463098,35.287472],[117.478891,35.314375],[117.453937,35.325027],[117.446988,35.330292],[117.439012,35.348939],[117.439644,35.359668],[117.463887,35.375617],[117.463334,35.39038],[117.474785,35.400941],[117.467441,35.418186],[117.455833,35.424953],[117.453779,35.442396],[117.42851,35.458614],[117.442171,35.469247],[117.452279,35.490306],[117.462703,35.497922],[117.467441,35.512255],[117.472416,35.514372],[117.481734,35.507898],[117.498396,35.503093],[117.501634,35.512947],[117.513795,35.514576],[117.520033,35.51991],[117.516401,35.527319],[117.50424,35.531675],[117.496264,35.543031],[117.499502,35.550845],[117.515058,35.551008],[117.528641,35.547182],[117.582418,35.554141],[117.593473,35.567448],[117.590394,35.573551],[117.592763,35.589701],[117.585577,35.593972],[117.588893,35.619878],[117.596948,35.630449],[117.599001,35.649149],[117.605319,35.674834],[117.62585,35.703841],[117.634616,35.709324],[117.663913,35.70969],[117.679154,35.713305],[117.707424,35.726016],[117.732615,35.71237],[117.754173,35.709609],[117.769019,35.726625],[117.781733,35.734096],[117.811504,35.732919],[117.823033,35.739496],[117.837405,35.741445],[117.833694,35.760484],[117.828482,35.773837],[117.831167,35.786661],[117.846092,35.796398],[117.840959,35.812058],[117.828403,35.821792],[117.827376,35.827754],[117.842143,35.84507],[117.85541,35.850219],[117.86686,35.86984],[117.883364,35.882648],[117.906265,35.884634],[117.924586,35.880946],[117.937615,35.874826],[117.960516,35.87057],[117.968097,35.884066],[117.97931,35.889699],[117.981364,35.906191],[117.988234,35.908703],[117.99921,35.925393],[117.997394,35.934587],[117.988471,35.947709],[118.021084,35.949004],[118.02298,35.958965],[118.03293,35.964998],[118.032693,35.974268],[118.042248,35.986371],[118.058989,35.992968],[118.066807,36.009155],[118.075888,36.009034],[118.078415,36.017652],[118.084338,36.012149],[118.093261,36.014618],[118.096104,36.024246],[118.10937,36.030031],[118.132666,36.030436],[118.135588,36.02364],[118.178388,36.017005],[118.197578,36.004947],[118.206106,35.97864],[118.193787,35.974026],[118.207054,35.964391],[118.209897,35.955767],[118.22569,35.948235],[118.236351,35.947749],[118.236904,35.939245],[118.245906,35.932157],[118.257119,35.930699],[118.257593,35.925717],[118.26928,35.928512],[118.281362,35.935964],[118.293523,35.937503],[118.303552,35.948923],[118.314134,35.950827],[118.320136,35.946575],[118.344774,35.955888],[118.352828,35.956698],[118.360725,35.970908],[118.382283,35.975078],[118.387021,35.987586],[118.415213,35.990783],[118.430612,35.969694],[118.459356,35.952689],[118.470964,35.960868],[118.502157,35.962488],[118.505157,35.965808],[118.499393,35.976212],[118.486521,35.988759],[118.49268,35.995437],[118.487074,36.005797],[118.476571,36.012797],[118.469859,36.022992],[118.476097,36.031407],[118.489206,36.025784],[118.503341,36.024246],[118.507447,36.029789],[118.516845,36.026107],[118.522609,36.043622],[118.522214,36.05349],[118.513449,36.064085],[118.516608,36.068573],[118.507842,36.074961],[118.522925,36.084784],[118.529479,36.093879],[118.526716,36.104671],[118.504762,36.105802],[118.509974,36.114612],[118.515502,36.109884],[118.535797,36.118531],[118.541719,36.124996],[118.556881,36.130935],[118.565015,36.130087],[118.563988,36.147094],[118.572201,36.156424],[118.581914,36.151456],[118.606236,36.164218],[118.622109,36.17718],[118.640824,36.171042],[118.644299,36.177018],[118.653143,36.176695],[118.666015,36.168983],[118.675491,36.170194],[118.683388,36.158564],[118.679913,36.152062],[118.701235,36.144509],[118.703761,36.150446],[118.714659,36.154485],[118.72603,36.141035],[118.736454,36.146528],[118.73298,36.1519],[118.733532,36.166802],[118.741824,36.165551],[118.751142,36.183115],[118.745535,36.191754],[118.766383,36.206649],[118.78573,36.197487],[118.802076,36.202855],[118.809026,36.198738],[118.835796,36.203138],[118.847009,36.199263],[118.848746,36.188606],[118.844561,36.18473],[118.846614,36.172092],[118.85459,36.170194],[118.859802,36.16232],[118.858302,36.143256],[118.863908,36.139298],[118.858302,36.129966],[118.860197,36.114733],[118.865961,36.113682],[118.860513,36.101316],[118.875911,36.091535],[118.880886,36.08438],[118.886493,36.088584],[118.908288,36.091292],[118.920765,36.105721],[118.916185,36.111702],[118.936322,36.11344],[118.943271,36.119582],[118.954642,36.1115],[118.958512,36.104145],[118.970041,36.104671],[118.970278,36.09873],[118.988756,36.092343],[119.000523,36.099497],[119.013868,36.09881],[119.020344,36.104307],[119.038506,36.090444],[119.048851,36.092707],[119.066935,36.081631],[119.063539,36.075042],[119.049641,36.066632],[119.042534,36.055512],[119.040322,36.042934],[119.052089,36.037838],[119.047903,36.024813],[119.035584,36.02275],[119.024134,36.02631],[119.012526,36.03533],[118.999022,36.038404],[118.981886,36.017409],[118.956853,36.008427],[118.896048,36.006404],[118.87986,35.992321],[118.897312,35.97605],[118.893047,35.963257],[118.883571,35.957305],[118.837217,35.948883],[118.813922,35.948761],[118.80413,35.939731],[118.805709,35.923854],[118.775148,35.917251],[118.777281,35.896791],[118.765198,35.898331],[118.756038,35.877379],[118.75438,35.853544],[118.7498,35.849489],[118.732822,35.848111],[118.722082,35.834932],[118.724609,35.820454],[118.716712,35.80723],[118.700603,35.791367],[118.702182,35.772295],[118.706525,35.765152],[118.703288,35.745221],[118.707078,35.738075],[118.722161,35.73101],[118.743482,35.729346],[118.757223,35.725935],[118.798918,35.730117],[118.804209,35.728655],[118.806499,35.718056],[118.794101,35.697504],[118.791416,35.68296],[118.76662,35.653539],[118.751458,35.640409],[118.739692,35.62496],[118.735822,35.593443],[118.74056,35.581484],[118.734875,35.569767],[118.724056,35.562972],[118.725083,35.553205],[118.696575,35.528622],[118.698865,35.513558],[118.725004,35.496578],[118.734322,35.48607],[118.723898,35.468758],[118.709131,35.457677],[118.698234,35.455436],[118.693575,35.459103],[118.667831,35.456821],[118.662066,35.461547],[118.651011,35.458614],[118.64801,35.453276],[118.6289,35.449324],[118.632611,35.430903],[118.642246,35.425156],[118.635691,35.421039],[118.619029,35.423118],[118.601419,35.414517],[118.606157,35.390747],[118.624952,35.387036],[118.625425,35.370315],[118.632059,35.368438],[118.652274,35.373578],[118.682914,35.368642],[118.696891,35.379818],[118.709605,35.369825],[118.712527,35.363544],[118.723898,35.368479],[118.739455,35.359505],[118.768989,35.368031],[118.776412,35.37627],[118.784151,35.371049],[118.797575,35.369417],[118.816764,35.373292],[118.84314,35.370804],[118.859644,35.381694],[118.865725,35.391685],[118.874174,35.388464],[118.871015,35.367215],[118.889573,35.357261],[118.904814,35.355507],[118.92195,35.348408],[118.923213,35.339187],[118.930478,35.331271],[118.947219,35.336943],[118.961828,35.334168],[118.973042,35.340167],[118.986861,35.353141],[118.98852,35.36697],[118.984413,35.382224],[118.999654,35.388953],[119.024371,35.386873],[119.044587,35.377004],[119.04893,35.371498],[119.06575,35.364563],[119.075542,35.366113],[119.078385,35.357506],[119.085571,35.354243],[119.087229,35.340575],[119.096153,35.326864],[119.105708,35.330659],[119.133741,35.335596],[119.146455,35.334862],[119.148193,35.326741],[119.141322,35.320823],[119.143218,35.314048],[119.157669,35.301721],[119.155931,35.293882],[119.164065,35.289554],[119.179543,35.287595],[119.187519,35.258192],[119.181991,35.25231],[119.182149,35.241852],[119.174568,35.230331],[119.170225,35.21231],[119.161301,35.204136],[119.139032,35.202338],[119.1354,35.191669],[119.149219,35.189298],[119.157274,35.18243],[119.164855,35.166525],[119.173146,35.1617],[119.163433,35.154134],[119.164223,35.143173],[119.174252,35.139042],[119.189967,35.138101],[119.196679,35.129919],[119.203233,35.110894],[119.171409,35.10717],[119.159011,35.100991],[119.138085,35.096285],[119.129477,35.076187],[119.120475,35.070088],[119.120396,35.05801],[119.114631,35.05498],[119.073647,35.056659],[119.061407,35.051581],[119.037401,35.051335],[119.00534,35.05412],[118.992152,35.048182],[118.965619,35.046462],[118.945166,35.040811],[118.928504,35.050885],[118.911131,35.047773],[118.903787,35.041343],[118.885782,35.034258],[118.86533,35.029834],[118.862487,35.025697],[118.865093,34.993208],[118.859249,34.962633],[118.86075,34.943979],[118.829715,34.911129],[118.805235,34.873055],[118.802471,34.845637],[118.768989,34.846129],[118.768278,34.838822],[118.78194,34.82749],[118.776649,34.818785],[118.779018,34.809627],[118.773569,34.795333],[118.756512,34.789541],[118.73756,34.792088],[118.728399,34.786871],[118.740166,34.781243],[118.738507,34.766862],[118.727215,34.768752],[118.716475,34.763821],[118.719239,34.745533],[118.730374,34.745451],[118.740087,34.736901],[118.759197,34.740847],[118.768515,34.738093],[118.78344,34.722061],[118.758723,34.703434],[118.739376,34.69377],[118.720108,34.694222],[118.704077,34.688752],[118.690258,34.678593],[118.681335,34.678346],[118.664357,34.693441],[118.650537,34.695086],[118.633717,34.687025],[118.604894,34.696484],[118.60134,34.714167],[118.570464,34.712522],[118.558934,34.706847],[118.546063,34.70619],[118.53935,34.711494],[118.525215,34.712563],[118.522688,34.692289],[118.508158,34.687066],[118.500814,34.675178],[118.484231,34.6709],[118.468437,34.674315],[118.460856,34.65757],[118.466463,34.643127],[118.474913,34.637201],[118.473807,34.623412],[118.46362,34.625265],[118.452881,34.617691],[118.439219,34.626294],[118.42382,34.591094],[118.428322,34.563253],[118.440956,34.52477],[118.439535,34.507996],[118.430928,34.489074],[118.421372,34.483219],[118.41624,34.473859],[118.411344,34.446391],[118.405342,34.437027],[118.404947,34.427744],[118.395155,34.427084],[118.379993,34.415531],[118.353223,34.41747],[118.352197,34.422834],[118.320925,34.421349],[118.290681,34.424567],[118.28918,34.412271],[118.279862,34.412188],[118.277414,34.404677],[118.242431,34.405709],[118.230981,34.398693],[118.220241,34.405957],[118.217714,34.379127],[118.204369,34.377352],[118.189602,34.380654],[118.183363,34.390355],[118.179336,34.379416],[118.170413,34.381356],[118.177125,34.408722],[118.178862,34.425186],[118.177757,34.453238],[118.139931,34.475344],[118.132824,34.483425],[118.141826,34.497154],[118.164964,34.504904],[118.16757,34.519701],[118.184706,34.544179],[118.163542,34.551471],[118.153671,34.549164],[118.140721,34.554025],[118.137167,34.563253],[118.126428,34.55522],[118.100447,34.564736],[118.078968,34.569761],[118.082363,34.579893],[118.102816,34.593441],[118.11474,34.614397],[118.113003,34.621437],[118.100526,34.626582],[118.094603,34.636583],[118.102658,34.647736],[118.084022,34.655924],[118.077783,34.653702],[118.05741,34.655019],[118.053935,34.650945],[118.02069,34.660409],[118.018242,34.647036],[118.007818,34.64753],[118.007423,34.65613],[117.99084,34.661726],[117.991708,34.670077],[117.96328,34.678552],[117.951672,34.678469],[117.939669,34.664852],[117.90974,34.67016],[117.903106,34.644567],[117.880995,34.645184],[117.877916,34.650205],[117.863465,34.645184],[117.849408,34.647201],[117.847513,34.652386],[117.834483,34.647324],[117.831798,34.653455],[117.820111,34.646172],[117.805818,34.646254],[117.819243,34.681842],[117.825639,34.684392],[117.831719,34.707793],[117.825244,34.713139],[117.823665,34.72868],[117.830061,34.740888],[117.830614,34.760246],[117.79958,34.768875],[117.784576,34.780667],[117.784023,34.79484],[117.77739,34.801248],[117.798632,34.810653],[117.803686,34.830734],[117.795315,34.835907],[117.763175,34.848839],[117.75291,34.857623],[117.742407,34.874163],[117.729298,34.876994],[117.715163,34.896238],[117.70466,34.906699],[117.698501,34.919989],[117.704265,34.933605],[117.712004,34.934999],[117.714689,34.947833],[117.724323,34.958329],[117.719506,34.968331],[117.726534,34.979561],[117.728035,35.008041],[117.737985,35.013203],[117.744618,35.022748],[117.736247,35.031514],[117.704423,35.031227],[117.707345,35.052318],[117.69321,35.06018],[117.676469,35.065543],[117.656885,35.077497],[117.650725,35.092724],[117.623007,35.113063],[117.604371,35.13401],[117.600344,35.135524],[117.591025,35.152539],[117.586208,35.152989],[117.58376,35.164317],[117.570336,35.168365],[117.556043,35.161291],[117.548462,35.161741],[117.528009,35.184351],[117.526825,35.200621],[117.507162,35.198986],[117.494843,35.205893],[117.480628,35.222771],[117.468073,35.228369],[117.448331,35.231842],[117.449752,35.246795],[117.439486,35.258927],[117.426456,35.261786],[117.419191,35.273997]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371400,\"name\":\"德州市\",\"center\":[116.307428,37.453968],\"centroid\":[116.653994,37.251363],\"childrenNum\":11,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":12,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[115.768684,36.921014],[115.761972,36.924413],[115.762683,36.939327],[115.772791,36.936849],[115.788189,36.9526],[115.796876,36.968747],[115.791743,36.975261],[115.784478,36.970625],[115.786373,36.983093],[115.776265,36.990884],[115.790874,37.005985],[115.808089,37.010259],[115.813222,37.019126],[115.812354,37.02895],[115.825778,37.032384],[115.831938,37.045281],[115.85626,37.06073],[115.855154,37.071108],[115.865025,37.070828],[115.868263,37.084038],[115.879476,37.105583],[115.885399,37.128757],[115.879397,37.138647],[115.87995,37.152004],[115.892269,37.157625],[115.912485,37.178751],[115.904825,37.189391],[115.9098,37.206803],[115.920145,37.214173],[115.920934,37.223534],[115.926778,37.219511],[115.941387,37.227716],[115.953232,37.223693],[115.969421,37.239464],[115.971079,37.245636],[115.963972,37.250096],[115.972895,37.257103],[115.966973,37.265742],[115.975185,37.268967],[115.976212,37.276171],[115.96871,37.28632],[115.970763,37.295553],[115.981503,37.30737],[115.984346,37.319265],[115.975659,37.317515],[115.972974,37.324039],[115.984503,37.326067],[115.975738,37.337283],[115.986951,37.341738],[116.009457,37.343169],[116.000376,37.350804],[116.013643,37.349571],[116.024461,37.359949],[116.031252,37.356411],[116.051942,37.357484],[116.056206,37.369053],[116.072474,37.368099],[116.087557,37.373307],[116.106588,37.368815],[116.116459,37.374301],[116.126646,37.373466],[116.168814,37.384118],[116.18524,37.369928],[116.195506,37.365674],[116.234437,37.361221],[116.251652,37.376566],[116.261602,37.389802],[116.270446,37.389126],[116.273052,37.398425],[116.282923,37.401326],[116.270446,37.413802],[116.275026,37.418252],[116.263023,37.422423],[116.270999,37.426714],[116.250072,37.425919],[116.247151,37.422066],[116.231515,37.424529],[116.22733,37.434261],[116.243123,37.448201],[116.243597,37.455904],[116.229936,37.459676],[116.224803,37.479963],[116.235068,37.479725],[116.241307,37.491434],[116.258285,37.482662],[116.256469,37.478812],[116.276448,37.466902],[116.271473,37.478931],[116.290899,37.484766],[116.286082,37.491117],[116.292952,37.497387],[116.284344,37.500721],[116.297532,37.508816],[116.280317,37.510879],[116.283555,37.517584],[116.278422,37.524765],[116.291373,37.523813],[116.286082,37.532619],[116.291373,37.545589],[116.287898,37.549317],[116.299348,37.55935],[116.299664,37.56958],[116.304481,37.564505],[116.334805,37.574773],[116.319406,37.580046],[116.33591,37.581235],[116.344913,37.570492],[116.343491,37.566011],[116.367655,37.566289],[116.375473,37.560341],[116.376895,37.546581],[116.367892,37.533809],[116.368919,37.526392],[116.382738,37.523615],[116.388661,37.516315],[116.402164,37.509847],[116.414089,37.490997],[116.434146,37.473334],[116.438648,37.477224],[116.446702,37.500562],[116.46218,37.517426],[116.482633,37.52179],[116.49969,37.537855],[116.507113,37.541822],[116.51959,37.559905],[116.538463,37.56843],[116.545807,37.582504],[116.563496,37.596495],[116.556547,37.596852],[116.580316,37.613258],[116.60448,37.625105],[116.630776,37.652713],[116.640884,37.666454],[116.636462,37.675877],[116.641042,37.68233],[116.646412,37.676233],[116.653677,37.67754],[116.664022,37.687793],[116.675235,37.720838],[116.679736,37.72879],[116.69932,37.73065],[116.698768,37.738759],[116.709586,37.735199],[116.724511,37.744297],[116.718826,37.762331],[116.723169,37.766721],[116.73912,37.756914],[116.744174,37.757349],[116.753808,37.770517],[116.75365,37.793011],[116.74599,37.795778],[116.758941,37.801865],[116.766838,37.81135],[116.786185,37.826326],[116.788159,37.843432],[116.794556,37.846987],[116.811771,37.847935],[116.812718,37.84359],[116.828038,37.840627],[116.843753,37.834465],[116.879604,37.843748],[116.919325,37.84592],[116.950359,37.839719],[116.976656,37.841062],[117.008874,37.833872],[117.027195,37.832371],[117.040541,37.839324],[117.074339,37.848725],[117.093765,37.849515],[117.150148,37.8396],[117.163651,37.839798],[117.185368,37.849791],[117.208821,37.843748],[117.259755,37.838257],[117.271364,37.839916],[117.284472,37.84675],[117.302951,37.852358],[117.320166,37.861402],[117.344251,37.862666],[117.364704,37.854136],[117.381919,37.854531],[117.40632,37.843511],[117.423614,37.847263],[117.438539,37.853859],[117.466809,37.890739],[117.481181,37.914854],[117.49271,37.927481],[117.512847,37.943459],[117.520902,37.966729],[117.524377,37.989479],[117.541039,38.011237],[117.54933,38.010252],[117.563545,37.998585],[117.570652,37.957264],[117.567809,37.946772],[117.529036,37.932295],[117.539302,37.913552],[117.542776,37.890146],[117.547198,37.883198],[117.568835,37.882409],[117.580602,37.875302],[117.581076,37.858993],[117.595685,37.853504],[117.606582,37.845209],[117.605003,37.838968],[117.59529,37.834741],[117.588025,37.82273],[117.56623,37.812733],[117.568599,37.804987],[117.559912,37.800008],[117.546567,37.776368],[117.547356,37.767512],[117.526509,37.762964],[117.522165,37.755371],[117.531563,37.748213],[117.544119,37.747699],[117.547198,37.737494],[117.542618,37.726258],[117.556201,37.716683],[117.539775,37.713993],[117.543092,37.703625],[117.531247,37.688901],[117.506451,37.686803],[117.50345,37.680548],[117.488604,37.677025],[117.477075,37.654416],[117.465625,37.655564],[117.451963,37.669978],[117.444224,37.671918],[117.428825,37.665741],[117.415401,37.669582],[117.407188,37.678846],[117.392974,37.660039],[117.373074,37.648594],[117.363835,37.649624],[117.357596,37.658495],[117.358149,37.672947],[117.363598,37.679559],[117.36573,37.698361],[117.352543,37.707345],[117.344567,37.693136],[117.347489,37.683319],[117.329405,37.673343],[117.318428,37.662019],[117.312506,37.64194],[117.304925,37.640514],[117.312585,37.633701],[117.317797,37.615081],[117.314875,37.600458],[117.308321,37.589956],[117.288973,37.577112],[117.280682,37.56621],[117.277681,37.545391],[117.273417,37.532619],[117.260861,37.530081],[117.238197,37.532897],[117.230063,37.528891],[117.22114,37.51318],[117.199345,37.487148],[117.176049,37.486116],[117.163809,37.478971],[117.135618,37.475239],[117.124878,37.483853],[117.109795,37.47901],[117.098819,37.469721],[117.104978,37.455309],[117.096845,37.440099],[117.085631,37.437517],[117.029406,37.435174],[117.018193,37.418967],[117.019693,37.405419],[117.008164,37.392464],[116.99924,37.376964],[117.009664,37.359671],[117.006663,37.355138],[116.987158,37.342692],[116.986684,37.335335],[116.993397,37.32201],[117.002241,37.285962],[117.024273,37.278918],[117.038961,37.266538],[117.030275,37.264229],[117.032328,37.253241],[117.041251,37.247667],[117.042673,37.238867],[117.036592,37.237393],[117.03596,37.224091],[117.022299,37.215089],[117.037777,37.207361],[117.037382,37.195169],[117.045358,37.197161],[117.05744,37.192141],[117.06352,37.182656],[117.061783,37.16496],[117.050648,37.160894],[117.054676,37.141717],[117.059809,37.137251],[117.047411,37.134739],[117.044884,37.122615],[117.024273,37.119664],[117.004531,37.121219],[116.982578,37.113601],[116.931486,37.100477],[116.919009,37.093056],[116.91972,37.081364],[116.925247,37.069831],[116.928643,37.05103],[116.944279,37.042327],[116.948701,37.036537],[116.943173,37.030907],[116.907796,37.019046],[116.891607,37.00271],[116.875024,36.999274],[116.885764,36.991444],[116.886158,36.983573],[116.899188,36.977499],[116.897767,36.962712],[116.907717,36.963272],[116.933381,36.959595],[116.931881,36.946204],[116.935434,36.93457],[116.922563,36.93453],[116.934408,36.925973],[116.957466,36.916495],[116.963152,36.893896],[116.96181,36.867529],[116.962836,36.842674],[116.948069,36.839231],[116.9442,36.844916],[116.934724,36.845116],[116.935908,36.829743],[116.933223,36.823697],[116.919404,36.822776],[116.892476,36.830023],[116.887106,36.833427],[116.882447,36.824058],[116.887975,36.811404],[116.872813,36.812004],[116.868233,36.801872],[116.865548,36.777877],[116.87076,36.759164],[116.883868,36.758243],[116.88679,36.745538],[116.873997,36.739846],[116.861757,36.730345],[116.842489,36.72786],[116.830881,36.723851],[116.802768,36.706729],[116.799689,36.694417],[116.780657,36.691048],[116.780736,36.671552],[116.777262,36.660718],[116.763126,36.651971],[116.759494,36.632746],[116.742042,36.620381],[116.71314,36.608858],[116.693319,36.607895],[116.694345,36.591149],[116.682421,36.580586],[116.661258,36.578376],[116.662916,36.563111],[116.658968,36.553026],[116.646728,36.544105],[116.629592,36.544587],[116.622801,36.532651],[116.60835,36.52011],[116.610087,36.51609],[116.627223,36.508853],[116.624301,36.497233],[116.602032,36.495223],[116.593267,36.485973],[116.595636,36.480383],[116.613009,36.473425],[116.611429,36.459104],[116.620905,36.44144],[116.6198,36.428522],[116.612377,36.42333],[116.591213,36.416286],[116.546202,36.40892],[116.549518,36.417333],[116.535857,36.41842],[116.539647,36.427597],[116.527092,36.424337],[116.511851,36.430012],[116.512798,36.441239],[116.507271,36.447999],[116.489345,36.454477],[116.481685,36.448361],[116.461548,36.449971],[116.455705,36.46192],[116.459258,36.47978],[116.445676,36.488587],[116.443544,36.498319],[116.431304,36.500611],[116.412983,36.519145],[116.400901,36.524813],[116.399322,36.540126],[116.403507,36.564878],[116.410298,36.593237],[116.411325,36.615242],[116.406034,36.631983],[116.41322,36.643181],[116.411246,36.676647],[116.40706,36.689042],[116.407139,36.704804],[116.397584,36.715431],[116.393399,36.731708],[116.401849,36.74634],[116.405639,36.761208],[116.396242,36.792459],[116.376026,36.797025],[116.391978,36.802913],[116.397663,36.809441],[116.409193,36.807038],[116.408008,36.815729],[116.399874,36.823857],[116.409587,36.83759],[116.407218,36.846717],[116.415352,36.855923],[116.412746,36.861086],[116.429645,36.865208],[116.434146,36.876453],[116.419537,36.877213],[116.415905,36.881374],[116.422143,36.890536],[116.417958,36.894297],[116.421591,36.905257],[116.433988,36.908417],[116.447966,36.899977],[116.452467,36.906417],[116.449308,36.915496],[116.439911,36.916495],[116.444728,36.923694],[116.443149,36.932211],[116.461548,36.940687],[116.470551,36.940007],[116.471103,36.947043],[116.458074,36.955358],[116.442675,36.954319],[116.434383,36.968228],[116.405876,36.969067],[116.379343,36.966309],[116.370261,36.963272],[116.366471,36.971864],[116.341359,36.980256],[116.340175,36.971944],[116.324065,36.972024],[116.317037,36.981854],[116.304955,36.990245],[116.30535,36.994999],[116.290741,36.995759],[116.26784,37.010499],[116.254731,37.008262],[116.247624,37.019685],[116.250388,37.025476],[116.232857,37.032225],[116.225592,37.025396],[116.222276,37.010339],[116.235779,37.010139],[116.229225,36.996438],[116.211694,36.990085],[116.212089,36.982454],[116.219196,36.979617],[116.210588,36.970146],[116.211536,36.963112],[116.191478,36.963312],[116.18366,36.959595],[116.172842,36.947723],[116.173237,36.929692],[116.164392,36.916975],[116.146388,36.910776],[116.123724,36.890656],[116.114958,36.897697],[116.097349,36.891336],[116.098217,36.883895],[116.082424,36.883855],[116.075948,36.889496],[116.061892,36.888576],[116.050126,36.894497],[116.005667,36.884375],[115.947704,36.888576],[115.920461,36.892976],[115.894796,36.905657],[115.885241,36.907017],[115.881687,36.917575],[115.875844,36.916255],[115.868421,36.901457],[115.853733,36.904777],[115.85855,36.908337],[115.85397,36.916215],[115.848995,36.912656],[115.832964,36.918575],[115.83178,36.910856],[115.823251,36.913496],[115.81875,36.908577],[115.813064,36.913416],[115.791348,36.914336],[115.779819,36.904977],[115.780293,36.912216],[115.768684,36.921014]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371500,\"name\":\"聊城市\",\"center\":[115.980367,36.456013],\"centroid\":[115.887733,36.460089],\"childrenNum\":8,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":13,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[115.768684,36.921014],[115.780293,36.912216],[115.779819,36.904977],[115.791348,36.914336],[115.813064,36.913416],[115.81875,36.908577],[115.823251,36.913496],[115.83178,36.910856],[115.832964,36.918575],[115.848995,36.912656],[115.85397,36.916215],[115.85855,36.908337],[115.853733,36.904777],[115.868421,36.901457],[115.875844,36.916255],[115.881687,36.917575],[115.885241,36.907017],[115.894796,36.905657],[115.920461,36.892976],[115.947704,36.888576],[116.005667,36.884375],[116.050126,36.894497],[116.061892,36.888576],[116.075948,36.889496],[116.082424,36.883855],[116.098217,36.883895],[116.097349,36.891336],[116.114958,36.897697],[116.123724,36.890656],[116.146388,36.910776],[116.164392,36.916975],[116.173237,36.929692],[116.172842,36.947723],[116.18366,36.959595],[116.191478,36.963312],[116.211536,36.963112],[116.210588,36.970146],[116.219196,36.979617],[116.212089,36.982454],[116.211694,36.990085],[116.229225,36.996438],[116.235779,37.010139],[116.222276,37.010339],[116.225592,37.025396],[116.232857,37.032225],[116.250388,37.025476],[116.247624,37.019685],[116.254731,37.008262],[116.26784,37.010499],[116.290741,36.995759],[116.30535,36.994999],[116.304955,36.990245],[116.317037,36.981854],[116.324065,36.972024],[116.340175,36.971944],[116.341359,36.980256],[116.366471,36.971864],[116.370261,36.963272],[116.379343,36.966309],[116.405876,36.969067],[116.434383,36.968228],[116.442675,36.954319],[116.458074,36.955358],[116.471103,36.947043],[116.470551,36.940007],[116.461548,36.940687],[116.443149,36.932211],[116.444728,36.923694],[116.439911,36.916495],[116.449308,36.915496],[116.452467,36.906417],[116.447966,36.899977],[116.433988,36.908417],[116.421591,36.905257],[116.417958,36.894297],[116.422143,36.890536],[116.415905,36.881374],[116.419537,36.877213],[116.434146,36.876453],[116.429645,36.865208],[116.412746,36.861086],[116.415352,36.855923],[116.407218,36.846717],[116.409587,36.83759],[116.399874,36.823857],[116.408008,36.815729],[116.409193,36.807038],[116.397663,36.809441],[116.391978,36.802913],[116.376026,36.797025],[116.396242,36.792459],[116.405639,36.761208],[116.401849,36.74634],[116.393399,36.731708],[116.397584,36.715431],[116.407139,36.704804],[116.40706,36.689042],[116.411246,36.676647],[116.41322,36.643181],[116.406034,36.631983],[116.411325,36.615242],[116.410298,36.593237],[116.403507,36.564878],[116.399322,36.540126],[116.400901,36.524813],[116.412983,36.519145],[116.431304,36.500611],[116.443544,36.498319],[116.445676,36.488587],[116.459258,36.47978],[116.455705,36.46192],[116.461548,36.449971],[116.481685,36.448361],[116.489345,36.454477],[116.507271,36.447999],[116.512798,36.441239],[116.511851,36.430012],[116.527092,36.424337],[116.539647,36.427597],[116.535857,36.41842],[116.549518,36.417333],[116.546202,36.40892],[116.528592,36.387259],[116.519984,36.384158],[116.503717,36.369982],[116.484607,36.336948],[116.449071,36.337149],[116.441411,36.321755],[116.430593,36.318007],[116.406745,36.319015],[116.374526,36.3039],[116.331251,36.290677],[116.322644,36.284669],[116.310799,36.270515],[116.307166,36.259464],[116.28624,36.239174],[116.280159,36.221945],[116.255047,36.203703],[116.234911,36.180935],[116.226066,36.173748],[116.213036,36.169831],[116.169446,36.171325],[116.164392,36.168862],[116.164313,36.146084],[116.123882,36.136429],[116.114011,36.122047],[116.099323,36.112066],[116.057391,36.104913],[116.028804,36.072292],[116.016406,36.061375],[115.989794,36.045442],[115.964051,36.0416],[115.935859,36.031447],[115.919276,36.019675],[115.895981,36.026188],[115.869447,36.015346],[115.859655,36.003693],[115.846231,36.004987],[115.837465,36.011016],[115.81725,36.012756],[115.797508,36.00697],[115.779819,35.993778],[115.786689,35.991228],[115.774528,35.981878],[115.774686,35.974511],[115.764341,35.970989],[115.73307,35.96682],[115.717908,35.971394],[115.698719,35.96605],[115.686953,35.9552],[115.68411,35.944388],[115.675423,35.938435],[115.651812,35.928917],[115.642415,35.920046],[115.607353,35.925839],[115.583742,35.921707],[115.548206,35.898006],[115.513302,35.890348],[115.504932,35.8991],[115.510775,35.908014],[115.505406,35.914415],[115.490717,35.908379],[115.495377,35.896021],[115.488033,35.880784],[115.460078,35.867732],[115.433861,35.839069],[115.432834,35.833878],[115.417909,35.824996],[115.407564,35.80865],[115.370923,35.788852],[115.3635,35.779925],[115.334993,35.796723],[115.335704,35.814329],[115.344074,35.838744],[115.349602,35.860963],[115.338152,35.864692],[115.3436,35.87215],[115.354893,35.869273],[115.36429,35.894035],[115.367449,35.92033],[115.364132,35.929484],[115.354182,35.937503],[115.356472,35.954633],[115.363105,35.972002],[115.386322,35.974471],[115.395956,35.991673],[115.419646,36.004745],[115.4431,36.008872],[115.447522,36.011826],[115.448865,36.047383],[115.441599,36.055755],[115.459604,36.063357],[115.455103,36.071282],[115.459762,36.080378],[115.466395,36.079691],[115.468843,36.092222],[115.473976,36.098123],[115.484242,36.125845],[115.48519,36.139702],[115.480689,36.171729],[115.47595,36.193046],[115.479109,36.209555],[115.47595,36.218878],[115.476503,36.246516],[115.465369,36.250389],[115.467817,36.267894],[115.462684,36.27612],[115.446101,36.273782],[115.436388,36.276362],[115.428491,36.286201],[115.41704,36.292773],[115.422963,36.30261],[115.41941,36.310914],[115.422963,36.322199],[115.414987,36.326551],[115.394614,36.322602],[115.366659,36.308938],[115.359789,36.318733],[115.370449,36.332757],[115.368712,36.342629],[115.349602,36.363094],[115.348575,36.384641],[115.339968,36.39809],[115.324885,36.405095],[115.313514,36.406625],[115.297404,36.413469],[115.312092,36.433593],[115.316909,36.432587],[115.317067,36.454035],[115.300247,36.465902],[115.291403,36.460592],[115.288876,36.470006],[115.293693,36.476079],[115.28469,36.476441],[115.283506,36.486416],[115.276083,36.486938],[115.272845,36.497394],[115.289744,36.497796],[115.296536,36.508853],[115.292587,36.514401],[115.295193,36.523205],[115.288323,36.528511],[115.295035,36.533254],[115.300484,36.525938],[115.307433,36.527426],[115.331281,36.550213],[115.334282,36.582473],[115.337836,36.58898],[115.35055,36.590065],[115.351576,36.595004],[115.340363,36.595245],[115.341468,36.603478],[115.350707,36.60665],[115.345022,36.612392],[115.35513,36.627407],[115.366027,36.621947],[115.378504,36.632866],[115.38798,36.646432],[115.386322,36.656305],[115.406459,36.663246],[115.412144,36.676486],[115.420594,36.686756],[115.446653,36.694617],[115.451391,36.702197],[115.450523,36.713626],[115.459762,36.717395],[115.460947,36.731869],[115.475477,36.744215],[115.478398,36.758804],[115.491428,36.761609],[115.506511,36.770465],[115.523568,36.763853],[115.52878,36.77395],[115.536835,36.772628],[115.53873,36.784127],[115.54947,36.782885],[115.552628,36.775874],[115.561315,36.775753],[115.560525,36.783806],[115.572133,36.775353],[115.584689,36.781042],[115.63744,36.797506],[115.650469,36.807519],[115.666184,36.812485],[115.671554,36.809281],[115.684189,36.812966],[115.692243,36.829343],[115.688532,36.840312],[115.700772,36.860726],[115.699982,36.866929],[115.711275,36.882374],[115.726121,36.893616],[115.735202,36.897017],[115.740572,36.906417],[115.757787,36.903017],[115.765131,36.909096],[115.768684,36.921014]]],[[[115.495377,35.896021],[115.504932,35.8991],[115.513302,35.890348],[115.503431,35.888686],[115.488033,35.880784],[115.495377,35.896021]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371600,\"name\":\"滨州市\",\"center\":[118.016974,37.383542],\"centroid\":[117.847396,37.542717],\"childrenNum\":7,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":14,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[117.273417,37.532619],[117.277681,37.545391],[117.280682,37.56621],[117.288973,37.577112],[117.308321,37.589956],[117.314875,37.600458],[117.317797,37.615081],[117.312585,37.633701],[117.304925,37.640514],[117.312506,37.64194],[117.318428,37.662019],[117.329405,37.673343],[117.347489,37.683319],[117.344567,37.693136],[117.352543,37.707345],[117.36573,37.698361],[117.363598,37.679559],[117.358149,37.672947],[117.357596,37.658495],[117.363835,37.649624],[117.373074,37.648594],[117.392974,37.660039],[117.407188,37.678846],[117.415401,37.669582],[117.428825,37.665741],[117.444224,37.671918],[117.451963,37.669978],[117.465625,37.655564],[117.477075,37.654416],[117.488604,37.677025],[117.50345,37.680548],[117.506451,37.686803],[117.531247,37.688901],[117.543092,37.703625],[117.539775,37.713993],[117.556201,37.716683],[117.542618,37.726258],[117.547198,37.737494],[117.544119,37.747699],[117.531563,37.748213],[117.522165,37.755371],[117.526509,37.762964],[117.547356,37.767512],[117.546567,37.776368],[117.559912,37.800008],[117.568599,37.804987],[117.56623,37.812733],[117.588025,37.82273],[117.59529,37.834741],[117.605003,37.838968],[117.606582,37.845209],[117.595685,37.853504],[117.581076,37.858993],[117.580602,37.875302],[117.568835,37.882409],[117.547198,37.883198],[117.542776,37.890146],[117.539302,37.913552],[117.529036,37.932295],[117.567809,37.946772],[117.570652,37.957264],[117.563545,37.998585],[117.54933,38.010252],[117.541039,38.011237],[117.545935,38.026842],[117.560386,38.040987],[117.556517,38.057215],[117.564887,38.063674],[117.57618,38.065132],[117.58376,38.070645],[117.605082,38.073008],[117.616769,38.06903],[117.644961,38.072377],[117.666045,38.072535],[117.679469,38.079544],[117.704502,38.07604],[117.729219,38.093796],[117.730641,38.108321],[117.743197,38.123393],[117.768782,38.131893],[117.772099,38.138817],[117.766966,38.158682],[117.771704,38.166076],[117.79421,38.167846],[117.801317,38.175239],[117.789235,38.180744],[117.796105,38.1936],[117.797842,38.207712],[117.805897,38.217734],[117.808582,38.228383],[117.823586,38.235652],[117.847513,38.25392],[117.860859,38.274578],[117.895683,38.301629],[117.893393,38.287968],[117.89671,38.279605],[117.935404,38.255098],[117.997631,38.211918],[118.018794,38.202641],[118.033009,38.205904],[118.04517,38.214001],[118.112134,38.210227],[118.177915,38.186406],[118.216846,38.146921],[118.245432,38.144286],[118.236272,38.125754],[118.227664,38.119262],[118.241247,38.112138],[118.245511,38.103322],[118.235324,38.082969],[118.226638,38.079583],[118.230665,38.056743],[118.227585,38.037874],[118.2234,38.00095],[118.22956,37.986444],[118.220873,37.98258],[118.223479,37.959788],[118.213529,37.95541],[118.215503,37.949376],[118.224742,37.950559],[118.226954,37.939672],[118.225611,37.923417],[118.232718,37.922509],[118.235403,37.905343],[118.243142,37.895673],[118.236588,37.884501],[118.239115,37.868708],[118.248749,37.858164],[118.247643,37.871788],[118.258146,37.854886],[118.258304,37.844182],[118.269754,37.853109],[118.286337,37.8569],[118.301657,37.870208],[118.313265,37.861521],[118.328111,37.865272],[118.340193,37.838059],[118.334271,37.832134],[118.346116,37.832371],[118.344932,37.824627],[118.356382,37.820834],[118.352355,37.814274],[118.36191,37.792063],[118.348406,37.790719],[118.340588,37.774391],[118.340667,37.763913],[118.353065,37.75814],[118.353697,37.750151],[118.341931,37.74667],[118.337509,37.729502],[118.31753,37.728395],[118.319425,37.712924],[118.316187,37.714151],[118.3045,37.690722],[118.305132,37.683122],[118.294076,37.678529],[118.293129,37.670096],[118.2846,37.662058],[118.260989,37.654614],[118.246459,37.658376],[118.239431,37.65596],[118.22569,37.663682],[118.207449,37.661583],[118.200657,37.667404],[118.195445,37.661742],[118.177125,37.657623],[118.172545,37.644079],[118.165596,37.644633],[118.163542,37.63069],[118.154935,37.628036],[118.157462,37.62035],[118.154935,37.605491],[118.146722,37.599943],[118.148696,37.594078],[118.134877,37.590035],[118.127612,37.578103],[118.131324,37.571285],[118.13922,37.571364],[118.134166,37.558478],[118.141431,37.556297],[118.173176,37.563593],[118.176098,37.557129],[118.173255,37.546858],[118.159831,37.539164],[118.156988,37.530358],[118.150987,37.530517],[118.142537,37.518933],[118.136772,37.516791],[118.139378,37.507427],[118.134245,37.507387],[118.135035,37.496752],[118.127849,37.491831],[118.128481,37.483694],[118.120426,37.480757],[118.112766,37.463528],[118.125322,37.45912],[118.118531,37.456182],[118.114898,37.439742],[118.136141,37.441688],[118.14996,37.438351],[118.163937,37.416742],[118.165596,37.4082],[118.160147,37.399618],[118.16141,37.389961],[118.144037,37.392822],[118.135509,37.384834],[118.141668,37.376487],[118.154935,37.377401],[118.156198,37.364322],[118.161015,37.362573],[118.202,37.382409],[118.216925,37.385191],[118.217951,37.371478],[118.222768,37.367861],[118.245353,37.367781],[118.245827,37.376646],[118.258541,37.37911],[118.262015,37.364283],[118.273624,37.360029],[118.286495,37.362772],[118.291865,37.358518],[118.287285,37.352434],[118.315398,37.352514],[118.31524,37.31477],[118.319741,37.305978],[118.326058,37.306535],[118.325584,37.296866],[118.342168,37.295075],[118.342168,37.287076],[118.355197,37.286997],[118.358277,37.280669],[118.368069,37.279594],[118.36262,37.273783],[118.372096,37.273703],[118.375729,37.258497],[118.368385,37.258576],[118.36033,37.244561],[118.350459,37.243765],[118.346669,37.233252],[118.3642,37.210189],[118.375966,37.206126],[118.376598,37.196962],[118.383389,37.190587],[118.387574,37.177834],[118.380467,37.175164],[118.377545,37.154157],[118.366569,37.146781],[118.361594,37.148495],[118.356224,37.139325],[118.347616,37.139803],[118.340667,37.131748],[118.346116,37.123931],[118.338219,37.123134],[118.349354,37.101753],[118.338298,37.10311],[118.338851,37.093894],[118.332928,37.081923],[118.338535,37.072265],[118.337588,37.053904],[118.324558,37.046279],[118.3259,37.035459],[118.310186,37.028231],[118.308212,37.019885],[118.28997,37.00946],[118.288785,36.999993],[118.271412,37.006744],[118.262568,37.00271],[118.250802,37.002949],[118.247327,36.98613],[118.235087,36.98557],[118.231376,36.974822],[118.222531,36.967109],[118.209739,36.963152],[118.195209,36.967348],[118.192918,36.977739],[118.160936,36.981934],[118.161331,36.988567],[118.15146,36.988527],[118.153198,37.000512],[118.138983,37.005985],[118.139299,37.014693],[118.134008,37.025955],[118.139299,37.033103],[118.139615,37.044363],[118.15146,37.047038],[118.150829,37.054743],[118.15762,37.057776],[118.156909,37.065281],[118.13622,37.06536],[118.136062,37.077773],[118.130455,37.091101],[118.115925,37.100636],[118.111187,37.094652],[118.086075,37.091899],[118.063016,37.082841],[118.056857,37.093654],[118.045959,37.098202],[118.045485,37.105982],[118.057252,37.106141],[118.068623,37.115875],[118.079679,37.120781],[118.065069,37.139564],[118.059858,37.151087],[118.062385,37.162528],[118.074467,37.170341],[118.071545,37.177675],[118.082995,37.185605],[118.077941,37.188953],[118.074072,37.204094],[118.064122,37.21007],[118.048012,37.205568],[118.046275,37.216324],[118.036799,37.220905],[118.022348,37.2221],[118.019584,37.210309],[118.010898,37.20756],[117.994393,37.212699],[117.984364,37.210349],[117.98089,37.218674],[117.973862,37.216483],[117.981048,37.238429],[117.996446,37.246273],[117.990761,37.248981],[117.990603,37.262358],[117.963833,37.271753],[117.947013,37.262159],[117.948829,37.26829],[117.941327,37.280549],[117.909266,37.265065],[117.888497,37.262319],[117.8776,37.273027],[117.850909,37.28246],[117.83859,37.282659],[117.818848,37.276012],[117.782128,37.248702],[117.773678,37.244959],[117.760333,37.244959],[117.729851,37.249101],[117.693447,37.257661],[117.675995,37.270121],[117.659491,37.274101],[117.644329,37.265862],[117.63043,37.247269],[117.627193,37.228074],[117.615348,37.212699],[117.598212,37.203058],[117.592052,37.169624],[117.586366,37.160216],[117.574284,37.151366],[117.551305,37.146781],[117.557464,37.124211],[117.574442,37.12106],[117.576969,37.114758],[117.567888,37.11029],[117.575074,37.089185],[117.590946,37.084996],[117.608477,37.090622],[117.619375,37.090103],[117.644645,37.083878],[117.673942,37.073143],[117.703002,37.068673],[117.726692,37.068753],[117.739801,37.064921],[117.761991,37.065839],[117.771783,37.069032],[117.800369,37.070789],[117.847355,37.065959],[117.840327,37.035539],[117.841827,37.026354],[117.865992,37.023719],[117.870493,37.013375],[117.866386,37.007024],[117.866623,36.993282],[117.870493,36.985451],[117.906581,36.981695],[117.911951,36.975141],[117.910292,36.962592],[117.913372,36.953679],[117.931772,36.941886],[117.936115,36.93489],[117.935404,36.915736],[117.94338,36.930012],[117.949145,36.918375],[117.96178,36.922494],[117.960674,36.910376],[117.950645,36.902137],[117.9403,36.901177],[117.940616,36.891616],[117.929719,36.890216],[117.9189,36.880094],[117.917005,36.86973],[117.891814,36.871811],[117.891103,36.864408],[117.875152,36.861246],[117.865597,36.866529],[117.856594,36.859926],[117.832825,36.859966],[117.828008,36.855883],[117.831877,36.836629],[117.822085,36.825139],[117.820901,36.801511],[117.814662,36.797306],[117.815531,36.788573],[117.824297,36.787933],[117.825639,36.775834],[117.840327,36.777516],[117.850672,36.764735],[117.852488,36.750708],[117.832983,36.744816],[117.834404,36.751871],[117.826429,36.763011],[117.820743,36.756359],[117.810161,36.734394],[117.795157,36.719761],[117.793025,36.707451],[117.78197,36.70304],[117.777942,36.695219],[117.754173,36.696944],[117.725666,36.695219],[117.718006,36.697826],[117.71848,36.704724],[117.739959,36.721004],[117.736642,36.729423],[117.747303,36.748584],[117.724165,36.755998],[117.695974,36.754115],[117.687603,36.763853],[117.677811,36.783245],[117.648119,36.805436],[117.608556,36.821815],[117.580523,36.85136],[117.577364,36.862847],[117.579891,36.878093],[117.585024,36.886815],[117.58376,36.894176],[117.56923,36.915736],[117.534248,36.931611],[117.539538,36.941486],[117.551305,36.93385],[117.553674,36.940727],[117.56465,36.945084],[117.56544,36.959954],[117.54933,36.96507],[117.555253,36.970785],[117.549094,36.979817],[117.536854,36.978498],[117.519875,36.957117],[117.509847,36.969267],[117.494527,36.972344],[117.476522,36.968348],[117.477628,36.961154],[117.458754,36.957676],[117.444461,36.958116],[117.432853,36.954878],[117.415322,36.964311],[117.40403,36.955038],[117.391632,36.952],[117.378286,36.956997],[117.365335,36.99496],[117.35349,37.003349],[117.328457,37.011218],[117.317323,37.020923],[117.315349,37.030547],[117.326088,37.036178],[117.33667,37.046838],[117.339434,37.056419],[117.336433,37.073941],[117.365256,37.069272],[117.391158,37.083479],[117.409241,37.089425],[117.442092,37.093574],[117.459781,37.109931],[117.455596,37.11767],[117.4507,37.143711],[117.4507,37.153957],[117.444066,37.156868],[117.442724,37.170859],[117.436091,37.184251],[117.417928,37.20003],[117.404977,37.21716],[117.402371,37.224808],[117.408768,37.239703],[117.429141,37.239783],[117.424403,37.243367],[117.431037,37.254396],[117.443908,37.250056],[117.438302,37.25786],[117.43688,37.27235],[117.432379,37.272032],[117.430168,37.285166],[117.417612,37.296587],[117.411611,37.308604],[117.409163,37.329488],[117.41319,37.342255],[117.415401,37.364203],[117.401029,37.379071],[117.368652,37.396399],[117.360202,37.405697],[117.368257,37.419563],[117.369758,37.436048],[117.353332,37.450901],[117.309189,37.447486],[117.295449,37.4538],[117.307768,37.46194],[117.304609,37.466069],[117.283998,37.471587],[117.285894,37.479328],[117.312585,37.487068],[117.317718,37.499371],[117.307215,37.507744],[117.286525,37.510046],[117.284393,37.522266],[117.275549,37.526193],[117.273417,37.532619]]],[[[118.40779,38.026212],[118.410001,38.053277],[118.419319,38.053119],[118.419951,38.025503],[118.40779,38.026212]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":371700,\"name\":\"菏泽市\",\"center\":[115.469381,35.246531],\"centroid\":[115.698013,35.152536],\"childrenNum\":9,\"level\":\"city\",\"parent\":{\"adcode\":370000},\"subFeatureIndex\":15,\"acroutes\":[100000,370000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.409745,34.852944],[116.40635,34.82014],[116.403191,34.756301],[116.371525,34.750136],[116.365681,34.742779],[116.36197,34.723705],[116.382896,34.716264],[116.39182,34.710343],[116.392688,34.703887],[116.385502,34.694716],[116.385186,34.686696],[116.378079,34.684146],[116.378237,34.66802],[116.364418,34.651851],[116.37421,34.639958],[116.356521,34.629504],[116.331014,34.624977],[116.325171,34.620572],[116.323591,34.607687],[116.318064,34.601017],[116.301086,34.607769],[116.286082,34.608799],[116.278659,34.602129],[116.277079,34.586029],[116.256627,34.580634],[116.249204,34.571614],[116.240754,34.552377],[116.23341,34.555137],[116.216906,34.575115],[116.199059,34.577463],[116.190136,34.570502],[116.156653,34.553737],[116.146861,34.553201],[116.134542,34.55971],[116.124829,34.572314],[116.11788,34.589776],[116.101297,34.605793],[116.082661,34.608305],[116.055101,34.595417],[116.03757,34.593029],[116.023908,34.601964],[116.010168,34.615838],[116.001561,34.619049],[115.991374,34.615344],[115.98474,34.607234],[115.98403,34.589282],[115.969973,34.582611],[115.946204,34.581622],[115.858313,34.569967],[115.849705,34.565601],[115.838097,34.567784],[115.838808,34.560575],[115.827436,34.558268],[115.802404,34.572479],[115.795928,34.578492],[115.762051,34.587717],[115.718224,34.591094],[115.711433,34.59867],[115.699114,34.598876],[115.697297,34.569019],[115.684426,34.555591],[115.669422,34.55695],[115.643599,34.567701],[115.639493,34.571532],[115.621883,34.574744],[115.610354,34.572067],[115.593771,34.573179],[115.576792,34.570667],[115.561157,34.572232],[115.55476,34.56906],[115.52112,34.578739],[115.494982,34.604723],[115.486295,34.616867],[115.479583,34.632673],[115.46142,34.637283],[115.458183,34.656171],[115.444758,34.674479],[115.447048,34.698623],[115.444916,34.710302],[115.433861,34.725103],[115.445548,34.752561],[115.436546,34.776805],[115.43465,34.790322],[115.426754,34.805396],[115.413882,34.80782],[115.416172,34.813323],[115.408512,34.82593],[115.393982,34.831801],[115.379215,34.828763],[115.356946,34.837303],[115.345969,34.846212],[115.329623,34.851466],[115.317146,34.859183],[115.302379,34.858813],[115.289586,34.851589],[115.274661,34.85475],[115.256104,34.845308],[115.243469,34.850152],[115.239363,34.874655],[115.240784,34.883847],[115.249234,34.894515],[115.252156,34.906576],[115.239363,34.911868],[115.204933,34.914247],[115.202722,34.925608],[115.211724,34.943364],[115.222148,34.945578],[115.219147,34.960624],[115.208249,34.958329],[115.201616,34.95099],[115.175004,34.962469],[115.15692,34.958001],[115.157236,34.966978],[115.146576,34.980135],[115.131177,34.983578],[115.132993,34.999683],[115.128097,35.004354],[115.106144,35.000789],[115.074952,35.000379],[115.051656,34.985996],[115.0376,34.981611],[115.028835,34.971815],[115.016042,34.977348],[115.008066,34.988496],[114.970319,34.990504],[114.946787,34.988701],[114.934784,34.980709],[114.923807,34.968741],[114.913936,34.977881],[114.907935,34.989356],[114.889693,34.993987],[114.880296,35.003493],[114.884402,35.021929],[114.869951,35.024468],[114.859291,35.002674],[114.827072,35.01013],[114.846972,35.023444],[114.855263,35.036183],[114.85092,35.041917],[114.834021,35.042162],[114.819254,35.051786],[114.83181,35.074182],[114.861186,35.082983],[114.876269,35.091128],[114.882902,35.098781],[114.883613,35.109667],[114.872557,35.125992],[114.860633,35.137405],[114.841681,35.151189],[114.841049,35.159246],[114.850288,35.172617],[114.86166,35.182389],[114.876584,35.189012],[114.909356,35.19449],[114.928308,35.194776],[114.932494,35.198659],[114.92973,35.248225],[114.954605,35.255455],[114.957684,35.261132],[114.975531,35.261541],[114.975768,35.270281],[114.963607,35.273752],[114.987613,35.30221],[115.004749,35.317273],[115.014541,35.318089],[115.0177,35.340575],[115.02536,35.346328],[115.035152,35.368316],[115.043286,35.376963],[115.057737,35.378472],[115.075426,35.375168],[115.088613,35.39299],[115.084823,35.410074],[115.091614,35.416066],[115.105907,35.403958],[115.114831,35.404121],[115.117989,35.41839],[115.117831,35.400125],[115.126597,35.408728],[115.126439,35.418023],[115.136863,35.421529],[115.16766,35.426094],[115.189534,35.425116],[115.197905,35.420673],[115.209829,35.423118],[115.23731,35.423118],[115.257446,35.43559],[115.272608,35.448305],[115.270792,35.456821],[115.286665,35.464481],[115.307117,35.480001],[115.357973,35.498451],[115.357973,35.506555],[115.350313,35.529476],[115.35355,35.540548],[115.360499,35.543275],[115.345969,35.546979],[115.345101,35.553612],[115.357973,35.554711],[115.359236,35.565454],[115.369502,35.559757],[115.370765,35.571028],[115.383242,35.568912],[115.383716,35.57766],[115.389718,35.577334],[115.394456,35.586894],[115.411908,35.603571],[115.416251,35.623985],[115.439388,35.643458],[115.452418,35.660732],[115.461499,35.680847],[115.485979,35.710137],[115.511486,35.727153],[115.524121,35.726341],[115.533202,35.734137],[115.552786,35.73032],[115.562499,35.738644],[115.583031,35.730564],[115.588875,35.738522],[115.619514,35.739212],[115.643046,35.743841],[115.665079,35.751067],[115.693586,35.754071],[115.698245,35.768399],[115.696271,35.788892],[115.704404,35.788933],[115.706379,35.805608],[115.717434,35.802727],[115.720277,35.817087],[115.727937,35.815627],[115.734886,35.832945],[115.753128,35.832945],[115.752891,35.838379],[115.763709,35.838379],[115.773343,35.854192],[115.816776,35.844259],[115.821356,35.852652],[115.841335,35.850016],[115.840861,35.857192],[115.859971,35.857882],[115.865499,35.868624],[115.872606,35.872799],[115.871422,35.858327],[115.876002,35.867124],[115.875212,35.835095],[115.877107,35.820657],[115.883583,35.808163],[115.898192,35.805202],[115.911932,35.811733],[115.925988,35.804756],[115.922119,35.799157],[115.945493,35.791976],[115.970289,35.782156],[116.017591,35.756263],[116.026909,35.749687],[116.041518,35.733893],[116.071052,35.719072],[116.079897,35.712452],[116.089847,35.699373],[116.103034,35.687348],[116.121829,35.67459],[116.127514,35.649433],[116.134384,35.638539],[116.115906,35.618414],[116.116222,35.606621],[116.125145,35.59385],[116.125145,35.587871],[116.114327,35.577456],[116.115274,35.566471],[116.123408,35.540589],[116.12554,35.516042],[116.121276,35.497881],[116.128778,35.489614],[116.129567,35.475235],[116.15002,35.469573],[116.160918,35.471569],[116.15689,35.446838],[116.167946,35.452217],[116.178685,35.450342],[116.177817,35.466151],[116.188319,35.477313],[116.188319,35.467781],[116.19669,35.46334],[116.206798,35.465703],[116.20206,35.458247],[116.204429,35.436079],[116.215484,35.435957],[116.215958,35.419857],[116.212642,35.409054],[116.215879,35.393438],[116.223855,35.371702],[116.22117,35.358608],[116.215169,35.350734],[116.201744,35.345185],[116.193452,35.337555],[116.199612,35.304986],[116.215642,35.29131],[116.223539,35.260438],[116.237201,35.261745],[116.265866,35.271547],[116.269656,35.269872],[116.285608,35.242669],[116.284265,35.22506],[116.269104,35.191178],[116.248256,35.195634],[116.234437,35.208264],[116.234516,35.200008],[116.228356,35.194367],[116.213115,35.196697],[116.221881,35.181817],[116.223618,35.173231],[116.214537,35.155606],[116.204903,35.145668],[116.181765,35.11204],[116.154284,35.113513],[116.141018,35.09076],[116.15389,35.088467],[116.140228,35.06018],[116.141413,35.055062],[116.119381,35.053383],[116.114564,35.039828],[116.115748,35.025574],[116.139754,34.995421],[116.170789,34.974684],[116.171499,34.964683],[116.162023,34.957632],[116.155153,34.947259],[116.162181,34.94361],[116.192505,34.939182],[116.201586,34.919702],[116.213826,34.913098],[116.226935,34.911786],[116.266261,34.89751],[116.286713,34.88159],[116.299032,34.877733],[116.325803,34.874943],[116.339543,34.867022],[116.373815,34.86538],[116.409745,34.852944]]]]}}]}', 'admin', '2020-12-07 19:27:59', NULL, '2020-12-07 19:27:59', '0', NULL); +INSERT INTO `jimu_report_map` VALUES ('1335896227857940481', '杭州', 'hangzhou', '{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"adcode\":330102,\"name\":\"上城区\",\"center\":[120.171465,30.250236],\"centroid\":[120.173932,30.226977],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":0,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.188063,30.257783],[120.187445,30.250124],[120.186613,30.246239],[120.19132,30.245676],[120.197999,30.242341],[120.19983,30.240158],[120.213307,30.230548],[120.196573,30.216571],[120.182858,30.207933],[120.177628,30.205626],[120.140166,30.19284],[120.138169,30.19512],[120.1371,30.1981],[120.137551,30.201012],[120.141545,30.204061],[120.141069,30.206464],[120.138431,30.207947],[120.139405,30.210474],[120.145253,30.209581],[120.147368,30.210268],[120.150173,30.212849],[120.160347,30.227486],[120.15923,30.231578],[120.154381,30.23442],[120.154666,30.241119],[120.160442,30.246843],[120.15797,30.24672],[120.159848,30.249493],[120.16251,30.251565],[120.15923,30.256397],[120.156948,30.258058],[120.164079,30.25836],[120.171804,30.258003],[120.188063,30.257783]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330103,\"name\":\"下城区\",\"center\":[120.172763,30.276271],\"centroid\":[120.180095,30.303745],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":1,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.199853,30.35099],[120.201042,30.348124],[120.20437,30.345738],[120.212285,30.34534],[120.212095,30.334149],[120.211168,30.332119],[120.205939,30.332202],[120.203157,30.329733],[120.202349,30.326236],[120.204417,30.325961],[120.202421,30.322176],[120.197833,30.322244],[120.196906,30.320118],[120.204322,30.320488],[120.207198,30.320118],[120.200186,30.312148],[120.197952,30.314329],[120.194838,30.312093],[120.190607,30.312642],[120.18987,30.308856],[120.188301,30.30876],[120.188253,30.304507],[120.193007,30.30474],[120.190892,30.300295],[120.186494,30.29714],[120.183975,30.285367],[120.184926,30.28121],[120.18899,30.274321],[120.188182,30.270849],[120.188658,30.267294],[120.188063,30.257783],[120.171804,30.258003],[120.164079,30.25836],[120.156948,30.258058],[120.156472,30.260295],[120.158469,30.259142],[120.154666,30.272688],[120.161892,30.273305],[120.160822,30.279096],[120.159681,30.280524],[120.154547,30.282637],[120.153073,30.284983],[120.154024,30.289895],[120.165553,30.293463],[120.166266,30.294807],[120.164816,30.30009],[120.157162,30.308197],[120.156972,30.309213],[120.169522,30.325399],[120.174348,30.331146],[120.17827,30.336604],[120.187041,30.347561],[120.195789,30.348892],[120.199853,30.35099]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330104,\"name\":\"江干区\",\"center\":[120.202633,30.266603],\"centroid\":[120.296023,30.310268],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":2,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.188063,30.257783],[120.188658,30.267294],[120.188182,30.270849],[120.18899,30.274321],[120.184926,30.28121],[120.183975,30.285367],[120.186494,30.29714],[120.190892,30.300295],[120.193007,30.30474],[120.188253,30.304507],[120.188301,30.30876],[120.18987,30.308856],[120.190607,30.312642],[120.194838,30.312093],[120.197952,30.314329],[120.200186,30.312148],[120.207198,30.320118],[120.204322,30.320488],[120.196906,30.320118],[120.197833,30.322244],[120.202421,30.322176],[120.204417,30.325961],[120.202349,30.326236],[120.203157,30.329733],[120.205939,30.332202],[120.211168,30.332119],[120.212095,30.334149],[120.212285,30.34534],[120.20437,30.345738],[120.201042,30.348124],[120.199853,30.35099],[120.204251,30.352662],[120.210407,30.357736],[120.211739,30.359971],[120.213093,30.36503],[120.211881,30.369198],[120.208957,30.374243],[120.208815,30.376478],[120.210502,30.37911],[120.221294,30.387156],[120.228592,30.393544],[120.232395,30.392529],[120.237577,30.390062],[120.240334,30.387622],[120.23791,30.380028],[120.23482,30.376683],[120.239978,30.372146],[120.2468,30.363947],[120.247109,30.362343],[120.244233,30.359902],[120.243567,30.358188],[120.243947,30.354116],[120.242236,30.348261],[120.239883,30.344997],[120.234772,30.340691],[120.236056,30.339786],[120.243543,30.344174],[120.246015,30.342871],[120.248012,30.338853],[120.252552,30.337043],[120.261466,30.337523],[120.260872,30.335452],[120.258471,30.334355],[120.264437,30.326578],[120.268051,30.328663],[120.266553,30.331338],[120.277868,30.337948],[120.279318,30.336686],[120.281885,30.328499],[120.276251,30.3233],[120.272591,30.320516],[120.275562,30.319857],[120.291964,30.317814],[120.291631,30.315331],[120.295767,30.314851],[120.299475,30.315605],[120.300212,30.32127],[120.300117,30.324987],[120.29358,30.325001],[120.296623,30.33596],[120.299618,30.341816],[120.301567,30.343927],[120.300759,30.347575],[120.307224,30.350619],[120.310766,30.350839],[120.316281,30.352539],[120.325717,30.353389],[120.328261,30.358655],[120.335986,30.361068],[120.341192,30.36588],[120.34433,30.368087],[120.347206,30.36928],[120.350629,30.372173],[120.355953,30.374065],[120.362847,30.374682],[120.371143,30.377286],[120.379486,30.380714],[120.383194,30.381235],[120.398312,30.384799],[120.400095,30.384264],[120.400903,30.377026],[120.399596,30.37327],[120.396197,30.370624],[120.388543,30.370117],[120.380817,30.356378],[120.38241,30.355761],[120.378084,30.344929],[120.384169,30.340005],[120.383955,30.339155],[120.395198,30.332215],[120.40309,30.325248],[120.406584,30.324878],[120.413739,30.318307],[120.408866,30.305413],[120.403423,30.293188],[120.396149,30.281141],[120.389779,30.272756],[120.37642,30.259773],[120.369027,30.254763],[120.364154,30.252801],[120.355098,30.250522],[120.350676,30.25011],[120.340859,30.252595],[120.336058,30.255697],[120.324149,30.267239],[120.320535,30.270218],[120.317731,30.27395],[120.311004,30.280359],[120.3043,30.28604],[120.298952,30.287878],[120.288136,30.288235],[120.278961,30.286822],[120.270594,30.284722],[120.269786,30.284105],[120.252838,30.276091],[120.248036,30.272468],[120.241665,30.26514],[120.221057,30.23766],[120.213307,30.230548],[120.19983,30.240158],[120.197999,30.242341],[120.19132,30.245676],[120.186613,30.246239],[120.187445,30.250124],[120.188063,30.257783]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330105,\"name\":\"拱墅区\",\"center\":[120.150053,30.314697],\"centroid\":[120.152502,30.339314],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":3,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.085779,30.331187],[120.090011,30.334931],[120.091746,30.333395],[120.096405,30.335685],[120.099019,30.338305],[120.097641,30.340581],[120.103702,30.3415],[120.106127,30.343283],[120.1081,30.342803],[120.108409,30.339978],[120.111737,30.33969],[120.114137,30.337262],[120.121387,30.337948],[120.123265,30.339224],[120.123764,30.33644],[120.124953,30.339498],[120.129446,30.342515],[120.129446,30.341144],[120.136957,30.343379],[120.133843,30.354568],[120.131537,30.357708],[120.130182,30.362754],[120.129279,30.371666],[120.129208,30.38203],[120.130943,30.383222],[120.1342,30.380947],[120.139073,30.380316],[120.138526,30.378095],[120.140736,30.376176],[120.146132,30.375683],[120.146204,30.377835],[120.149175,30.38033],[120.152741,30.380686],[120.153002,30.375861],[120.159254,30.375559],[120.159016,30.372543],[120.167882,30.371035],[120.170782,30.372475],[120.171044,30.37401],[120.168595,30.3746],[120.171828,30.37582],[120.173444,30.374942],[120.174348,30.371954],[120.177699,30.376807],[120.183832,30.381618],[120.186162,30.38802],[120.192485,30.396148],[120.19838,30.394174],[120.209908,30.392557],[120.212998,30.39109],[120.216778,30.387896],[120.221294,30.387156],[120.210502,30.37911],[120.208815,30.376478],[120.208957,30.374243],[120.211881,30.369198],[120.213093,30.36503],[120.211739,30.359971],[120.210407,30.357736],[120.204251,30.352662],[120.199853,30.35099],[120.195789,30.348892],[120.187041,30.347561],[120.17827,30.336604],[120.174348,30.331146],[120.169522,30.325399],[120.156972,30.309213],[120.157162,30.308197],[120.164816,30.30009],[120.166266,30.294807],[120.165553,30.293463],[120.154024,30.289895],[120.153073,30.284983],[120.154547,30.282637],[120.159681,30.280524],[120.160822,30.279096],[120.161892,30.273305],[120.154666,30.272688],[120.154024,30.27535],[120.150934,30.278506],[120.149294,30.28206],[120.146132,30.286589],[120.144112,30.291144],[120.141188,30.293902],[120.135198,30.292626],[120.132512,30.292791],[120.128709,30.294286],[120.118012,30.29264],[120.109241,30.291995],[120.104677,30.292461],[120.102205,30.298292],[120.102823,30.304672],[120.102038,30.312697],[120.095597,30.325481],[120.092007,30.326071],[120.088489,30.330529],[120.085779,30.331187]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330106,\"name\":\"西湖区\",\"center\":[120.147376,30.272934],\"centroid\":[120.083604,30.200677],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":4,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.140166,30.19284],[120.134128,30.190588],[120.129659,30.186852],[120.126664,30.182827],[120.12462,30.177346],[120.124596,30.167263],[120.125999,30.15946],[120.130373,30.151161],[120.138597,30.142078],[120.146132,30.137172],[120.160014,30.12637],[120.16831,30.121793],[120.177723,30.11712],[120.181835,30.111457],[120.182953,30.10846],[120.182168,30.104818],[120.177295,30.102604],[120.170354,30.101546],[120.162011,30.097985],[120.150459,30.091455],[120.146869,30.088664],[120.134818,30.097669],[120.130349,30.099305],[120.124739,30.092953],[120.123812,30.089461],[120.118131,30.083796],[120.115088,30.082229],[120.108955,30.08062],[120.09795,30.079603],[120.091579,30.078475],[120.084615,30.078269],[120.076747,30.080868],[120.067928,30.086794],[120.061748,30.091853],[120.059513,30.092788],[120.054902,30.09272],[120.052953,30.091661],[120.049125,30.086849],[120.044894,30.086368],[120.043635,30.092156],[120.041258,30.093091],[120.036361,30.092555],[120.030846,30.094768],[120.030442,30.098837],[120.025213,30.105519],[120.02324,30.10633],[120.019151,30.10567],[120.016465,30.108323],[120.017725,30.113189],[120.016417,30.115718],[120.01095,30.116254],[120.001822,30.114357],[120.000468,30.116034],[120.001941,30.119567],[120.003819,30.12659],[120.007004,30.130026],[120.008787,30.134204],[120.008858,30.136719],[120.011663,30.142779],[120.016417,30.148935],[120.017178,30.153167],[120.014825,30.15891],[120.018438,30.162963],[120.018913,30.165202],[120.017772,30.168417],[120.014397,30.173816],[120.016156,30.177072],[120.013494,30.181042],[120.011449,30.181852],[120.005459,30.182346],[119.998994,30.182305],[119.996332,30.181536],[120.0013,30.188006],[120.003439,30.191865],[120.009096,30.195615],[120.009263,30.200202],[120.006529,30.205379],[120.007171,30.208757],[120.013351,30.210254],[120.017487,30.211792],[120.018034,30.214319],[120.015704,30.213426],[120.009999,30.215637],[120.007123,30.2208],[120.010356,30.221184],[120.013755,30.2162],[120.015443,30.218067],[120.018367,30.216447],[120.020268,30.217985],[120.01889,30.219742],[120.016845,30.224823],[120.025046,30.228461],[120.030894,30.230479],[120.032153,30.229697],[120.038571,30.233019],[120.040639,30.232841],[120.041162,30.236122],[120.044538,30.238058],[120.0443,30.240474],[120.046178,30.242725],[120.052216,30.243494],[120.052691,30.245333],[120.055234,30.245388],[120.055306,30.251483],[120.058515,30.252801],[120.05773,30.257289],[120.057255,30.268351],[120.056494,30.273374],[120.052382,30.273237],[120.049815,30.274266],[120.049815,30.27594],[120.05281,30.282897],[120.056732,30.2884],[120.052263,30.289319],[120.051621,30.29054],[120.052953,30.293847],[120.054807,30.295246],[120.053784,30.298772],[120.051907,30.299513],[120.048008,30.30319],[120.042089,30.304096],[120.030799,30.299843],[120.028493,30.303835],[120.026116,30.305948],[120.026686,30.310996],[120.02179,30.311874],[120.020554,30.315674],[120.023881,30.316195],[120.023406,30.319967],[120.023572,30.326743],[120.021362,30.329088],[120.01782,30.329733],[120.01763,30.33238],[120.026425,30.333272],[120.027185,30.335905],[120.025545,30.342474],[120.025973,30.34523],[120.023881,30.348357],[120.029444,30.350016],[120.032795,30.351634],[120.038595,30.350948],[120.046511,30.35221],[120.046463,30.353759],[120.048674,30.353526],[120.050195,30.349865],[120.053951,30.351401],[120.060607,30.351497],[120.060868,30.353348],[120.063673,30.352128],[120.065361,30.352813],[120.06517,30.355309],[120.067334,30.355446],[120.069449,30.350702],[120.074655,30.34774],[120.0762,30.345285],[120.079742,30.341816],[120.081881,30.33563],[120.085779,30.331187],[120.088489,30.330529],[120.092007,30.326071],[120.095597,30.325481],[120.102038,30.312697],[120.102823,30.304672],[120.102205,30.298292],[120.104677,30.292461],[120.109241,30.291995],[120.118012,30.29264],[120.128709,30.294286],[120.132512,30.292791],[120.135198,30.292626],[120.141188,30.293902],[120.144112,30.291144],[120.146132,30.286589],[120.149294,30.28206],[120.150934,30.278506],[120.154024,30.27535],[120.154666,30.272688],[120.158469,30.259142],[120.156472,30.260295],[120.156948,30.258058],[120.15923,30.256397],[120.16251,30.251565],[120.159848,30.249493],[120.15797,30.24672],[120.160442,30.246843],[120.154666,30.241119],[120.154381,30.23442],[120.15923,30.231578],[120.160347,30.227486],[120.150173,30.212849],[120.147368,30.210268],[120.145253,30.209581],[120.139405,30.210474],[120.138431,30.207947],[120.141069,30.206464],[120.141545,30.204061],[120.137551,30.201012],[120.1371,30.1981],[120.138169,30.19512],[120.140166,30.19284]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330108,\"name\":\"滨江区\",\"center\":[120.21062,30.206615],\"centroid\":[120.185259,30.180456],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":5,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.221057,30.23766],[120.223957,30.2363],[120.226524,30.232896],[120.231896,30.230177],[120.234439,30.229793],[120.235224,30.228132],[120.234962,30.21366],[120.234463,30.21355],[120.234202,30.188788],[120.233488,30.182044],[120.224575,30.181879],[120.224646,30.179173],[120.222055,30.178885],[120.222293,30.173637],[120.224384,30.171247],[120.220557,30.170519],[120.219963,30.16703],[120.217943,30.164749],[120.216849,30.161314],[120.220534,30.162578],[120.224979,30.162716],[120.226167,30.16016],[120.223148,30.156684],[120.224598,30.153868],[120.221651,30.153758],[120.219892,30.150515],[120.216944,30.143081],[120.219464,30.139948],[120.214543,30.136911],[120.213307,30.137887],[120.211572,30.136375],[120.208743,30.137131],[120.208054,30.139302],[120.205273,30.143026],[120.204084,30.141061],[120.201375,30.139563],[120.197167,30.140759],[120.19189,30.147121],[120.186185,30.144428],[120.186661,30.146599],[120.184141,30.145362],[120.181717,30.147245],[120.180338,30.149814],[120.178864,30.149416],[120.175203,30.153881],[120.170473,30.15112],[120.168286,30.148646],[120.164816,30.150062],[120.16232,30.147382],[120.159087,30.148894],[120.154737,30.145953],[120.155902,30.144332],[120.152764,30.142751],[120.146132,30.137172],[120.138597,30.142078],[120.130373,30.151161],[120.125999,30.15946],[120.124596,30.167263],[120.12462,30.177346],[120.126664,30.182827],[120.129659,30.186852],[120.134128,30.190588],[120.140166,30.19284],[120.177628,30.205626],[120.182858,30.207933],[120.196573,30.216571],[120.213307,30.230548],[120.221057,30.23766]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330109,\"name\":\"萧山区\",\"center\":[120.27069,30.162932],\"centroid\":[120.388786,30.16844],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":6,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.146132,30.137172],[120.152764,30.142751],[120.155902,30.144332],[120.154737,30.145953],[120.159087,30.148894],[120.16232,30.147382],[120.164816,30.150062],[120.168286,30.148646],[120.170473,30.15112],[120.175203,30.153881],[120.178864,30.149416],[120.180338,30.149814],[120.181717,30.147245],[120.184141,30.145362],[120.186661,30.146599],[120.186185,30.144428],[120.19189,30.147121],[120.197167,30.140759],[120.201375,30.139563],[120.204084,30.141061],[120.205273,30.143026],[120.208054,30.139302],[120.208743,30.137131],[120.211572,30.136375],[120.213307,30.137887],[120.214543,30.136911],[120.219464,30.139948],[120.216944,30.143081],[120.219892,30.150515],[120.221651,30.153758],[120.224598,30.153868],[120.223148,30.156684],[120.226167,30.16016],[120.224979,30.162716],[120.220534,30.162578],[120.216849,30.161314],[120.217943,30.164749],[120.219963,30.16703],[120.220557,30.170519],[120.224384,30.171247],[120.222293,30.173637],[120.222055,30.178885],[120.224646,30.179173],[120.224575,30.181879],[120.233488,30.182044],[120.234202,30.188788],[120.234463,30.21355],[120.234962,30.21366],[120.235224,30.228132],[120.234439,30.229793],[120.231896,30.230177],[120.226524,30.232896],[120.223957,30.2363],[120.221057,30.23766],[120.241665,30.26514],[120.248036,30.272468],[120.252838,30.276091],[120.269786,30.284105],[120.270594,30.284722],[120.278961,30.286822],[120.288136,30.288235],[120.298952,30.287878],[120.3043,30.28604],[120.311004,30.280359],[120.317731,30.27395],[120.320535,30.270218],[120.324149,30.267239],[120.336058,30.255697],[120.340859,30.252595],[120.350676,30.25011],[120.355098,30.250522],[120.364154,30.252801],[120.369027,30.254763],[120.37642,30.259773],[120.389779,30.272756],[120.396149,30.281141],[120.403423,30.293188],[120.408866,30.305413],[120.413739,30.318307],[120.418945,30.326441],[120.419159,30.331077],[120.421108,30.334643],[120.433492,30.36141],[120.438436,30.37268],[120.443262,30.376903],[120.450227,30.380042],[120.460234,30.382688],[120.47616,30.385457],[120.497791,30.388924],[120.510152,30.389144],[120.567866,30.387869],[120.589188,30.388527],[120.619543,30.389007],[120.6339,30.389459],[120.642719,30.388582],[120.659002,30.385594],[120.662686,30.384661],[120.684935,30.379973],[120.69354,30.377835],[120.698199,30.375038],[120.702478,30.369431],[120.70388,30.365853],[120.704546,30.344462],[120.704142,30.330803],[120.705045,30.315605],[120.706043,30.30946],[120.710845,30.297538],[120.71403,30.293353],[120.71926,30.28818],[120.721946,30.286314],[120.705663,30.271412],[120.700529,30.267761],[120.693944,30.262052],[120.679088,30.244249],[120.669033,30.233129],[120.646831,30.21955],[120.642695,30.217257],[120.641911,30.214758],[120.624606,30.187868],[120.612768,30.166288],[120.609179,30.152851],[120.608181,30.15182],[120.601953,30.150735],[120.593491,30.146764],[120.590852,30.146283],[120.585932,30.147272],[120.583864,30.150405],[120.568342,30.151312],[120.563421,30.147946],[120.559808,30.148179],[120.558144,30.151463],[120.550918,30.15564],[120.540411,30.156547],[120.533779,30.157454],[120.529382,30.157522],[120.524889,30.155695],[120.518495,30.155393],[120.51058,30.157536],[120.506158,30.159776],[120.50245,30.165917],[120.4981,30.169187],[120.494891,30.170148],[120.484076,30.172209],[120.483719,30.170423],[120.480867,30.170134],[120.479203,30.168664],[120.47509,30.169818],[120.466153,30.169557],[120.463728,30.162207],[120.465012,30.155489],[120.464394,30.154115],[120.461042,30.153991],[120.459545,30.151546],[120.451177,30.150982],[120.45006,30.145665],[120.447636,30.143576],[120.446923,30.135454],[120.438484,30.133792],[120.429594,30.132445],[120.424008,30.133187],[120.422891,30.13588],[120.424127,30.1408],[120.426076,30.144277],[120.422201,30.146846],[120.423152,30.151065],[120.42194,30.151037],[120.421678,30.148193],[120.419396,30.152851],[120.417923,30.148509],[120.414476,30.148042],[120.414214,30.149114],[120.410887,30.149526],[120.41072,30.146118],[120.411362,30.132623],[120.40927,30.12938],[120.404944,30.129476],[120.405562,30.1361],[120.404231,30.137296],[120.399001,30.136348],[120.397433,30.137832],[120.397813,30.143191],[120.392631,30.146091],[120.390492,30.149347],[120.387806,30.156176],[120.384763,30.157303],[120.381958,30.155352],[120.379201,30.154981],[120.373163,30.155503],[120.36646,30.153881],[120.361872,30.152068],[120.358758,30.147836],[120.355074,30.151133],[120.352031,30.150694],[120.352055,30.146736],[120.353957,30.144222],[120.35341,30.142188],[120.339623,30.142119],[120.339124,30.138464],[120.334299,30.134616],[120.331351,30.129298],[120.327999,30.125202],[120.326217,30.1249],[120.323198,30.126755],[120.318016,30.125999],[120.316542,30.132376],[120.314688,30.136471],[120.31224,30.13742],[120.303397,30.133008],[120.298904,30.129545],[120.29831,30.126549],[120.303754,30.126686],[120.300307,30.118357],[120.295624,30.115457],[120.293651,30.111911],[120.286853,30.10677],[120.28885,30.101161],[120.294483,30.098274],[120.299285,30.097366],[120.304681,30.09969],[120.309482,30.106013],[120.313333,30.107072],[120.31823,30.102893],[120.325408,30.097793],[120.33128,30.09705],[120.333704,30.095483],[120.335677,30.090877],[120.335796,30.081363],[120.333776,30.074845],[120.337579,30.071998],[120.338601,30.070211],[120.337508,30.059333],[120.33437,30.056912],[120.332088,30.053487],[120.327096,30.05108],[120.324957,30.048632],[120.325551,30.044946],[120.33185,30.037903],[120.335582,30.036885],[120.340479,30.0376],[120.343617,30.034918],[120.346279,30.023609],[120.344805,30.021381],[120.345827,30.019716],[120.351271,30.017886],[120.353291,30.016317],[120.356904,30.011694],[120.357284,30.004718],[120.358164,30.00286],[120.362847,29.997741],[120.36085,29.99214],[120.36047,29.988589],[120.362657,29.985506],[120.362276,29.982726],[120.364297,29.978528],[120.362276,29.97433],[120.357213,29.973449],[120.346469,29.973779],[120.342095,29.963758],[120.342333,29.960412],[120.340526,29.956048],[120.333681,29.95189],[120.331517,29.949302],[120.326074,29.946231],[120.325194,29.938548],[120.321676,29.937033],[120.315258,29.928867],[120.313547,29.9276],[120.307058,29.929336],[120.299309,29.932544],[120.297122,29.932654],[120.291345,29.935684],[120.288968,29.932131],[120.287233,29.926815],[120.284167,29.922161],[120.282123,29.921059],[120.277844,29.920742],[120.274373,29.91953],[120.265269,29.924516],[120.264746,29.930961],[120.262298,29.934748],[120.260753,29.938865],[120.258899,29.941206],[120.255215,29.943643],[120.25279,29.941577],[120.250722,29.936703],[120.24573,29.935808],[120.241689,29.939044],[120.239788,29.939567],[120.232038,29.939732],[120.226524,29.940545],[120.224004,29.942073],[120.221009,29.942238],[120.214567,29.939484],[120.207246,29.93377],[120.20185,29.931856],[120.200424,29.92946],[120.204798,29.924061],[120.203157,29.921541],[120.197643,29.917354],[120.190155,29.906914],[120.187184,29.904724],[120.185092,29.904503],[120.180623,29.907368],[120.175822,29.90909],[120.176273,29.91358],[120.172993,29.916238],[120.166313,29.917271],[120.160276,29.909145],[120.159729,29.906211],[120.155046,29.906101],[120.151742,29.908084],[120.150031,29.905054],[120.14946,29.899324],[120.149888,29.895191],[120.148723,29.891637],[120.150268,29.887587],[120.148486,29.881277],[120.144754,29.874112],[120.141188,29.870199],[120.136719,29.866327],[120.133748,29.86284],[120.1313,29.858816],[120.122101,29.852876],[120.118369,29.852229],[120.11226,29.847171],[120.10993,29.845972],[120.104796,29.845531],[120.102466,29.846812],[120.102442,29.849445],[120.104059,29.8534],[120.099566,29.856694],[120.096666,29.862399],[120.088156,29.871232],[120.082095,29.876688],[120.078149,29.884115],[120.077222,29.88822],[120.078268,29.88975],[120.082523,29.891788],[120.084805,29.894585],[120.085827,29.897437],[120.085542,29.906859],[120.081097,29.912933],[120.084448,29.91734],[120.089606,29.916514],[120.092126,29.916955],[120.096975,29.920866],[120.098449,29.924309],[120.097546,29.931126],[120.101325,29.936896],[120.100826,29.938039],[120.091151,29.946851],[120.090676,29.949123],[120.096001,29.952703],[120.101801,29.958499],[120.102965,29.967282],[120.104962,29.973614],[120.104463,29.981377],[120.110239,29.983524],[120.114137,29.987667],[120.118535,29.988272],[120.120294,29.990791],[120.124858,29.993337],[120.126926,29.997768],[120.134105,30.01058],[120.135555,30.021271],[120.136981,30.024806],[120.137171,30.029278],[120.134532,30.043983],[120.131133,30.044327],[120.129873,30.045757],[120.126474,30.045936],[120.124478,30.04833],[120.12569,30.050241],[120.12897,30.052208],[120.130349,30.055509],[120.136386,30.058934],[120.136886,30.061547],[120.134081,30.064999],[120.1371,30.069674],[120.137718,30.072177],[120.135079,30.080689],[120.140808,30.083769],[120.146869,30.088664],[120.150459,30.091455],[120.162011,30.097985],[120.170354,30.101546],[120.177295,30.102604],[120.182168,30.104818],[120.182953,30.10846],[120.181835,30.111457],[120.177723,30.11712],[120.16831,30.121793],[120.160014,30.12637],[120.146132,30.137172]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330110,\"name\":\"余杭区\",\"center\":[120.301737,30.421187],\"centroid\":[119.990852,30.381676],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":7,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.221294,30.387156],[120.216778,30.387896],[120.212998,30.39109],[120.209908,30.392557],[120.19838,30.394174],[120.192485,30.396148],[120.186162,30.38802],[120.183832,30.381618],[120.177699,30.376807],[120.174348,30.371954],[120.173444,30.374942],[120.171828,30.37582],[120.168595,30.3746],[120.171044,30.37401],[120.170782,30.372475],[120.167882,30.371035],[120.159016,30.372543],[120.159254,30.375559],[120.153002,30.375861],[120.152741,30.380686],[120.149175,30.38033],[120.146204,30.377835],[120.146132,30.375683],[120.140736,30.376176],[120.138526,30.378095],[120.139073,30.380316],[120.1342,30.380947],[120.130943,30.383222],[120.129208,30.38203],[120.129279,30.371666],[120.130182,30.362754],[120.131537,30.357708],[120.133843,30.354568],[120.136957,30.343379],[120.129446,30.341144],[120.129446,30.342515],[120.124953,30.339498],[120.123764,30.33644],[120.123265,30.339224],[120.121387,30.337948],[120.114137,30.337262],[120.111737,30.33969],[120.108409,30.339978],[120.1081,30.342803],[120.106127,30.343283],[120.103702,30.3415],[120.097641,30.340581],[120.099019,30.338305],[120.096405,30.335685],[120.091746,30.333395],[120.090011,30.334931],[120.085779,30.331187],[120.081881,30.33563],[120.079742,30.341816],[120.0762,30.345285],[120.074655,30.34774],[120.069449,30.350702],[120.067334,30.355446],[120.06517,30.355309],[120.065361,30.352813],[120.063673,30.352128],[120.060868,30.353348],[120.060607,30.351497],[120.053951,30.351401],[120.050195,30.349865],[120.048674,30.353526],[120.046463,30.353759],[120.046511,30.35221],[120.038595,30.350948],[120.032795,30.351634],[120.029444,30.350016],[120.023881,30.348357],[120.025973,30.34523],[120.025545,30.342474],[120.027185,30.335905],[120.026425,30.333272],[120.01763,30.33238],[120.01782,30.329733],[120.021362,30.329088],[120.023572,30.326743],[120.023406,30.319967],[120.023881,30.316195],[120.020554,30.315674],[120.02179,30.311874],[120.026686,30.310996],[120.026116,30.305948],[120.028493,30.303835],[120.030799,30.299843],[120.042089,30.304096],[120.048008,30.30319],[120.051907,30.299513],[120.053784,30.298772],[120.054807,30.295246],[120.052953,30.293847],[120.051621,30.29054],[120.052263,30.289319],[120.056732,30.2884],[120.05281,30.282897],[120.049815,30.27594],[120.049815,30.274266],[120.052382,30.273237],[120.056494,30.273374],[120.057255,30.268351],[120.05773,30.257289],[120.058515,30.252801],[120.055306,30.251483],[120.055234,30.245388],[120.052691,30.245333],[120.052216,30.243494],[120.046178,30.242725],[120.0443,30.240474],[120.044538,30.238058],[120.041162,30.236122],[120.040639,30.232841],[120.038571,30.233019],[120.032153,30.229697],[120.030894,30.230479],[120.025046,30.228461],[120.016845,30.224823],[120.01889,30.219742],[120.020268,30.217985],[120.018367,30.216447],[120.015443,30.218067],[120.013755,30.2162],[120.010356,30.221184],[120.007123,30.2208],[120.009999,30.215637],[120.015704,30.213426],[120.018034,30.214319],[120.017487,30.211792],[120.013351,30.210254],[120.007171,30.208757],[120.006529,30.205379],[120.009263,30.200202],[120.009096,30.195615],[120.003439,30.191865],[120.0013,30.188006],[119.996332,30.181536],[119.987988,30.174901],[119.980168,30.17405],[119.974296,30.175107],[119.964669,30.172854],[119.963101,30.170464],[119.959274,30.168005],[119.955993,30.168733],[119.951168,30.168307],[119.945392,30.16501],[119.942016,30.160476],[119.938736,30.158704],[119.934338,30.160202],[119.933102,30.163952],[119.932841,30.169626],[119.935265,30.177896],[119.935028,30.178981],[119.929751,30.188129],[119.926613,30.189681],[119.92155,30.190904],[119.914514,30.191824],[119.909166,30.19089],[119.903936,30.187648],[119.901393,30.188843],[119.894975,30.193417],[119.887677,30.18975],[119.880499,30.187703],[119.871656,30.182662],[119.861981,30.180726],[119.85718,30.177951],[119.853472,30.174929],[119.850168,30.181357],[119.84905,30.188074],[119.845413,30.190437],[119.842656,30.191123],[119.839495,30.19387],[119.836095,30.197949],[119.836452,30.199378],[119.84161,30.20667],[119.843132,30.214442],[119.845057,30.217189],[119.844914,30.221047],[119.846412,30.222502],[119.849787,30.223093],[119.853876,30.225276],[119.856657,30.227843],[119.86298,30.237852],[119.86752,30.249795],[119.868304,30.252718],[119.864477,30.256232],[119.865,30.258922],[119.862837,30.260501],[119.863479,30.263218],[119.86569,30.265236],[119.86588,30.268392],[119.867282,30.26938],[119.864976,30.271068],[119.864715,30.273264],[119.859985,30.272825],[119.853686,30.273841],[119.846816,30.270245],[119.844225,30.272194],[119.839471,30.27148],[119.829083,30.268516],[119.828513,30.269216],[119.829273,30.278548],[119.827657,30.282074],[119.827871,30.283789],[119.830438,30.286328],[119.836761,30.289525],[119.837118,30.29382],[119.836286,30.29928],[119.833433,30.307127],[119.83108,30.307745],[119.826302,30.306743],[119.821001,30.304096],[119.808023,30.295342],[119.799893,30.297483],[119.799085,30.30175],[119.802365,30.307868],[119.803554,30.311462],[119.803839,30.316099],[119.80227,30.322614],[119.806549,30.325851],[119.807666,30.328992],[119.807262,30.334437],[119.804647,30.342392],[119.798895,30.344215],[119.795163,30.348988],[119.791764,30.356899],[119.788602,30.35971],[119.78033,30.365647],[119.774578,30.367471],[119.772771,30.3739],[119.771107,30.375998],[119.768825,30.376752],[119.757534,30.378561],[119.749904,30.381399],[119.749262,30.383757],[119.750237,30.385292],[119.753303,30.386553],[119.755585,30.388815],[119.749048,30.392543],[119.744722,30.393804],[119.742321,30.393338],[119.735571,30.395682],[119.726253,30.389624],[119.723258,30.388472],[119.718385,30.390199],[119.704027,30.399684],[119.696445,30.401918],[119.685011,30.406605],[119.681089,30.408729],[119.686033,30.417541],[119.693521,30.424488],[119.696397,30.42668],[119.707284,30.430023],[119.709209,30.434065],[119.707617,30.437422],[119.704764,30.440326],[119.704146,30.443203],[119.699749,30.448587],[119.694923,30.452738],[119.69528,30.4596],[119.694282,30.462942],[119.695375,30.464476],[119.699368,30.465339],[119.701722,30.467996],[119.702577,30.473255],[119.704408,30.476446],[119.708235,30.485156],[119.708877,30.487963],[119.704717,30.494563],[119.708568,30.498287],[119.709186,30.508829],[119.706785,30.515852],[119.706381,30.521423],[119.704883,30.525981],[119.700272,30.531142],[119.694995,30.542351],[119.692404,30.556145],[119.693735,30.558868],[119.701341,30.558307],[119.707118,30.561057],[119.711729,30.566516],[119.716911,30.564806],[119.721617,30.560934],[119.729058,30.551766],[119.743248,30.550165],[119.74843,30.550206],[119.752091,30.551232],[119.768944,30.551355],[119.770846,30.549658],[119.772034,30.546429],[119.770727,30.544048],[119.768588,30.537259],[119.767684,30.524722],[119.766876,30.520835],[119.761813,30.51885],[119.761837,30.517125],[119.766401,30.514072],[119.784062,30.511019],[119.790433,30.506899],[119.794188,30.505625],[119.798277,30.505927],[119.806905,30.507802],[119.815891,30.510663],[119.818363,30.510102],[119.823711,30.507145],[119.829582,30.502969],[119.832459,30.49878],[119.836024,30.496589],[119.841325,30.496384],[119.846032,30.498424],[119.847149,30.50197],[119.848765,30.503188],[119.851118,30.502025],[119.854113,30.493974],[119.860175,30.48621],[119.864763,30.482526],[119.867116,30.477775],[119.869612,30.47698],[119.874128,30.478281],[119.877812,30.477925],[119.880808,30.476213],[119.88038,30.474214],[119.874366,30.471174],[119.872821,30.467065],[119.872607,30.46249],[119.873676,30.460915],[119.877622,30.460038],[119.882115,30.460367],[119.888034,30.458313],[119.891005,30.456135],[119.894571,30.455327],[119.897613,30.456011],[119.90106,30.458874],[119.903033,30.459408],[119.907407,30.456696],[119.909308,30.456326],[119.91487,30.458984],[119.918816,30.4616],[119.92155,30.462531],[119.924925,30.462189],[119.929299,30.459367],[119.931415,30.456463],[119.93151,30.449299],[119.93498,30.446779],[119.939188,30.44619],[119.944179,30.447149],[119.95074,30.444231],[119.952333,30.441861],[119.952737,30.438751],[119.955874,30.433668],[119.959606,30.432339],[119.965026,30.431572],[119.970612,30.432914],[119.973369,30.437751],[119.982973,30.445286],[119.987109,30.446135],[119.990793,30.445272],[120.0037,30.444285],[120.005459,30.443505],[120.008407,30.438669],[120.011901,30.436011],[120.013827,30.4356],[120.027732,30.434832],[120.031108,30.435161],[120.041543,30.43338],[120.044134,30.431969],[120.046107,30.427434],[120.049815,30.427338],[120.057089,30.429242],[120.061938,30.429325],[120.064743,30.430092],[120.062342,30.435572],[120.065907,30.437353],[120.067952,30.441135],[120.068118,30.445943],[120.065075,30.449546],[120.062413,30.451587],[120.059252,30.459011],[120.06025,30.464956],[120.059489,30.473433],[120.060416,30.476145],[120.063839,30.479418],[120.06586,30.483581],[120.066454,30.489496],[120.068284,30.496603],[120.076081,30.495357],[120.08074,30.497151],[120.090034,30.495987],[120.093766,30.496589],[120.099233,30.495795],[120.099804,30.494125],[120.097047,30.489852],[120.096761,30.486758],[120.099542,30.483293],[120.107315,30.481226],[120.111237,30.476186],[120.115136,30.475871],[120.122623,30.479117],[120.129707,30.479897],[120.146013,30.482705],[120.147796,30.48087],[120.146655,30.474666],[120.147083,30.471283],[120.149817,30.467503],[120.160371,30.469914],[120.162463,30.473146],[120.165624,30.474159],[120.169784,30.473981],[120.172945,30.475022],[120.175061,30.47683],[120.173159,30.483266],[120.174419,30.484129],[120.178246,30.481499],[120.180219,30.481787],[120.180005,30.483964],[120.177699,30.486018],[120.177747,30.488606],[120.173801,30.49203],[120.177058,30.493782],[120.179149,30.491947],[120.1859,30.494631],[120.182287,30.496233],[120.182216,30.499629],[120.185092,30.502627],[120.194553,30.503668],[120.197001,30.505092],[120.195812,30.509459],[120.196573,30.512032],[120.200234,30.514921],[120.201755,30.514428],[120.2033,30.507816],[120.205416,30.505858],[120.208268,30.507939],[120.212523,30.509774],[120.220724,30.510253],[120.224598,30.50976],[120.233869,30.506392],[120.239288,30.505242],[120.251934,30.506543],[120.261228,30.505242],[120.2671,30.505817],[120.27744,30.504831],[120.282123,30.508692],[120.285831,30.507802],[120.286853,30.510992],[120.289277,30.513032],[120.296527,30.514798],[120.299808,30.517809],[120.299903,30.519822],[120.311598,30.520739],[120.314593,30.521861],[120.317707,30.521601],[120.319894,30.518494],[120.322295,30.509979],[120.322651,30.506488],[120.326145,30.500437],[120.325765,30.496945],[120.327667,30.491071],[120.327904,30.484197],[120.325789,30.480774],[120.326026,30.478596],[120.328332,30.473584],[120.329188,30.468421],[120.331327,30.468407],[120.335059,30.471352],[120.341382,30.472269],[120.340645,30.466038],[120.337246,30.464312],[120.336866,30.458121],[120.337864,30.451916],[120.339813,30.450149],[120.340978,30.441614],[120.339433,30.440011],[120.340336,30.433887],[120.335939,30.431243],[120.330757,30.427269],[120.332682,30.424666],[120.332967,30.417308],[120.324838,30.411963],[120.32151,30.407715],[120.322057,30.404741],[120.320512,30.40433],[120.31533,30.400657],[120.310481,30.400205],[120.306273,30.39745],[120.306677,30.395092],[120.308936,30.393338],[120.31571,30.394325],[120.318824,30.388801],[120.318372,30.38547],[120.319276,30.379329],[120.324386,30.378493],[120.332635,30.375271],[120.339409,30.373325],[120.342927,30.371611],[120.34433,30.368087],[120.341192,30.36588],[120.335986,30.361068],[120.328261,30.358655],[120.325717,30.353389],[120.316281,30.352539],[120.310766,30.350839],[120.307224,30.350619],[120.300759,30.347575],[120.301567,30.343927],[120.299618,30.341816],[120.296623,30.33596],[120.29358,30.325001],[120.300117,30.324987],[120.300212,30.32127],[120.299475,30.315605],[120.295767,30.314851],[120.291631,30.315331],[120.291964,30.317814],[120.275562,30.319857],[120.272591,30.320516],[120.276251,30.3233],[120.281885,30.328499],[120.279318,30.336686],[120.277868,30.337948],[120.266553,30.331338],[120.268051,30.328663],[120.264437,30.326578],[120.258471,30.334355],[120.260872,30.335452],[120.261466,30.337523],[120.252552,30.337043],[120.248012,30.338853],[120.246015,30.342871],[120.243543,30.344174],[120.236056,30.339786],[120.234772,30.340691],[120.239883,30.344997],[120.242236,30.348261],[120.243947,30.354116],[120.243567,30.358188],[120.244233,30.359902],[120.247109,30.362343],[120.2468,30.363947],[120.239978,30.372146],[120.23482,30.376683],[120.23791,30.380028],[120.240334,30.387622],[120.237577,30.390062],[120.232395,30.392529],[120.228592,30.393544],[120.221294,30.387156]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330111,\"name\":\"富阳区\",\"center\":[119.949869,30.049871],\"centroid\":[119.839625,29.995216],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":8,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.996332,30.181536],[119.998994,30.182305],[120.005459,30.182346],[120.011449,30.181852],[120.013494,30.181042],[120.016156,30.177072],[120.014397,30.173816],[120.017772,30.168417],[120.018913,30.165202],[120.018438,30.162963],[120.014825,30.15891],[120.017178,30.153167],[120.016417,30.148935],[120.011663,30.142779],[120.008858,30.136719],[120.008787,30.134204],[120.007004,30.130026],[120.003819,30.12659],[120.001941,30.119567],[120.000468,30.116034],[120.001822,30.114357],[120.01095,30.116254],[120.016417,30.115718],[120.017725,30.113189],[120.016465,30.108323],[120.019151,30.10567],[120.02324,30.10633],[120.025213,30.105519],[120.030442,30.098837],[120.030846,30.094768],[120.036361,30.092555],[120.041258,30.093091],[120.043635,30.092156],[120.044894,30.086368],[120.049125,30.086849],[120.052953,30.091661],[120.054902,30.09272],[120.059513,30.092788],[120.061748,30.091853],[120.067928,30.086794],[120.076747,30.080868],[120.084615,30.078269],[120.091579,30.078475],[120.09795,30.079603],[120.108955,30.08062],[120.115088,30.082229],[120.118131,30.083796],[120.123812,30.089461],[120.124739,30.092953],[120.130349,30.099305],[120.134818,30.097669],[120.146869,30.088664],[120.140808,30.083769],[120.135079,30.080689],[120.137718,30.072177],[120.1371,30.069674],[120.134081,30.064999],[120.136886,30.061547],[120.136386,30.058934],[120.130349,30.055509],[120.12897,30.052208],[120.12569,30.050241],[120.124478,30.04833],[120.126474,30.045936],[120.129873,30.045757],[120.131133,30.044327],[120.134532,30.043983],[120.137171,30.029278],[120.136981,30.024806],[120.135555,30.021271],[120.134105,30.01058],[120.126926,29.997768],[120.124858,29.993337],[120.120294,29.990791],[120.118535,29.988272],[120.114137,29.987667],[120.110239,29.983524],[120.104463,29.981377],[120.104962,29.973614],[120.102965,29.967282],[120.101801,29.958499],[120.096001,29.952703],[120.090676,29.949123],[120.091151,29.946851],[120.100826,29.938039],[120.101325,29.936896],[120.097546,29.931126],[120.098449,29.924309],[120.096975,29.920866],[120.092126,29.916955],[120.089606,29.916514],[120.084448,29.91734],[120.081097,29.912933],[120.085542,29.906859],[120.085827,29.897437],[120.084805,29.894585],[120.082523,29.891788],[120.078268,29.88975],[120.077222,29.88822],[120.078149,29.884115],[120.082095,29.876688],[120.088156,29.871232],[120.096666,29.862399],[120.099566,29.856694],[120.104059,29.8534],[120.102442,29.849445],[120.102466,29.846812],[120.104796,29.845531],[120.10993,29.845972],[120.102015,29.832905],[120.101111,29.830258],[120.102728,29.823972],[120.09871,29.819023],[120.095834,29.816596],[120.091888,29.816679],[120.085328,29.820967],[120.080384,29.826522],[120.077198,29.828149],[120.074275,29.827336],[120.065646,29.822042],[120.061961,29.821628],[120.054355,29.823559],[120.049553,29.823917],[120.038453,29.822828],[120.036076,29.816596],[120.03106,29.810254],[120.030038,29.806283],[120.032296,29.803898],[120.034649,29.799568],[120.036218,29.79346],[120.036622,29.78884],[120.035481,29.787213],[120.030062,29.782758],[120.029776,29.779324],[120.030038,29.770552],[120.02835,29.768938],[120.025522,29.769311],[120.021718,29.767049],[120.020292,29.764855],[120.015229,29.764235],[120.011497,29.761503],[120.011212,29.757324],[120.008977,29.75713],[120.003439,29.75513],[120.000087,29.754909],[119.991958,29.753157],[119.987845,29.754909],[119.986871,29.75673],[119.981214,29.757972],[119.979859,29.759641],[119.978718,29.76589],[119.977078,29.766469],[119.973132,29.765793],[119.968639,29.762897],[119.967165,29.759986],[119.962316,29.75571],[119.960272,29.755144],[119.94765,29.756179],[119.94456,29.755503],[119.93933,29.752675],[119.937024,29.750564],[119.933079,29.749046],[119.927184,29.744438],[119.924949,29.745252],[119.924331,29.748867],[119.923166,29.750357],[119.916416,29.752344],[119.913539,29.755861],[119.907692,29.754523],[119.904364,29.754606],[119.896448,29.761159],[119.892574,29.763117],[119.89053,29.763241],[119.883921,29.763421],[119.878003,29.764966],[119.872654,29.767255],[119.870301,29.769324],[119.866403,29.776552],[119.863313,29.778772],[119.860793,29.781862],[119.860222,29.786564],[119.865761,29.797404],[119.867021,29.801389],[119.868304,29.80245],[119.871822,29.801816],[119.875364,29.802423],[119.881568,29.80587],[119.884896,29.812088],[119.882971,29.819726],[119.882329,29.826729],[119.885371,29.830934],[119.886061,29.83489],[119.889103,29.838639],[119.888889,29.842622],[119.887059,29.845668],[119.885015,29.846137],[119.865642,29.837757],[119.859937,29.837591],[119.852568,29.841216],[119.843892,29.85103],[119.840659,29.855853],[119.836618,29.85945],[119.828537,29.864563],[119.827039,29.867277],[119.82528,29.874691],[119.821786,29.879458],[119.817792,29.880629],[119.813942,29.880229],[119.802841,29.876275],[119.794307,29.874677],[119.787295,29.875131],[119.777502,29.874222],[119.763952,29.871328],[119.756607,29.871949],[119.752186,29.870019],[119.744889,29.868393],[119.74042,29.868931],[119.736688,29.870901],[119.72718,29.8655],[119.712157,29.860291],[119.710731,29.860938],[119.705549,29.867897],[119.702863,29.870419],[119.699915,29.875421],[119.692261,29.880905],[119.685748,29.881993],[119.679045,29.885437],[119.675479,29.888702],[119.675384,29.893607],[119.676311,29.899035],[119.674243,29.905109],[119.675503,29.908842],[119.675146,29.912671],[119.676121,29.916665],[119.675432,29.920012],[119.673744,29.92205],[119.668087,29.92256],[119.66628,29.927876],[119.654228,29.930616],[119.643413,29.92789],[119.637874,29.925342],[119.635426,29.924943],[119.630957,29.926568],[119.626726,29.933054],[119.627677,29.938837],[119.626061,29.942968],[119.619619,29.946039],[119.617432,29.953831],[119.611632,29.95631],[119.611466,29.962587],[119.604192,29.962298],[119.60065,29.964955],[119.599081,29.970874],[119.596324,29.972141],[119.593115,29.972279],[119.587315,29.974068],[119.58218,29.973311],[119.575121,29.977179],[119.568322,29.98157],[119.565375,29.982492],[119.560526,29.981707],[119.557958,29.980427],[119.553395,29.976683],[119.547951,29.975293],[119.540392,29.980124],[119.539204,29.982547],[119.539441,29.985988],[119.541438,29.989649],[119.53937,29.993956],[119.542769,30.002874],[119.542508,30.006727],[119.535258,30.008736],[119.530932,30.012423],[119.52449,30.014831],[119.522541,30.0164],[119.514055,30.015464],[119.508873,30.011777],[119.507161,30.011447],[119.502407,30.017432],[119.500719,30.022454],[119.501385,30.025893],[119.504047,30.031974],[119.506805,30.036335],[119.509063,30.037958],[119.511369,30.041301],[119.510798,30.043845],[119.506424,30.051246],[119.50602,30.054863],[119.50892,30.06416],[119.508635,30.066457],[119.505212,30.070128],[119.502669,30.070967],[119.499816,30.073374],[119.494706,30.072947],[119.490902,30.073924],[119.485459,30.077403],[119.481679,30.079011],[119.47519,30.080043],[119.473217,30.079671],[119.467013,30.074034],[119.465634,30.074061],[119.463043,30.077306],[119.461118,30.083535],[119.459407,30.086945],[119.4576,30.088403],[119.454106,30.088801],[119.446975,30.086629],[119.440081,30.087193],[119.437229,30.089874],[119.436373,30.094411],[119.436944,30.097037],[119.440676,30.0998],[119.446523,30.10314],[119.454201,30.105725],[119.457077,30.107264],[119.459502,30.109794],[119.460785,30.112845],[119.461332,30.118343],[119.460738,30.120185],[119.458028,30.122426],[119.452466,30.123168],[119.447307,30.125655],[119.442577,30.13015],[119.441341,30.135784],[119.443766,30.139082],[119.445834,30.140072],[119.452062,30.139288],[119.455152,30.142215],[119.459502,30.143177],[119.463828,30.145527],[119.468368,30.143205],[119.479754,30.146805],[119.483676,30.141927],[119.486695,30.141982],[119.489785,30.144923],[119.492828,30.142628],[119.498651,30.141212],[119.499412,30.14337],[119.497819,30.146091],[119.503643,30.149086],[119.503429,30.156025],[119.505664,30.158567],[119.520449,30.158938],[119.526201,30.157412],[119.529434,30.158443],[119.530195,30.160147],[119.529315,30.166411],[119.535424,30.183967],[119.539774,30.185698],[119.546549,30.186275],[119.550518,30.189228],[119.556413,30.192346],[119.561595,30.194241],[119.571246,30.196947],[119.574907,30.19615],[119.577521,30.194557],[119.580231,30.191412],[119.582513,30.186852],[119.583226,30.182429],[119.580707,30.167332],[119.582109,30.1649],[119.586126,30.164103],[119.594589,30.159212],[119.605166,30.156698],[119.607948,30.153222],[119.610063,30.146544],[119.610301,30.138505],[119.611727,30.137461],[119.615673,30.137516],[119.61679,30.136238],[119.615934,30.132926],[119.616148,30.126961],[119.619191,30.123195],[119.623375,30.122055],[119.632954,30.122659],[119.64491,30.126961],[119.651733,30.130713],[119.655797,30.130081],[119.65991,30.123498],[119.662239,30.120927],[119.672246,30.116502],[119.673221,30.115581],[119.67498,30.110041],[119.67971,30.105106],[119.687578,30.099896],[119.691049,30.098356],[119.70039,30.09617],[119.701413,30.092087],[119.736165,30.084814],[119.73916,30.085625],[119.741228,30.089901],[119.744698,30.092073],[119.747432,30.091455],[119.751116,30.08733],[119.7553,30.085199],[119.76747,30.082133],[119.770822,30.082091],[119.777573,30.083054],[119.779237,30.08458],[119.780188,30.096363],[119.782113,30.099484],[119.783824,30.100034],[119.78827,30.098521],[119.790005,30.099346],[119.789791,30.105189],[119.791003,30.107361],[119.797136,30.110344],[119.80208,30.111691],[119.802532,30.117807],[119.804671,30.122302],[119.807809,30.124762],[119.81059,30.125807],[119.814512,30.130479],[119.821762,30.132582],[119.826136,30.133365],[119.828584,30.140608],[119.831199,30.14359],[119.829582,30.156464],[119.834455,30.160545],[119.840564,30.166453],[119.853472,30.174929],[119.85718,30.177951],[119.861981,30.180726],[119.871656,30.182662],[119.880499,30.187703],[119.887677,30.18975],[119.894975,30.193417],[119.901393,30.188843],[119.903936,30.187648],[119.909166,30.19089],[119.914514,30.191824],[119.92155,30.190904],[119.926613,30.189681],[119.929751,30.188129],[119.935028,30.178981],[119.935265,30.177896],[119.932841,30.169626],[119.933102,30.163952],[119.934338,30.160202],[119.938736,30.158704],[119.942016,30.160476],[119.945392,30.16501],[119.951168,30.168307],[119.955993,30.168733],[119.959274,30.168005],[119.963101,30.170464],[119.964669,30.172854],[119.974296,30.175107],[119.980168,30.17405],[119.987988,30.174901],[119.996332,30.181536]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330112,\"name\":\"临安区\",\"center\":[119.715101,30.231153],\"centroid\":[119.343878,30.201776],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":9,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.236369,29.950968],[119.235537,29.955332],[119.233184,29.957618],[119.228121,29.959614],[119.224769,29.959476],[119.217662,29.956282],[119.210673,29.958127],[119.208534,29.957989],[119.204279,29.961624],[119.197006,29.962436],[119.19363,29.963744],[119.184431,29.965588],[119.178251,29.964859],[119.173734,29.962766],[119.169741,29.964749],[119.161588,29.966318],[119.158616,29.970227],[119.153553,29.969291],[119.14937,29.970737],[119.14956,29.973366],[119.14811,29.974687],[119.142001,29.975637],[119.135512,29.980909],[119.132089,29.981721],[119.12182,29.978652],[119.12037,29.978872],[119.115901,29.98691],[119.113334,29.993447],[119.110196,29.997768],[119.11312,30.001498],[119.114546,30.009506],[119.11205,30.010965],[119.107986,30.011873],[119.097764,30.012616],[119.089896,30.013854],[119.085332,30.012754],[119.081458,30.009933],[119.077013,30.008763],[119.064414,30.008364],[119.058805,30.009217],[119.054051,30.008282],[119.051911,30.007098],[119.046824,30.011158],[119.039883,30.01058],[119.034963,30.013373],[119.031112,30.01845],[119.025122,30.021078],[119.024243,30.022454],[119.031683,30.031066],[119.032015,30.032662],[119.030138,30.035083],[119.026952,30.035],[119.021247,30.032744],[119.016161,30.032662],[119.004751,30.024311],[118.999355,30.021614],[118.988326,30.017996],[118.9864,30.025329],[118.987113,30.027283],[118.9864,30.031424],[118.982454,30.034643],[118.979721,30.032442],[118.975894,30.027943],[118.970664,30.026375],[118.969381,30.023458],[118.966457,30.022137],[118.96263,30.023444],[118.956093,30.021449],[118.95412,30.018766],[118.949199,30.016813],[118.940286,30.010249],[118.93634,30.010951],[118.932703,30.009575],[118.932109,30.008158],[118.927973,30.011584],[118.923789,30.009795],[118.917086,30.013056],[118.913211,30.012382],[118.909313,30.01391],[118.90501,30.012836],[118.898355,30.015547],[118.897404,30.01673],[118.89883,30.018766],[118.902586,30.029057],[118.901516,30.031314],[118.895597,30.032455],[118.892269,30.039017],[118.890582,30.041273],[118.891342,30.043034],[118.897333,30.049623],[118.897356,30.051864],[118.89391,30.054932],[118.88811,30.062372],[118.885067,30.064036],[118.878815,30.064655],[118.875464,30.07204],[118.87506,30.079039],[118.873729,30.081748],[118.872992,30.087028],[118.872611,30.095401],[118.868856,30.101463],[118.869117,30.107402],[118.871637,30.11301],[118.873895,30.115058],[118.878055,30.116735],[118.883855,30.116392],[118.88723,30.11745],[118.888609,30.122357],[118.888656,30.128432],[118.893387,30.133091],[118.895978,30.138794],[118.896952,30.1444],[118.896786,30.148083],[118.895098,30.148495],[118.890938,30.147451],[118.881026,30.146805],[118.874988,30.148193],[118.870543,30.151161],[118.865718,30.151491],[118.862081,30.148894],[118.8564,30.14822],[118.852145,30.149924],[118.846987,30.153881],[118.845703,30.156135],[118.846797,30.161053],[118.84808,30.163046],[118.852858,30.166549],[118.858349,30.168087],[118.864411,30.168994],[118.870282,30.171055],[118.873681,30.172923],[118.884259,30.176811],[118.891628,30.18041],[118.9028,30.183226],[118.904796,30.18655],[118.91081,30.187484],[118.912165,30.1885],[118.915707,30.194392],[118.920651,30.199021],[118.929232,30.201918],[118.92909,30.20667],[118.926142,30.212643],[118.923385,30.214511],[118.919368,30.215225],[118.911452,30.215321],[118.905201,30.216571],[118.90318,30.21793],[118.899876,30.223422],[118.896168,30.234557],[118.893529,30.23976],[118.892531,30.243247],[118.889726,30.24499],[118.882429,30.247475],[118.881549,30.251153],[118.882357,30.252348],[118.888965,30.253775],[118.889441,30.255724],[118.886541,30.260734],[118.885043,30.268379],[118.879861,30.278355],[118.878079,30.282719],[118.877199,30.288071],[118.877508,30.290815],[118.880574,30.294519],[118.881811,30.298512],[118.881549,30.304603],[118.879196,30.312189],[118.879885,30.314878],[118.889607,30.317018],[118.894124,30.319089],[118.899781,30.322587],[118.90841,30.330871],[118.911143,30.332229],[118.917894,30.332449],[118.9226,30.334753],[118.928282,30.339978],[118.933559,30.342131],[118.93634,30.345066],[118.937362,30.348713],[118.936435,30.350811],[118.94977,30.358778],[118.954191,30.360341],[118.955404,30.359189],[118.956592,30.352059],[118.959373,30.347287],[118.964056,30.350578],[118.969048,30.351332],[118.972708,30.347534],[118.975751,30.347164],[118.985735,30.34955],[118.988112,30.348672],[118.988539,30.346547],[118.987755,30.340705],[118.98804,30.333477],[118.989157,30.33238],[118.996312,30.330501],[119.004442,30.328938],[119.007152,30.327717],[119.010598,30.323561],[119.01376,30.321531],[119.018538,30.32042],[119.02158,30.315509],[119.024742,30.313657],[119.028783,30.312587],[119.037197,30.312066],[119.046872,30.313191],[119.048322,30.31267],[119.050414,30.309268],[119.050842,30.30673],[119.052672,30.305221],[119.05676,30.303876],[119.059874,30.303849],[119.062988,30.30496],[119.067077,30.308197],[119.069858,30.312135],[119.0734,30.31588],[119.08267,30.321627],[119.090253,30.324014],[119.0932,30.322957],[119.094959,30.320653],[119.102328,30.31758],[119.105466,30.314631],[119.111028,30.311298],[119.119467,30.310104],[119.125671,30.305371],[119.128499,30.304727],[119.151271,30.304603],[119.154599,30.302833],[119.156739,30.299541],[119.160875,30.298114],[119.163584,30.299664],[119.166294,30.298827],[119.170525,30.295342],[119.173996,30.294711],[119.179629,30.295384],[119.18821,30.291652],[119.19092,30.291954],[119.201046,30.291021],[119.203709,30.296262],[119.204065,30.299349],[119.205682,30.301558],[119.210602,30.299431],[119.212908,30.299239],[119.218019,30.301338],[119.222606,30.299623],[119.224032,30.296564],[119.223747,30.291281],[119.225482,30.288798],[119.229191,30.289662],[119.233731,30.293394],[119.238152,30.301365],[119.243072,30.313287],[119.245925,30.321613],[119.244095,30.324452],[119.239982,30.327031],[119.241575,30.33153],[119.247137,30.340814],[119.248849,30.341541],[119.252747,30.340334],[119.257121,30.337756],[119.261209,30.337249],[119.26506,30.338058],[119.270599,30.342062],[119.272334,30.34257],[119.275757,30.34091],[119.278158,30.341582],[119.289448,30.349646],[119.297507,30.35764],[119.300668,30.363686],[119.31077,30.366387],[119.326554,30.371762],[119.329074,30.371515],[119.336347,30.366264],[119.342647,30.363152],[119.343788,30.360684],[119.344881,30.354143],[119.349445,30.349152],[119.356077,30.349426],[119.368247,30.35295],[119.375616,30.354815],[119.381083,30.35812],[119.386146,30.363906],[119.391875,30.366305],[119.395845,30.36625],[119.399981,30.3678],[119.403047,30.373325],[119.407136,30.373325],[119.418141,30.376108],[119.421113,30.379727],[119.426556,30.383949],[119.430502,30.384058],[119.432784,30.386485],[119.434186,30.390254],[119.435708,30.391501],[119.441032,30.392461],[119.445739,30.399191],[119.448425,30.405235],[119.450231,30.410826],[119.451848,30.412169],[119.455865,30.411991],[119.467013,30.40814],[119.477329,30.40729],[119.483819,30.408318],[119.490403,30.408208],[119.498889,30.406865],[119.506092,30.404673],[119.513151,30.401671],[119.516907,30.402535],[119.522232,30.404673],[119.528626,30.408524],[119.533451,30.409414],[119.535733,30.411662],[119.536446,30.414403],[119.53483,30.420788],[119.535305,30.424049],[119.544386,30.431065],[119.54662,30.434805],[119.551731,30.439765],[119.565922,30.443381],[119.569107,30.44097],[119.571864,30.436915],[119.572839,30.431325],[119.579708,30.424748],[119.5818,30.423625],[119.591665,30.421638],[119.597893,30.422446],[119.602789,30.425886],[119.606569,30.427146],[119.613011,30.426023],[119.618026,30.427324],[119.623018,30.429763],[119.627653,30.433024],[119.633881,30.440217],[119.63709,30.441833],[119.642296,30.440217],[119.645101,30.437764],[119.645671,30.429845],[119.637161,30.428708],[119.632193,30.42716],[119.631052,30.423282],[119.634071,30.414992],[119.635878,30.406249],[119.635973,30.403617],[119.632383,30.399766],[119.640014,30.39793],[119.644411,30.395764],[119.649783,30.395449],[119.658151,30.397464],[119.661859,30.397409],[119.667397,30.399108],[119.677856,30.40618],[119.681089,30.408729],[119.685011,30.406605],[119.696445,30.401918],[119.704027,30.399684],[119.718385,30.390199],[119.723258,30.388472],[119.726253,30.389624],[119.735571,30.395682],[119.742321,30.393338],[119.744722,30.393804],[119.749048,30.392543],[119.755585,30.388815],[119.753303,30.386553],[119.750237,30.385292],[119.749262,30.383757],[119.749904,30.381399],[119.757534,30.378561],[119.768825,30.376752],[119.771107,30.375998],[119.772771,30.3739],[119.774578,30.367471],[119.78033,30.365647],[119.788602,30.35971],[119.791764,30.356899],[119.795163,30.348988],[119.798895,30.344215],[119.804647,30.342392],[119.807262,30.334437],[119.807666,30.328992],[119.806549,30.325851],[119.80227,30.322614],[119.803839,30.316099],[119.803554,30.311462],[119.802365,30.307868],[119.799085,30.30175],[119.799893,30.297483],[119.808023,30.295342],[119.821001,30.304096],[119.826302,30.306743],[119.83108,30.307745],[119.833433,30.307127],[119.836286,30.29928],[119.837118,30.29382],[119.836761,30.289525],[119.830438,30.286328],[119.827871,30.283789],[119.827657,30.282074],[119.829273,30.278548],[119.828513,30.269216],[119.829083,30.268516],[119.839471,30.27148],[119.844225,30.272194],[119.846816,30.270245],[119.853686,30.273841],[119.859985,30.272825],[119.864715,30.273264],[119.864976,30.271068],[119.867282,30.26938],[119.86588,30.268392],[119.86569,30.265236],[119.863479,30.263218],[119.862837,30.260501],[119.865,30.258922],[119.864477,30.256232],[119.868304,30.252718],[119.86752,30.249795],[119.86298,30.237852],[119.856657,30.227843],[119.853876,30.225276],[119.849787,30.223093],[119.846412,30.222502],[119.844914,30.221047],[119.845057,30.217189],[119.843132,30.214442],[119.84161,30.20667],[119.836452,30.199378],[119.836095,30.197949],[119.839495,30.19387],[119.842656,30.191123],[119.845413,30.190437],[119.84905,30.188074],[119.850168,30.181357],[119.853472,30.174929],[119.840564,30.166453],[119.834455,30.160545],[119.829582,30.156464],[119.831199,30.14359],[119.828584,30.140608],[119.826136,30.133365],[119.821762,30.132582],[119.814512,30.130479],[119.81059,30.125807],[119.807809,30.124762],[119.804671,30.122302],[119.802532,30.117807],[119.80208,30.111691],[119.797136,30.110344],[119.791003,30.107361],[119.789791,30.105189],[119.790005,30.099346],[119.78827,30.098521],[119.783824,30.100034],[119.782113,30.099484],[119.780188,30.096363],[119.779237,30.08458],[119.777573,30.083054],[119.770822,30.082091],[119.76747,30.082133],[119.7553,30.085199],[119.751116,30.08733],[119.747432,30.091455],[119.744698,30.092073],[119.741228,30.089901],[119.73916,30.085625],[119.736165,30.084814],[119.701413,30.092087],[119.70039,30.09617],[119.691049,30.098356],[119.687578,30.099896],[119.67971,30.105106],[119.67498,30.110041],[119.673221,30.115581],[119.672246,30.116502],[119.662239,30.120927],[119.65991,30.123498],[119.655797,30.130081],[119.651733,30.130713],[119.64491,30.126961],[119.632954,30.122659],[119.623375,30.122055],[119.619191,30.123195],[119.616148,30.126961],[119.615934,30.132926],[119.61679,30.136238],[119.615673,30.137516],[119.611727,30.137461],[119.610301,30.138505],[119.610063,30.146544],[119.607948,30.153222],[119.605166,30.156698],[119.594589,30.159212],[119.586126,30.164103],[119.582109,30.1649],[119.580707,30.167332],[119.583226,30.182429],[119.582513,30.186852],[119.580231,30.191412],[119.577521,30.194557],[119.574907,30.19615],[119.571246,30.196947],[119.561595,30.194241],[119.556413,30.192346],[119.550518,30.189228],[119.546549,30.186275],[119.539774,30.185698],[119.535424,30.183967],[119.529315,30.166411],[119.530195,30.160147],[119.529434,30.158443],[119.526201,30.157412],[119.520449,30.158938],[119.505664,30.158567],[119.503429,30.156025],[119.503643,30.149086],[119.497819,30.146091],[119.499412,30.14337],[119.498651,30.141212],[119.492828,30.142628],[119.489785,30.144923],[119.486695,30.141982],[119.483676,30.141927],[119.479754,30.146805],[119.468368,30.143205],[119.463828,30.145527],[119.459502,30.143177],[119.455152,30.142215],[119.452062,30.139288],[119.445834,30.140072],[119.443766,30.139082],[119.441341,30.135784],[119.442577,30.13015],[119.447307,30.125655],[119.452466,30.123168],[119.458028,30.122426],[119.460738,30.120185],[119.461332,30.118343],[119.460785,30.112845],[119.459502,30.109794],[119.457077,30.107264],[119.454201,30.105725],[119.446523,30.10314],[119.440676,30.0998],[119.436944,30.097037],[119.436373,30.094411],[119.437229,30.089874],[119.440081,30.087193],[119.43623,30.086038],[119.431785,30.082559],[119.429741,30.079314],[119.430597,30.074542],[119.433164,30.071531],[119.434044,30.068877],[119.43257,30.067405],[119.42299,30.06537],[119.420399,30.063514],[119.420304,30.062083],[119.427673,30.057173],[119.430169,30.053116],[119.430502,30.050021],[119.433497,30.044588],[119.433117,30.040407],[119.431476,30.037559],[119.430763,30.032813],[119.431096,30.029773],[119.430335,30.024683],[119.432308,30.015423],[119.433568,30.013166],[119.426603,30.000548],[119.426485,29.994741],[119.425058,29.991589],[119.420542,29.991837],[119.412817,29.99525],[119.405353,29.997245],[119.397176,29.995608],[119.38926,29.993186],[119.386978,29.989428],[119.381582,29.991438],[119.36858,29.998828],[119.358287,30.002268],[119.345071,30.004264],[119.338915,30.007195],[119.334374,30.007814],[119.321752,29.999805],[119.318543,29.996034],[119.314098,29.997493],[119.309487,29.993805],[119.30547,29.994204],[119.297958,30.001223],[119.29734,30.003342],[119.299384,30.007222],[119.296532,30.011103],[119.29444,30.012726],[119.290494,30.013744],[119.282603,30.009933],[119.278514,30.005571],[119.274901,30.002736],[119.270456,30.001016],[119.268364,30.001897],[119.265274,30.005557],[119.263135,30.005007],[119.260876,30.002846],[119.256217,30.000108],[119.250346,29.999599],[119.248373,29.998718],[119.246472,29.992291],[119.247922,29.98852],[119.253769,29.983964],[119.255148,29.981212],[119.252961,29.975775],[119.253817,29.968025],[119.255433,29.962078],[119.259569,29.95547],[119.259403,29.951395],[119.258048,29.9463],[119.258214,29.943794],[119.259854,29.940572],[119.25762,29.936799],[119.25472,29.935188],[119.24747,29.934376],[119.24476,29.935491],[119.241171,29.940641],[119.240434,29.943588],[119.237819,29.946906],[119.236369,29.950968]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330122,\"name\":\"桐庐县\",\"center\":[119.685045,29.797437],\"centroid\":[119.553936,29.830649],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":10,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.440081,30.087193],[119.446975,30.086629],[119.454106,30.088801],[119.4576,30.088403],[119.459407,30.086945],[119.461118,30.083535],[119.463043,30.077306],[119.465634,30.074061],[119.467013,30.074034],[119.473217,30.079671],[119.47519,30.080043],[119.481679,30.079011],[119.485459,30.077403],[119.490902,30.073924],[119.494706,30.072947],[119.499816,30.073374],[119.502669,30.070967],[119.505212,30.070128],[119.508635,30.066457],[119.50892,30.06416],[119.50602,30.054863],[119.506424,30.051246],[119.510798,30.043845],[119.511369,30.041301],[119.509063,30.037958],[119.506805,30.036335],[119.504047,30.031974],[119.501385,30.025893],[119.500719,30.022454],[119.502407,30.017432],[119.507161,30.011447],[119.508873,30.011777],[119.514055,30.015464],[119.522541,30.0164],[119.52449,30.014831],[119.530932,30.012423],[119.535258,30.008736],[119.542508,30.006727],[119.542769,30.002874],[119.53937,29.993956],[119.541438,29.989649],[119.539441,29.985988],[119.539204,29.982547],[119.540392,29.980124],[119.547951,29.975293],[119.553395,29.976683],[119.557958,29.980427],[119.560526,29.981707],[119.565375,29.982492],[119.568322,29.98157],[119.575121,29.977179],[119.58218,29.973311],[119.587315,29.974068],[119.593115,29.972279],[119.596324,29.972141],[119.599081,29.970874],[119.60065,29.964955],[119.604192,29.962298],[119.611466,29.962587],[119.611632,29.95631],[119.617432,29.953831],[119.619619,29.946039],[119.626061,29.942968],[119.627677,29.938837],[119.626726,29.933054],[119.630957,29.926568],[119.635426,29.924943],[119.637874,29.925342],[119.643413,29.92789],[119.654228,29.930616],[119.66628,29.927876],[119.668087,29.92256],[119.673744,29.92205],[119.675432,29.920012],[119.676121,29.916665],[119.675146,29.912671],[119.675503,29.908842],[119.674243,29.905109],[119.676311,29.899035],[119.675384,29.893607],[119.675479,29.888702],[119.679045,29.885437],[119.685748,29.881993],[119.692261,29.880905],[119.699915,29.875421],[119.702863,29.870419],[119.705549,29.867897],[119.710731,29.860938],[119.712157,29.860291],[119.72718,29.8655],[119.736688,29.870901],[119.74042,29.868931],[119.744889,29.868393],[119.752186,29.870019],[119.756607,29.871949],[119.763952,29.871328],[119.777502,29.874222],[119.787295,29.875131],[119.794307,29.874677],[119.802841,29.876275],[119.813942,29.880229],[119.817792,29.880629],[119.821786,29.879458],[119.82528,29.874691],[119.827039,29.867277],[119.828537,29.864563],[119.836618,29.85945],[119.840659,29.855853],[119.843892,29.85103],[119.852568,29.841216],[119.859937,29.837591],[119.865642,29.837757],[119.885015,29.846137],[119.887059,29.845668],[119.888889,29.842622],[119.889103,29.838639],[119.886061,29.83489],[119.885371,29.830934],[119.882329,29.826729],[119.882971,29.819726],[119.884896,29.812088],[119.881568,29.80587],[119.875364,29.802423],[119.871822,29.801816],[119.868304,29.80245],[119.867021,29.801389],[119.865761,29.797404],[119.860222,29.786564],[119.860793,29.781862],[119.863313,29.778772],[119.866403,29.776552],[119.870301,29.769324],[119.872654,29.767255],[119.878003,29.764966],[119.883921,29.763421],[119.89053,29.763241],[119.890221,29.758496],[119.888794,29.755972],[119.88908,29.753102],[119.890981,29.750426],[119.894476,29.748757],[119.900466,29.744645],[119.898612,29.740617],[119.901393,29.728612],[119.905648,29.72766],[119.911376,29.722582],[119.91247,29.720402],[119.911376,29.715944],[119.91178,29.71364],[119.915584,29.707967],[119.914252,29.705524],[119.919529,29.699562],[119.922525,29.697753],[119.928657,29.698858],[119.931676,29.696691],[119.933768,29.698582],[119.930084,29.701936],[119.930226,29.704503],[119.933578,29.706739],[119.937761,29.70747],[119.941517,29.705234],[119.94494,29.704903],[119.948149,29.703068],[119.951287,29.699299],[119.957942,29.698416],[119.960129,29.696967],[119.967403,29.694896],[119.973441,29.689941],[119.973797,29.678648],[119.973155,29.673098],[119.970778,29.670765],[119.966832,29.670958],[119.959083,29.672822],[119.948862,29.668017],[119.945653,29.667368],[119.940733,29.667506],[119.936169,29.666526],[119.924806,29.669895],[119.92281,29.668487],[119.921265,29.664027],[119.918246,29.664386],[119.914514,29.66625],[119.911709,29.666498],[119.908595,29.663074],[119.902344,29.661403],[119.895712,29.660644],[119.887178,29.662039],[119.883494,29.663433],[119.879286,29.667934],[119.875816,29.668984],[119.873058,29.668666],[119.869992,29.66995],[119.863384,29.669481],[119.859533,29.671345],[119.856538,29.671027],[119.852521,29.668887],[119.842157,29.675556],[119.837664,29.676453],[119.835454,29.678124],[119.836904,29.68076],[119.835359,29.682251],[119.824472,29.671856],[119.821738,29.671193],[119.817602,29.673057],[119.814132,29.671359],[119.810709,29.667493],[119.809972,29.665201],[119.805313,29.664952],[119.802484,29.663254],[119.79918,29.660078],[119.798253,29.656929],[119.796351,29.655687],[119.793214,29.656101],[119.79117,29.654969],[119.788151,29.645205],[119.781067,29.638618],[119.777525,29.628645],[119.776527,29.62685],[119.776218,29.620233],[119.779831,29.613285],[119.780069,29.609458],[119.779308,29.604001],[119.774364,29.599179],[119.76728,29.597659],[119.765307,29.596402],[119.762312,29.597811],[119.757843,29.598447],[119.750142,29.602978],[119.746434,29.606419],[119.742393,29.609195],[119.731126,29.613547],[119.728368,29.613506],[119.723899,29.610535],[119.718575,29.610439],[119.717315,29.608781],[119.715247,29.601804],[119.709376,29.595863],[119.708282,29.589673],[119.704075,29.587641],[119.701318,29.58959],[119.698322,29.593721],[119.695256,29.596719],[119.692998,29.602633],[119.695375,29.616034],[119.694876,29.619985],[119.693307,29.620965],[119.688363,29.62109],[119.679663,29.62685],[119.678593,29.634018],[119.676192,29.636325],[119.673031,29.636905],[119.670226,29.640979],[119.672104,29.648658],[119.674505,29.653809],[119.670844,29.657137],[119.667968,29.657316],[119.665305,29.653836],[119.658792,29.652013],[119.651043,29.651641],[119.64705,29.65229],[119.643579,29.653961],[119.636733,29.652939],[119.634689,29.653243],[119.62946,29.656239],[119.621972,29.65472],[119.616148,29.656805],[119.617479,29.662757],[119.616909,29.664648],[119.613581,29.669757],[119.612749,29.673029],[119.614128,29.684999],[119.610776,29.688229],[119.610895,29.695227],[119.602528,29.700859],[119.604144,29.708837],[119.603978,29.713419],[119.601815,29.716055],[119.596229,29.717352],[119.593448,29.723203],[119.59176,29.724818],[119.583726,29.729385],[119.581895,29.73111],[119.578306,29.738299],[119.577212,29.741569],[119.574099,29.745197],[119.571698,29.749847],[119.569131,29.751695],[119.560431,29.752316],[119.549472,29.749916],[119.544695,29.747432],[119.543696,29.746122],[119.540511,29.737319],[119.537064,29.736933],[119.531954,29.733925],[119.528269,29.733897],[119.522969,29.731013],[119.520187,29.728792],[119.50835,29.725273],[119.504879,29.722872],[119.50022,29.722679],[119.493802,29.721285],[119.492376,29.722334],[119.484556,29.731262],[119.478019,29.732338],[119.476379,29.733373],[119.472932,29.739361],[119.465753,29.741693],[119.458955,29.744935],[119.454938,29.741983],[119.451206,29.741555],[119.447094,29.743183],[119.44203,29.741651],[119.439867,29.742231],[119.434519,29.748384],[119.425938,29.753171],[119.425439,29.75582],[119.42261,29.758469],[119.417547,29.757048],[119.415431,29.750233],[119.411343,29.745266],[119.407088,29.7431],[119.398792,29.744328],[119.393563,29.748301],[119.392374,29.750357],[119.394323,29.759807],[119.391495,29.7624],[119.390924,29.764979],[119.388357,29.769628],[119.383579,29.770952],[119.380489,29.766993],[119.374142,29.760662],[119.373405,29.758758],[119.373857,29.754978],[119.370624,29.752688],[119.365823,29.750398],[119.36423,29.746397],[119.360332,29.741638],[119.358074,29.737968],[119.355768,29.73231],[119.354056,29.730185],[119.354508,29.725825],[119.352915,29.722334],[119.350015,29.719643],[119.34828,29.715116],[119.344168,29.717435],[119.341434,29.717366],[119.334184,29.714992],[119.327933,29.714316],[119.32218,29.716248],[119.31745,29.717173],[119.316547,29.719808],[119.31707,29.723617],[119.314431,29.724983],[119.308893,29.724721],[119.302451,29.725715],[119.298529,29.724831],[119.291184,29.725356],[119.287547,29.728198],[119.286881,29.730917],[119.28807,29.737954],[119.290233,29.740575],[119.292016,29.746218],[119.293299,29.760607],[119.294369,29.764028],[119.293989,29.768373],[119.294892,29.771766],[119.294369,29.775379],[119.286002,29.781793],[119.28246,29.786151],[119.273118,29.791612],[119.270765,29.795404],[119.272334,29.799624],[119.278609,29.804739],[119.279417,29.807938],[119.278823,29.813329],[119.27502,29.818527],[119.273903,29.828135],[119.274402,29.830175],[119.272215,29.83267],[119.267675,29.833759],[119.26594,29.833043],[119.257739,29.823503],[119.255409,29.821808],[119.251297,29.822235],[119.247209,29.824317],[119.241718,29.828397],[119.239079,29.831568],[119.233564,29.831568],[119.225506,29.834283],[119.222036,29.839177],[119.219017,29.839645],[119.213478,29.836213],[119.204232,29.833718],[119.196221,29.837123],[119.193939,29.83868],[119.189946,29.846495],[119.182933,29.852243],[119.182482,29.860497],[119.185382,29.865706],[119.188329,29.86776],[119.191419,29.873189],[119.191348,29.878741],[119.194581,29.884115],[119.198669,29.889612],[119.205705,29.896582],[119.207726,29.897271],[119.213692,29.896155],[119.219088,29.896541],[119.222368,29.897561],[119.225934,29.900302],[119.227669,29.902588],[119.228644,29.910605],[119.226766,29.912451],[119.227717,29.91617],[119.221703,29.917905],[119.218613,29.922298],[119.218328,29.927559],[119.222036,29.932916],[119.220277,29.936083],[119.216925,29.936662],[119.21141,29.935932],[119.208106,29.93629],[119.204113,29.937901],[119.197338,29.935119],[119.190968,29.936965],[119.18802,29.936689],[119.181127,29.941701],[119.180865,29.945144],[119.183242,29.949026],[119.190136,29.952042],[119.194462,29.953033],[119.205254,29.949192],[119.212076,29.946452],[119.217234,29.945529],[119.223509,29.946094],[119.226956,29.947787],[119.23114,29.951339],[119.236369,29.950968],[119.237819,29.946906],[119.240434,29.943588],[119.241171,29.940641],[119.24476,29.935491],[119.24747,29.934376],[119.25472,29.935188],[119.25762,29.936799],[119.259854,29.940572],[119.258214,29.943794],[119.258048,29.9463],[119.259403,29.951395],[119.259569,29.95547],[119.255433,29.962078],[119.253817,29.968025],[119.252961,29.975775],[119.255148,29.981212],[119.253769,29.983964],[119.247922,29.98852],[119.246472,29.992291],[119.248373,29.998718],[119.250346,29.999599],[119.256217,30.000108],[119.260876,30.002846],[119.263135,30.005007],[119.265274,30.005557],[119.268364,30.001897],[119.270456,30.001016],[119.274901,30.002736],[119.278514,30.005571],[119.282603,30.009933],[119.290494,30.013744],[119.29444,30.012726],[119.296532,30.011103],[119.299384,30.007222],[119.29734,30.003342],[119.297958,30.001223],[119.30547,29.994204],[119.309487,29.993805],[119.314098,29.997493],[119.318543,29.996034],[119.321752,29.999805],[119.334374,30.007814],[119.338915,30.007195],[119.345071,30.004264],[119.358287,30.002268],[119.36858,29.998828],[119.381582,29.991438],[119.386978,29.989428],[119.38926,29.993186],[119.397176,29.995608],[119.405353,29.997245],[119.412817,29.99525],[119.420542,29.991837],[119.425058,29.991589],[119.426485,29.994741],[119.426603,30.000548],[119.433568,30.013166],[119.432308,30.015423],[119.430335,30.024683],[119.431096,30.029773],[119.430763,30.032813],[119.431476,30.037559],[119.433117,30.040407],[119.433497,30.044588],[119.430502,30.050021],[119.430169,30.053116],[119.427673,30.057173],[119.420304,30.062083],[119.420399,30.063514],[119.42299,30.06537],[119.43257,30.067405],[119.434044,30.068877],[119.433164,30.071531],[119.430597,30.074542],[119.429741,30.079314],[119.431785,30.082559],[119.43623,30.086038],[119.440081,30.087193]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330127,\"name\":\"淳安县\",\"center\":[119.044276,29.604177],\"centroid\":[118.889354,29.608818],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":11,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[118.897404,30.01673],[118.898355,30.015547],[118.90501,30.012836],[118.909313,30.01391],[118.913211,30.012382],[118.917086,30.013056],[118.923789,30.009795],[118.927973,30.011584],[118.932109,30.008158],[118.932703,30.009575],[118.93634,30.010951],[118.940286,30.010249],[118.949199,30.016813],[118.95412,30.018766],[118.956093,30.021449],[118.96263,30.023444],[118.966457,30.022137],[118.969381,30.023458],[118.970664,30.026375],[118.975894,30.027943],[118.979721,30.032442],[118.982454,30.034643],[118.9864,30.031424],[118.987113,30.027283],[118.9864,30.025329],[118.988326,30.017996],[118.999355,30.021614],[119.004751,30.024311],[119.016161,30.032662],[119.021247,30.032744],[119.026952,30.035],[119.030138,30.035083],[119.032015,30.032662],[119.031683,30.031066],[119.024243,30.022454],[119.025122,30.021078],[119.031112,30.01845],[119.034963,30.013373],[119.039883,30.01058],[119.046824,30.011158],[119.051911,30.007098],[119.054051,30.008282],[119.058805,30.009217],[119.064414,30.008364],[119.077013,30.008763],[119.081458,30.009933],[119.085332,30.012754],[119.089896,30.013854],[119.097764,30.012616],[119.107986,30.011873],[119.11205,30.010965],[119.114546,30.009506],[119.11312,30.001498],[119.110196,29.997768],[119.113334,29.993447],[119.115901,29.98691],[119.12037,29.978872],[119.12182,29.978652],[119.132089,29.981721],[119.135512,29.980909],[119.142001,29.975637],[119.14811,29.974687],[119.14956,29.973366],[119.14937,29.970737],[119.153553,29.969291],[119.158616,29.970227],[119.161588,29.966318],[119.169741,29.964749],[119.173734,29.962766],[119.178251,29.964859],[119.184431,29.965588],[119.19363,29.963744],[119.197006,29.962436],[119.204279,29.961624],[119.208534,29.957989],[119.210673,29.958127],[119.217662,29.956282],[119.224769,29.959476],[119.228121,29.959614],[119.233184,29.957618],[119.235537,29.955332],[119.236369,29.950968],[119.23114,29.951339],[119.226956,29.947787],[119.223509,29.946094],[119.217234,29.945529],[119.212076,29.946452],[119.205254,29.949192],[119.194462,29.953033],[119.190136,29.952042],[119.183242,29.949026],[119.180865,29.945144],[119.181127,29.941701],[119.18802,29.936689],[119.190968,29.936965],[119.197338,29.935119],[119.204113,29.937901],[119.208106,29.93629],[119.21141,29.935932],[119.216925,29.936662],[119.220277,29.936083],[119.222036,29.932916],[119.218328,29.927559],[119.218613,29.922298],[119.221703,29.917905],[119.227717,29.91617],[119.226766,29.912451],[119.228644,29.910605],[119.227669,29.902588],[119.225934,29.900302],[119.222368,29.897561],[119.219088,29.896541],[119.213692,29.896155],[119.207726,29.897271],[119.205705,29.896582],[119.198669,29.889612],[119.194581,29.884115],[119.191348,29.878741],[119.191419,29.873189],[119.188329,29.86776],[119.185382,29.865706],[119.182482,29.860497],[119.182933,29.852243],[119.189946,29.846495],[119.193939,29.83868],[119.196221,29.837123],[119.204232,29.833718],[119.213478,29.836213],[119.219017,29.839645],[119.222036,29.839177],[119.225506,29.834283],[119.233564,29.831568],[119.239079,29.831568],[119.241718,29.828397],[119.247209,29.824317],[119.251297,29.822235],[119.255409,29.821808],[119.257739,29.823503],[119.26594,29.833043],[119.267675,29.833759],[119.272215,29.83267],[119.274402,29.830175],[119.273903,29.828135],[119.27502,29.818527],[119.278823,29.813329],[119.279417,29.807938],[119.278609,29.804739],[119.272334,29.799624],[119.270765,29.795404],[119.273118,29.791612],[119.28246,29.786151],[119.286002,29.781793],[119.294369,29.775379],[119.294892,29.771766],[119.293989,29.768373],[119.294369,29.764028],[119.293299,29.760607],[119.292016,29.746218],[119.290233,29.740575],[119.28807,29.737954],[119.286881,29.730917],[119.287547,29.728198],[119.291184,29.725356],[119.298529,29.724831],[119.302451,29.725715],[119.308893,29.724721],[119.314431,29.724983],[119.31707,29.723617],[119.316547,29.719808],[119.31745,29.717173],[119.32218,29.716248],[119.327933,29.714316],[119.334184,29.714992],[119.341434,29.717366],[119.344168,29.717435],[119.34828,29.715116],[119.345642,29.711224],[119.336942,29.702336],[119.33504,29.701715],[119.332924,29.702791],[119.330619,29.702115],[119.329763,29.699769],[119.323297,29.693171],[119.321657,29.688422],[119.320588,29.6792],[119.31852,29.676964],[119.315548,29.670309],[119.314621,29.669453],[119.309035,29.668017],[119.30673,29.661776],[119.306706,29.654154],[119.305517,29.651392],[119.303259,29.649735],[119.299194,29.649113],[119.293085,29.65066],[119.286572,29.647401],[119.277777,29.640758],[119.276969,29.63812],[119.274853,29.636228],[119.267508,29.633093],[119.263824,29.630745],[119.257382,29.628866],[119.254292,29.626629],[119.252913,29.623314],[119.251654,29.61747],[119.248849,29.614887],[119.251249,29.610826],[119.248231,29.605617],[119.246971,29.599483],[119.247304,29.59759],[119.243025,29.590087],[119.234967,29.582086],[119.237582,29.581202],[119.241955,29.577706],[119.243072,29.575246],[119.243667,29.56951],[119.24602,29.567893],[119.254078,29.566152],[119.255837,29.564784],[119.264371,29.564825],[119.274996,29.569856],[119.278229,29.572896],[119.282626,29.572896],[119.284457,29.571625],[119.285954,29.568474],[119.282531,29.565544],[119.279441,29.56148],[119.274449,29.560969],[119.268222,29.561895],[119.26613,29.559324],[119.267675,29.548832],[119.265702,29.546704],[119.249562,29.535851],[119.241575,29.533045],[119.230569,29.523961],[119.2295,29.522246],[119.230997,29.51955],[119.2295,29.517877],[119.226552,29.516964],[119.223795,29.519965],[119.216878,29.524279],[119.215499,29.526464],[119.210388,29.529409],[119.206276,29.529063],[119.202092,29.527252],[119.199145,29.524846],[119.199929,29.52226],[119.202401,29.51991],[119.204042,29.516632],[119.20542,29.510382],[119.206656,29.508142],[119.205919,29.504989],[119.201546,29.501739],[119.198646,29.495211],[119.193559,29.49149],[119.191705,29.483703],[119.192941,29.470796],[119.192608,29.465581],[119.190897,29.462606],[119.185929,29.460434],[119.179083,29.453931],[119.172023,29.454927],[119.167316,29.453668],[119.159139,29.452202],[119.156192,29.450721],[119.146303,29.447829],[119.141335,29.447373],[119.138459,29.449393],[119.132255,29.448549],[119.126883,29.450334],[119.122248,29.445975],[119.11728,29.445588],[119.114784,29.44639],[119.110719,29.443982],[119.106583,29.440025],[119.101948,29.436468],[119.099595,29.431085],[119.102399,29.426213],[119.102281,29.423002],[119.098881,29.417673],[119.096504,29.416358],[119.083597,29.414116],[119.078154,29.414462],[119.070428,29.413825],[119.067196,29.412552],[119.061633,29.408122],[119.059328,29.405603],[119.057878,29.402045],[119.057236,29.398086],[119.055405,29.395497],[119.052767,29.394459],[119.050865,29.391482],[119.04806,29.389987],[119.044637,29.386595],[119.039717,29.385889],[119.034725,29.382787],[119.030518,29.376404],[119.016874,29.372],[119.01124,29.368428],[119.007556,29.367444],[119.003206,29.368289],[118.99453,29.368372],[118.990607,29.365436],[118.98621,29.360146],[118.984308,29.358872],[118.98148,29.359218],[118.976036,29.364813],[118.972209,29.364689],[118.967431,29.362431],[118.962368,29.363899],[118.959611,29.362985],[118.958375,29.360922],[118.9574,29.355756],[118.95576,29.353637],[118.946704,29.349759],[118.94214,29.348374],[118.936102,29.345673],[118.92909,29.341808],[118.923195,29.342196],[118.919391,29.341614],[118.91314,29.336627],[118.908219,29.336156],[118.900446,29.332652],[118.893054,29.3288],[118.890629,29.324049],[118.886327,29.322372],[118.87834,29.326556],[118.873206,29.324492],[118.869545,29.322317],[118.863222,29.317495],[118.860679,29.314974],[118.857161,29.309182],[118.855734,29.303335],[118.849412,29.298346],[118.842684,29.297487],[118.838786,29.293191],[118.835078,29.290488],[118.828755,29.287453],[118.828636,29.285042],[118.826544,29.280288],[118.824476,29.279484],[118.819699,29.280343],[118.816894,29.281716],[118.812377,29.280801],[118.809525,29.278278],[118.80073,29.272942],[118.793622,29.267952],[118.786373,29.266732],[118.78478,29.259108],[118.781832,29.258068],[118.778267,29.252564],[118.77501,29.251011],[118.768188,29.251912],[118.766382,29.251164],[118.763886,29.248294],[118.762412,29.240322],[118.766691,29.235621],[118.767261,29.234137],[118.766239,29.229256],[118.767,29.223058],[118.765431,29.220589],[118.759298,29.218065],[118.757349,29.215985],[118.753023,29.213863],[118.743752,29.213655],[118.734173,29.207427],[118.73258,29.205416],[118.731701,29.201519],[118.72949,29.199674],[118.723333,29.198911],[118.718651,29.192807],[118.715442,29.189867],[118.708834,29.188757],[118.70137,29.192169],[118.693882,29.196955],[118.688748,29.20095],[118.684612,29.202531],[118.676577,29.200659],[118.670159,29.200506],[118.655374,29.196886],[118.651904,29.196414],[118.638307,29.192169],[118.628894,29.19235],[118.62685,29.195665],[118.628205,29.199063],[118.631984,29.202004],[118.633672,29.205624],[118.632317,29.214168],[118.631841,29.219618],[118.628109,29.220229],[118.624377,29.218883],[118.620123,29.219272],[118.618863,29.220714],[118.616486,29.226316],[118.613847,29.229464],[118.613063,29.231919],[118.607786,29.238228],[118.607596,29.239711],[118.614632,29.246325],[118.615464,29.250762],[118.611423,29.25768],[118.610091,29.262324],[118.606669,29.267134],[118.606669,29.268492],[118.609854,29.273108],[118.609497,29.277003],[118.610614,29.27947],[118.615511,29.278971],[118.619196,29.276809],[118.621145,29.278084],[118.623997,29.272346],[118.630582,29.265207],[118.634908,29.261852],[118.636928,29.263627],[118.636382,29.267078],[118.634147,29.27297],[118.629916,29.279886],[118.62452,29.284238],[118.619124,29.292928],[118.614394,29.296586],[118.617223,29.303127],[118.6138,29.307311],[118.604814,29.314614],[118.603483,29.316442],[118.60384,29.323564],[118.60094,29.327789],[118.596043,29.330823],[118.594593,29.330698],[118.589031,29.327872],[118.587533,29.328496],[118.587129,29.332056],[118.584253,29.333663],[118.579856,29.332153],[118.575149,29.336558],[118.571679,29.338317],[118.562266,29.338539],[118.551498,29.335713],[118.54237,29.33696],[118.541039,29.342528],[118.528559,29.345257],[118.523401,29.345368],[118.519099,29.344384],[118.518885,29.346448],[118.523995,29.355229],[118.524352,29.36142],[118.517482,29.363484],[118.509994,29.361642],[118.50574,29.359274],[118.502887,29.360991],[118.498989,29.361891],[118.494163,29.362057],[118.491596,29.365215],[118.488839,29.367237],[118.479164,29.366544],[118.473341,29.362764],[118.470132,29.360091],[118.464664,29.360312],[118.45625,29.365893],[118.448738,29.375241],[118.445957,29.37639],[118.441251,29.375919],[118.437685,29.377705],[118.430102,29.382455],[118.423637,29.387356],[118.422733,29.390471],[118.425847,29.395179],[118.4258,29.397643],[118.422139,29.400232],[118.418122,29.40163],[118.415293,29.403762],[118.409684,29.404495],[118.407021,29.405575],[118.405405,29.408136],[118.410825,29.413479],[118.413297,29.41813],[118.413154,29.420552],[118.40859,29.42339],[118.40203,29.425175],[118.395231,29.423473],[118.390263,29.423971],[118.386698,29.427652],[118.384154,29.433258],[118.378093,29.43388],[118.375169,29.435195],[118.372935,29.437824],[118.366374,29.450154],[118.363426,29.451067],[118.357341,29.451565],[118.35254,29.452797],[118.350686,29.454775],[118.350186,29.458746],[118.345741,29.465138],[118.345028,29.468251],[118.344957,29.475707],[118.347619,29.473978],[118.353609,29.47503],[118.35872,29.477063],[118.360479,29.479097],[118.362951,29.484159],[118.365708,29.48629],[118.371104,29.492154],[118.373505,29.496483],[118.379804,29.502555],[118.381444,29.504933],[118.383013,29.510133],[118.393044,29.507298],[118.402814,29.507464],[118.407473,29.508059],[118.41256,29.509677],[118.414984,29.509746],[118.420238,29.508031],[118.425491,29.504754],[118.430578,29.50373],[118.436544,29.505749],[118.439872,29.510036],[118.443105,29.50893],[118.448976,29.513397],[118.45045,29.512733],[118.45827,29.506358],[118.459815,29.50557],[118.464213,29.505888],[118.470393,29.507464],[118.479022,29.510935],[118.481969,29.512996],[118.489433,29.51684],[118.495162,29.518361],[118.496065,29.520642],[118.495162,29.525703],[118.4949,29.5314],[118.495875,29.533321],[118.497563,29.540331],[118.497848,29.544008],[118.494948,29.550602],[118.4949,29.553712],[118.498371,29.56137],[118.49868,29.567672],[118.499678,29.573615],[118.50177,29.576379],[118.50574,29.57725],[118.515462,29.583316],[118.521547,29.585956],[118.532172,29.588954],[118.535239,29.590612],[118.540896,29.599331],[118.542037,29.603821],[118.54855,29.611212],[118.549905,29.613395],[118.553447,29.612373],[118.555087,29.613409],[118.559746,29.620689],[118.567519,29.627292],[118.568065,29.633438],[118.569302,29.635496],[118.573865,29.638383],[118.584015,29.640523],[118.595544,29.644059],[118.602057,29.643672],[118.614228,29.650425],[118.620004,29.654112],[118.633482,29.648782],[118.636928,29.644832],[118.640945,29.641932],[118.642918,29.641656],[118.647316,29.643382],[118.653401,29.648685],[118.656872,29.654444],[118.659629,29.65646],[118.666712,29.663309],[118.672275,29.667009],[118.673915,29.669094],[118.674153,29.674009],[118.67508,29.675625],[118.681498,29.67978],[118.682353,29.68105],[118.682924,29.688326],[118.685467,29.69052],[118.691648,29.69393],[118.692884,29.699148],[118.700823,29.706463],[118.718698,29.709182],[118.72407,29.715958],[118.724641,29.72261],[118.726947,29.725825],[118.733626,29.730089],[118.737406,29.735029],[118.739711,29.736809],[118.744703,29.738768],[118.745559,29.740327],[118.74651,29.746287],[118.748673,29.750426],[118.749029,29.761145],[118.745535,29.76738],[118.747365,29.772428],[118.746628,29.775352],[118.744299,29.779641],[118.738356,29.784799],[118.736526,29.788454],[118.738618,29.807952],[118.739925,29.813288],[118.742278,29.816321],[118.74601,29.818168],[118.754972,29.816982],[118.759441,29.817162],[118.765906,29.82309],[118.765669,29.824524],[118.76013,29.828921],[118.753855,29.829541],[118.750955,29.831609],[118.75471,29.839232],[118.754164,29.843697],[118.755614,29.84542],[118.766952,29.848949],[118.770066,29.846826],[118.774178,29.845324],[118.778742,29.841906],[118.781975,29.842595],[118.786634,29.845227],[118.788916,29.851016],[118.798091,29.858816],[118.802608,29.860663],[118.807718,29.867649],[118.812972,29.87086],[118.81649,29.873946],[118.819057,29.874815],[118.823383,29.87881],[118.830134,29.882489],[118.84133,29.891306],[118.843968,29.89515],[118.845537,29.899103],[118.844848,29.905288],[118.844895,29.915261],[118.843112,29.920591],[118.8419,29.928151],[118.840141,29.929859],[118.838715,29.9345],[118.838976,29.938273],[118.841163,29.939925],[118.848294,29.941261],[118.857921,29.938011],[118.863911,29.936978],[118.867239,29.939484],[118.868951,29.943904],[118.87197,29.946892],[118.876248,29.945736],[118.880337,29.942982],[118.883688,29.939429],[118.887634,29.939223],[118.893553,29.937598],[118.89467,29.938066],[118.894005,29.943106],[118.892365,29.9482],[118.893006,29.957081],[118.891533,29.959889],[118.893173,29.969291],[118.896453,29.975761],[118.898093,29.977495],[118.899472,29.981446],[118.897214,29.987116],[118.893197,29.990956],[118.892079,29.994796],[118.893981,29.997411],[118.895098,30.001195],[118.894028,30.006713],[118.889845,30.010593],[118.890344,30.012024],[118.897404,30.01673]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":330182,\"name\":\"建德市\",\"center\":[119.279089,29.472284],\"centroid\":[119.372981,29.48107],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":330100},\"subFeatureIndex\":12,\"acroutes\":[100000,330000,330100]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[119.765307,29.596402],[119.766829,29.589341],[119.765236,29.587572],[119.765616,29.584712],[119.768421,29.582459],[119.769182,29.579544],[119.766187,29.570906],[119.761647,29.566525],[119.764832,29.563111],[119.765521,29.560015],[119.76419,29.557334],[119.758842,29.556034],[119.756417,29.553726],[119.750665,29.550726],[119.747266,29.550588],[119.741109,29.551901],[119.730412,29.548197],[119.724803,29.545128],[119.72264,29.542764],[119.724755,29.538188],[119.731862,29.532962],[119.734311,29.528385],[119.744033,29.520781],[119.745602,29.518389],[119.744936,29.516425],[119.740348,29.513341],[119.735404,29.510935],[119.726894,29.511557],[119.727536,29.509442],[119.72554,29.506925],[119.718836,29.505293],[119.717862,29.502652],[119.718337,29.496691],[119.719549,29.491158],[119.718741,29.48853],[119.716673,29.486331],[119.712632,29.484132],[119.706785,29.472374],[119.708449,29.467725],[119.707118,29.464225],[119.709518,29.458885],[119.71344,29.456187],[119.715817,29.449005],[119.71344,29.445006],[119.710659,29.442266],[119.709518,29.439111],[119.710636,29.436122],[119.709637,29.434185],[119.70726,29.433216],[119.700509,29.433008],[119.697372,29.434116],[119.693663,29.438765],[119.691168,29.438779],[119.689836,29.433327],[119.690312,29.42685],[119.688909,29.421756],[119.683442,29.418628],[119.678973,29.41777],[119.676311,29.41921],[119.673387,29.425023],[119.67006,29.425424],[119.664402,29.424068],[119.6601,29.426891],[119.655488,29.425922],[119.649094,29.428344],[119.646741,29.43323],[119.644459,29.434102],[119.642486,29.432953],[119.638659,29.428275],[119.633596,29.423348],[119.626631,29.42022],[119.62492,29.41777],[119.625633,29.415293],[119.625538,29.410476],[119.617361,29.399733],[119.612155,29.394763],[119.607068,29.393877],[119.605547,29.392742],[119.606236,29.388076],[119.613866,29.383244],[119.617598,29.38035],[119.618573,29.378467],[119.619643,29.372956],[119.619381,29.371059],[119.616291,29.368261],[119.614057,29.368275],[119.608518,29.370242],[119.604596,29.369632],[119.597988,29.372928],[119.592925,29.377705],[119.589454,29.378702],[119.582085,29.379132],[119.578425,29.378121],[119.574598,29.372762],[119.565898,29.371183],[119.560573,29.372083],[119.55677,29.371585],[119.551469,29.36732],[119.545408,29.367361],[119.540915,29.369799],[119.538847,29.371931],[119.536042,29.37315],[119.529838,29.370546],[119.523872,29.36599],[119.525773,29.36347],[119.526605,29.360021],[119.52506,29.35516],[119.522707,29.350022],[119.512082,29.336724],[119.510418,29.333469],[119.501979,29.335879],[119.50003,29.335713],[119.492329,29.331059],[119.485364,29.332541],[119.480206,29.33297],[119.477543,29.335048],[119.47771,29.341586],[119.476022,29.345216],[119.471482,29.349025],[119.469652,29.349662],[119.464565,29.349177],[119.461427,29.350908],[119.459834,29.356656],[119.454819,29.365284],[119.457576,29.370366],[119.453369,29.378827],[119.451824,29.385598],[119.453607,29.389253],[119.451348,29.397283],[119.448876,29.400688],[119.443148,29.404565],[119.440676,29.408745],[119.441674,29.413036],[119.438798,29.415749],[119.439416,29.421424],[119.438964,29.423597],[119.437134,29.424123],[119.427768,29.422158],[119.428553,29.419057],[119.432332,29.415154],[119.426746,29.405548],[119.421255,29.404758],[119.415883,29.403],[119.410725,29.402557],[119.409204,29.400716],[119.405614,29.399927],[119.404758,29.400688],[119.404901,29.405326],[119.403974,29.407223],[119.399933,29.411237],[119.393515,29.411251],[119.391709,29.416884],[119.389783,29.425826],[119.388547,29.429715],[119.382129,29.43186],[119.378112,29.429798],[119.375283,29.424538],[119.372455,29.421037],[119.370814,29.417715],[119.368319,29.415708],[119.362162,29.416746],[119.360237,29.416289],[119.355578,29.410794],[119.353201,29.409866],[119.346378,29.408731],[119.343906,29.409008],[119.338392,29.411707],[119.334897,29.40815],[119.334042,29.405354],[119.331094,29.400356],[119.32779,29.396923],[119.328646,29.39342],[119.333875,29.390734],[119.336038,29.385847],[119.339105,29.384296],[119.340151,29.382358],[119.339295,29.379145],[119.340198,29.377304],[119.336466,29.372499],[119.335016,29.366987],[119.336704,29.363373],[119.332806,29.353748],[119.334303,29.348983],[119.340008,29.348581],[119.34557,29.342265],[119.348447,29.336253],[119.348233,29.333441],[119.344287,29.324395],[119.347092,29.322719],[119.348779,29.319504],[119.347282,29.317163],[119.340531,29.315389],[119.324201,29.30799],[119.323131,29.305011],[119.328646,29.299274],[119.329026,29.294383],[119.328337,29.292789],[119.32577,29.292248],[119.324177,29.295408],[119.322632,29.29617],[119.322608,29.290488],[119.323345,29.288146],[119.322727,29.284931],[119.318306,29.2799],[119.312672,29.278639],[119.305066,29.279332],[119.298648,29.279276],[119.292562,29.281799],[119.288117,29.280995],[119.286026,29.279332],[119.286216,29.275257],[119.288094,29.268839],[119.287167,29.267453],[119.282317,29.264944],[119.282056,29.26127],[119.278657,29.260646],[119.275781,29.258636],[119.273475,29.25377],[119.270646,29.251649],[119.260924,29.247809],[119.257644,29.247989],[119.249205,29.250193],[119.244237,29.250997],[119.238746,29.250152],[119.237772,29.25072],[119.239293,29.258913],[119.236298,29.26346],[119.234016,29.270682],[119.231544,29.273274],[119.228786,29.27437],[119.227099,29.276837],[119.229,29.282575],[119.228739,29.284183],[119.225031,29.285153],[119.219397,29.2827],[119.214833,29.283753],[119.208178,29.284404],[119.205111,29.288257],[119.200286,29.290391],[119.198836,29.286026],[119.200737,29.280524],[119.200999,29.275811],[119.204255,29.274771],[119.203328,29.272318],[119.200405,29.272152],[119.19779,29.26992],[119.192299,29.263571],[119.191515,29.261741],[119.192228,29.258456],[119.195484,29.256446],[119.198622,29.257985],[119.200904,29.257472],[119.204303,29.252356],[119.210293,29.248724],[119.214786,29.246935],[119.212195,29.246076],[119.211268,29.244426],[119.211648,29.235413],[119.210269,29.230657],[119.213645,29.225207],[119.211838,29.222905],[119.209033,29.222059],[119.204469,29.223557],[119.203233,29.228383],[119.201736,29.229367],[119.196102,29.227883],[119.194153,29.22927],[119.190825,29.22848],[119.189518,29.227093],[119.189779,29.223709],[119.193963,29.220145],[119.194938,29.216304],[119.189518,29.205194],[119.181032,29.206304],[119.177704,29.207233],[119.175826,29.211893],[119.168053,29.219022],[119.165652,29.219202],[119.160257,29.220991],[119.156453,29.223806],[119.15372,29.227024],[119.151771,29.227897],[119.145709,29.222974],[119.141525,29.223377],[119.138126,29.220242],[119.131542,29.221116],[119.130163,29.2226],[119.129117,29.227079],[119.132588,29.235441],[119.126455,29.237119],[119.123508,29.236716],[119.106393,29.227509],[119.10045,29.228313],[119.094222,29.228258],[119.091893,29.230546],[119.08519,29.230601],[119.082908,29.228826],[119.081981,29.22658],[119.07775,29.224222],[119.075658,29.223987],[119.068384,29.226455],[119.062941,29.226275],[119.055144,29.222239],[119.050033,29.221546],[119.045588,29.221823],[119.037126,29.217205],[119.030589,29.215069],[119.01307,29.212379],[119.003253,29.207691],[119.001851,29.208551],[118.998903,29.216345],[118.995742,29.21708],[118.993127,29.219244],[118.991867,29.221837],[118.987137,29.226053],[118.985711,29.229728],[118.98583,29.235344],[118.984831,29.239476],[118.988254,29.243552],[118.982597,29.249736],[118.981408,29.254325],[118.979245,29.258955],[118.977344,29.258775],[118.970189,29.264944],[118.966837,29.269352],[118.963295,29.267674],[118.959492,29.271403],[118.958565,29.273801],[118.954881,29.277918],[118.952337,29.278763],[118.949651,29.281743],[118.949176,29.283919],[118.951268,29.286275],[118.961893,29.290211],[118.963533,29.291999],[118.962083,29.29617],[118.952622,29.298554],[118.948035,29.301117],[118.944113,29.306286],[118.927069,29.310374],[118.923456,29.31478],[118.916753,29.31816],[118.911262,29.324409],[118.908362,29.325143],[118.905414,29.327374],[118.903917,29.330186],[118.900446,29.332652],[118.908219,29.336156],[118.91314,29.336627],[118.919391,29.341614],[118.923195,29.342196],[118.92909,29.341808],[118.936102,29.345673],[118.94214,29.348374],[118.946704,29.349759],[118.95576,29.353637],[118.9574,29.355756],[118.958375,29.360922],[118.959611,29.362985],[118.962368,29.363899],[118.967431,29.362431],[118.972209,29.364689],[118.976036,29.364813],[118.98148,29.359218],[118.984308,29.358872],[118.98621,29.360146],[118.990607,29.365436],[118.99453,29.368372],[119.003206,29.368289],[119.007556,29.367444],[119.01124,29.368428],[119.016874,29.372],[119.030518,29.376404],[119.034725,29.382787],[119.039717,29.385889],[119.044637,29.386595],[119.04806,29.389987],[119.050865,29.391482],[119.052767,29.394459],[119.055405,29.395497],[119.057236,29.398086],[119.057878,29.402045],[119.059328,29.405603],[119.061633,29.408122],[119.067196,29.412552],[119.070428,29.413825],[119.078154,29.414462],[119.083597,29.414116],[119.096504,29.416358],[119.098881,29.417673],[119.102281,29.423002],[119.102399,29.426213],[119.099595,29.431085],[119.101948,29.436468],[119.106583,29.440025],[119.110719,29.443982],[119.114784,29.44639],[119.11728,29.445588],[119.122248,29.445975],[119.126883,29.450334],[119.132255,29.448549],[119.138459,29.449393],[119.141335,29.447373],[119.146303,29.447829],[119.156192,29.450721],[119.159139,29.452202],[119.167316,29.453668],[119.172023,29.454927],[119.179083,29.453931],[119.185929,29.460434],[119.190897,29.462606],[119.192608,29.465581],[119.192941,29.470796],[119.191705,29.483703],[119.193559,29.49149],[119.198646,29.495211],[119.201546,29.501739],[119.205919,29.504989],[119.206656,29.508142],[119.20542,29.510382],[119.204042,29.516632],[119.202401,29.51991],[119.199929,29.52226],[119.199145,29.524846],[119.202092,29.527252],[119.206276,29.529063],[119.210388,29.529409],[119.215499,29.526464],[119.216878,29.524279],[119.223795,29.519965],[119.226552,29.516964],[119.2295,29.517877],[119.230997,29.51955],[119.2295,29.522246],[119.230569,29.523961],[119.241575,29.533045],[119.249562,29.535851],[119.265702,29.546704],[119.267675,29.548832],[119.26613,29.559324],[119.268222,29.561895],[119.274449,29.560969],[119.279441,29.56148],[119.282531,29.565544],[119.285954,29.568474],[119.284457,29.571625],[119.282626,29.572896],[119.278229,29.572896],[119.274996,29.569856],[119.264371,29.564825],[119.255837,29.564784],[119.254078,29.566152],[119.24602,29.567893],[119.243667,29.56951],[119.243072,29.575246],[119.241955,29.577706],[119.237582,29.581202],[119.234967,29.582086],[119.243025,29.590087],[119.247304,29.59759],[119.246971,29.599483],[119.248231,29.605617],[119.251249,29.610826],[119.248849,29.614887],[119.251654,29.61747],[119.252913,29.623314],[119.254292,29.626629],[119.257382,29.628866],[119.263824,29.630745],[119.267508,29.633093],[119.274853,29.636228],[119.276969,29.63812],[119.277777,29.640758],[119.286572,29.647401],[119.293085,29.65066],[119.299194,29.649113],[119.303259,29.649735],[119.305517,29.651392],[119.306706,29.654154],[119.30673,29.661776],[119.309035,29.668017],[119.314621,29.669453],[119.315548,29.670309],[119.31852,29.676964],[119.320588,29.6792],[119.321657,29.688422],[119.323297,29.693171],[119.329763,29.699769],[119.330619,29.702115],[119.332924,29.702791],[119.33504,29.701715],[119.336942,29.702336],[119.345642,29.711224],[119.34828,29.715116],[119.350015,29.719643],[119.352915,29.722334],[119.354508,29.725825],[119.354056,29.730185],[119.355768,29.73231],[119.358074,29.737968],[119.360332,29.741638],[119.36423,29.746397],[119.365823,29.750398],[119.370624,29.752688],[119.373857,29.754978],[119.373405,29.758758],[119.374142,29.760662],[119.380489,29.766993],[119.383579,29.770952],[119.388357,29.769628],[119.390924,29.764979],[119.391495,29.7624],[119.394323,29.759807],[119.392374,29.750357],[119.393563,29.748301],[119.398792,29.744328],[119.407088,29.7431],[119.411343,29.745266],[119.415431,29.750233],[119.417547,29.757048],[119.42261,29.758469],[119.425439,29.75582],[119.425938,29.753171],[119.434519,29.748384],[119.439867,29.742231],[119.44203,29.741651],[119.447094,29.743183],[119.451206,29.741555],[119.454938,29.741983],[119.458955,29.744935],[119.465753,29.741693],[119.472932,29.739361],[119.476379,29.733373],[119.478019,29.732338],[119.484556,29.731262],[119.492376,29.722334],[119.493802,29.721285],[119.50022,29.722679],[119.504879,29.722872],[119.50835,29.725273],[119.520187,29.728792],[119.522969,29.731013],[119.528269,29.733897],[119.531954,29.733925],[119.537064,29.736933],[119.540511,29.737319],[119.543696,29.746122],[119.544695,29.747432],[119.549472,29.749916],[119.560431,29.752316],[119.569131,29.751695],[119.571698,29.749847],[119.574099,29.745197],[119.577212,29.741569],[119.578306,29.738299],[119.581895,29.73111],[119.583726,29.729385],[119.59176,29.724818],[119.593448,29.723203],[119.596229,29.717352],[119.601815,29.716055],[119.603978,29.713419],[119.604144,29.708837],[119.602528,29.700859],[119.610895,29.695227],[119.610776,29.688229],[119.614128,29.684999],[119.612749,29.673029],[119.613581,29.669757],[119.616909,29.664648],[119.617479,29.662757],[119.616148,29.656805],[119.621972,29.65472],[119.62946,29.656239],[119.634689,29.653243],[119.636733,29.652939],[119.643579,29.653961],[119.64705,29.65229],[119.651043,29.651641],[119.658792,29.652013],[119.665305,29.653836],[119.667968,29.657316],[119.670844,29.657137],[119.674505,29.653809],[119.672104,29.648658],[119.670226,29.640979],[119.673031,29.636905],[119.676192,29.636325],[119.678593,29.634018],[119.679663,29.62685],[119.688363,29.62109],[119.693307,29.620965],[119.694876,29.619985],[119.695375,29.616034],[119.692998,29.602633],[119.695256,29.596719],[119.698322,29.593721],[119.701318,29.58959],[119.704075,29.587641],[119.708282,29.589673],[119.709376,29.595863],[119.715247,29.601804],[119.717315,29.608781],[119.718575,29.610439],[119.723899,29.610535],[119.728368,29.613506],[119.731126,29.613547],[119.742393,29.609195],[119.746434,29.606419],[119.750142,29.602978],[119.757843,29.598447],[119.762312,29.597811],[119.765307,29.596402]]]]}}]}', 'admin', '2020-12-07 18:37:35', NULL, '2020-12-07 18:37:35', '0', NULL); +INSERT INTO `jimu_report_map` VALUES ('1335907956524433409', '上海', 'shanghai', '{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"adcode\":310101,\"name\":\"黄浦区\",\"center\":[121.490317,31.222771],\"centroid\":[121.483572,31.215946],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":0,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.475987,31.187885],[121.474944,31.189886],[121.470356,31.191431],[121.469605,31.196404],[121.46745,31.203065],[121.466449,31.204395],[121.462264,31.203173],[121.461555,31.210194],[121.460707,31.213488],[121.457689,31.220196],[121.456758,31.223898],[121.467464,31.223862],[121.467658,31.225634],[121.466129,31.234917],[121.462973,31.241396],[121.469563,31.239216],[121.474847,31.24142],[121.47892,31.240294],[121.482994,31.241923],[121.485969,31.244091],[121.487805,31.244186],[121.494826,31.24221],[121.493491,31.240163],[121.493491,31.23615],[121.495744,31.232977],[121.502014,31.228018],[121.506741,31.223119],[121.509397,31.218459],[121.509911,31.214506],[121.508368,31.210158],[121.501319,31.199747],[121.498066,31.195601],[121.494631,31.192857],[121.490752,31.191467],[121.475987,31.187885]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310104,\"name\":\"徐汇区\",\"center\":[121.43752,31.179973],\"centroid\":[121.439404,31.162992],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":1,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.412572,31.19112],[121.419719,31.190796],[121.422027,31.192294],[121.421638,31.19535],[121.423793,31.197314],[121.433025,31.20128],[121.437933,31.203976],[121.435235,31.21114],[121.43746,31.211535],[121.439462,31.214482],[121.44697,31.215812],[121.452184,31.217429],[121.457689,31.220196],[121.460707,31.213488],[121.461555,31.210194],[121.462264,31.203173],[121.466449,31.204395],[121.46745,31.203065],[121.469605,31.196404],[121.470356,31.191431],[121.474944,31.189886],[121.475987,31.187885],[121.468729,31.184122],[121.466254,31.18109],[121.464905,31.178022],[121.464905,31.17541],[121.468159,31.167092],[121.469369,31.162298],[121.468354,31.158091],[121.46574,31.155118],[121.460387,31.150276],[121.457453,31.146451],[121.457453,31.142232],[121.462431,31.134463],[121.468729,31.127868],[121.469674,31.124859],[121.469299,31.118731],[121.465211,31.1121],[121.463237,31.108586],[121.462862,31.101954],[121.455423,31.100755],[121.452629,31.101234],[121.451878,31.103849],[121.446275,31.105744],[121.447623,31.107423],[121.452364,31.108586],[121.450154,31.112819],[121.450807,31.115398],[121.446706,31.114282],[121.445788,31.114954],[121.441547,31.112568],[121.438002,31.1121],[121.435736,31.113539],[121.438836,31.119103],[121.43853,31.121729],[121.436445,31.129043],[121.421526,31.127137],[121.418398,31.131669],[121.41381,31.13728],[121.411293,31.14174],[121.404953,31.156689],[121.400977,31.155214],[121.401449,31.153776],[121.396931,31.152685],[121.395874,31.15585],[121.401867,31.157528],[121.404578,31.157588],[121.402645,31.162226],[121.394567,31.159601],[121.391508,31.168686],[121.394053,31.169489],[121.39269,31.173085],[121.395415,31.174595],[121.394442,31.177879],[121.398071,31.178226],[121.398349,31.179904],[121.400101,31.178813],[121.41146,31.182037],[121.415158,31.183391],[121.415256,31.187357],[121.41356,31.18683],[121.412572,31.19112]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310105,\"name\":\"长宁区\",\"center\":[121.4222,31.218123],\"centroid\":[121.380949,31.20737],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":2,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.439462,31.214482],[121.43746,31.211535],[121.435235,31.21114],[121.437933,31.203976],[121.433025,31.20128],[121.423793,31.197314],[121.421638,31.19535],[121.422027,31.192294],[121.419719,31.190796],[121.412572,31.19112],[121.391425,31.191911],[121.38001,31.190065],[121.365954,31.185572],[121.360253,31.185296],[121.358321,31.186015],[121.356958,31.182768],[121.353301,31.181629],[121.351424,31.183499],[121.341414,31.179436],[121.338341,31.180108],[121.331806,31.189622],[121.338049,31.192618],[121.33734,31.195817],[121.338925,31.196644],[121.338438,31.20666],[121.338508,31.212182],[121.339996,31.212278],[121.33937,31.216615],[121.342457,31.217789],[121.343096,31.223071],[121.345627,31.223526],[121.340997,31.224269],[121.341581,31.226293],[121.345362,31.227886],[121.345376,31.23039],[121.343513,31.234306],[121.338355,31.237528],[121.340872,31.239947],[121.345585,31.239887],[121.344612,31.243552],[121.346822,31.241037],[121.347281,31.243192],[121.348922,31.243863],[121.350131,31.241839],[121.348741,31.239372],[121.352856,31.238342],[121.354177,31.237121],[121.359071,31.229827],[121.362102,31.22597],[121.366065,31.226006],[121.366691,31.224065],[121.371404,31.222508],[121.373197,31.220089],[121.37691,31.220687],[121.388658,31.218639],[121.399712,31.218711],[121.400462,31.220807],[121.403799,31.22058],[121.408707,31.222364],[121.414157,31.223359],[121.415965,31.224473],[121.414853,31.228054],[121.415617,31.228581],[121.419941,31.225191],[121.423334,31.228114],[121.427519,31.229288],[121.427713,31.224221],[121.429034,31.223095],[121.434304,31.225886],[121.435416,31.225071],[121.436167,31.220675],[121.439462,31.214482]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310106,\"name\":\"静安区\",\"center\":[121.448224,31.229003],\"centroid\":[121.450659,31.270821],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":3,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.482994,31.241923],[121.47892,31.240294],[121.474847,31.24142],[121.469563,31.239216],[121.462973,31.241396],[121.466129,31.234917],[121.467658,31.225634],[121.467464,31.223862],[121.456758,31.223898],[121.457689,31.220196],[121.452184,31.217429],[121.44697,31.215812],[121.439462,31.214482],[121.436167,31.220675],[121.435416,31.225071],[121.434304,31.225886],[121.429034,31.223095],[121.427713,31.224221],[121.427519,31.229288],[121.427908,31.231144],[121.431009,31.235108],[121.435166,31.235252],[121.445774,31.241348],[121.449987,31.2433],[121.448318,31.245216],[121.450404,31.247743],[121.451461,31.251994],[121.44932,31.252928],[121.451044,31.256269],[121.442952,31.267117],[121.437098,31.269439],[121.432413,31.271942],[121.429841,31.274923],[121.425252,31.270661],[121.424571,31.27193],[121.424432,31.280238],[121.422833,31.28426],[121.423806,31.291011],[121.419691,31.291071],[121.418648,31.292256],[121.420039,31.296912],[121.42364,31.297259],[121.426935,31.298528],[121.426434,31.303207],[121.431287,31.303638],[121.432441,31.305912],[121.431676,31.309478],[121.432163,31.31168],[121.434623,31.312303],[121.432468,31.318669],[121.433595,31.32087],[121.436459,31.32087],[121.436765,31.319662],[121.44672,31.319817],[121.447887,31.317101],[121.4547,31.319243],[121.457133,31.321002],[121.465378,31.321397],[121.468145,31.32032],[121.468312,31.316036],[121.467672,31.306307],[121.463529,31.306008],[121.46453,31.297989],[121.462445,31.292747],[121.460081,31.289778],[121.461805,31.284691],[121.461457,31.278921],[121.462834,31.275389],[121.464627,31.274396],[121.469605,31.267799],[121.474124,31.263453],[121.480491,31.258568],[121.480589,31.255239],[121.479629,31.253383],[121.481673,31.250689],[121.479588,31.249815],[121.481228,31.247959],[121.482994,31.241923]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310107,\"name\":\"普陀区\",\"center\":[121.392499,31.241701],\"centroid\":[121.392058,31.257885],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":4,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.354177,31.237121],[121.356054,31.237803],[121.356068,31.240151],[121.360086,31.240498],[121.36067,31.238642],[121.363117,31.240091],[121.366718,31.246342],[121.368387,31.247384],[121.372349,31.243755],[121.3731,31.245683],[121.375686,31.244486],[121.377216,31.247719],[121.380886,31.257766],[121.377508,31.259478],[121.375158,31.25949],[121.374574,31.257059],[121.365884,31.257682],[121.366023,31.259358],[121.361783,31.259945],[121.358918,31.263609],[121.35985,31.266997],[121.362227,31.26756],[121.366996,31.266662],[121.367441,31.269631],[121.361268,31.27084],[121.358918,31.268793],[121.35732,31.271415],[121.344723,31.273917],[121.343541,31.271439],[121.338272,31.272839],[121.338883,31.275006],[121.336228,31.275461],[121.336061,31.280046],[121.335004,31.279711],[121.332738,31.286067],[121.328998,31.284595],[121.327316,31.285182],[121.326384,31.288928],[121.33353,31.291107],[121.332891,31.292998],[121.336506,31.294901],[121.338675,31.293225],[121.341011,31.293716],[121.340927,31.297439],[121.34685,31.297654],[121.346892,31.296349],[121.349659,31.297582],[121.348894,31.299246],[121.352954,31.301663],[121.354803,31.299808],[121.360309,31.302717],[121.363534,31.302741],[121.360295,31.294674],[121.358585,31.293465],[121.363785,31.292028],[121.363785,31.291334],[121.369666,31.28912],[121.370153,31.290329],[121.374838,31.289096],[121.376242,31.290592],[121.38154,31.289431],[121.381623,31.292711],[121.384765,31.294446],[121.388394,31.29526],[121.394762,31.294674],[121.393483,31.291274],[121.39789,31.29052],[121.399559,31.288904],[121.398446,31.287145],[121.400379,31.286115],[121.404453,31.286223],[121.400087,31.278071],[121.404564,31.276227],[121.406496,31.276862],[121.40544,31.273067],[121.41096,31.273175],[121.410598,31.270373],[121.41527,31.26914],[121.41577,31.265896],[121.419496,31.265237],[121.425252,31.270661],[121.429841,31.274923],[121.432413,31.271942],[121.437098,31.269439],[121.442952,31.267117],[121.451044,31.256269],[121.44932,31.252928],[121.451461,31.251994],[121.450404,31.247743],[121.448318,31.245216],[121.449987,31.2433],[121.445774,31.241348],[121.435166,31.235252],[121.431009,31.235108],[121.427908,31.231144],[121.427519,31.229288],[121.423334,31.228114],[121.419941,31.225191],[121.415617,31.228581],[121.414853,31.228054],[121.415965,31.224473],[121.414157,31.223359],[121.408707,31.222364],[121.403799,31.22058],[121.400462,31.220807],[121.399712,31.218711],[121.388658,31.218639],[121.37691,31.220687],[121.373197,31.220089],[121.371404,31.222508],[121.366691,31.224065],[121.366065,31.226006],[121.362102,31.22597],[121.359071,31.229827],[121.354177,31.237121]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310109,\"name\":\"虹口区\",\"center\":[121.491832,31.26097],\"centroid\":[121.485443,31.276649],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":5,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.485413,31.311573],[121.485664,31.303483],[121.490168,31.292603],[121.493644,31.293884],[121.500652,31.295488],[121.502709,31.289658],[121.498149,31.286259],[121.496049,31.282991],[121.496564,31.276407],[121.499915,31.275904],[121.506505,31.270589],[121.50631,31.266746],[121.508479,31.262639],[121.514569,31.256317],[121.517642,31.251862],[121.516001,31.251599],[121.516488,31.246953],[121.50688,31.246474],[121.500012,31.244989],[121.494826,31.24221],[121.487805,31.244186],[121.485969,31.244091],[121.482994,31.241923],[121.481228,31.247959],[121.479588,31.249815],[121.481673,31.250689],[121.479629,31.253383],[121.480589,31.255239],[121.480491,31.258568],[121.474124,31.263453],[121.469605,31.267799],[121.464627,31.274396],[121.462834,31.275389],[121.461457,31.278921],[121.461805,31.284691],[121.460081,31.289778],[121.462445,31.292747],[121.46453,31.297989],[121.463529,31.306008],[121.467672,31.306307],[121.468312,31.316036],[121.472956,31.315797],[121.479171,31.314696],[121.485372,31.314636],[121.485413,31.311573]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310110,\"name\":\"杨浦区\",\"center\":[121.522797,31.270755],\"centroid\":[121.529302,31.29835],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":6,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.516488,31.246953],[121.516001,31.251599],[121.517642,31.251862],[121.514569,31.256317],[121.508479,31.262639],[121.50631,31.266746],[121.506505,31.270589],[121.499915,31.275904],[121.496564,31.276407],[121.496049,31.282991],[121.498149,31.286259],[121.502709,31.289658],[121.500652,31.295488],[121.493644,31.293884],[121.490168,31.292603],[121.485664,31.303483],[121.485413,31.311573],[121.496717,31.311489],[121.496216,31.323347],[121.498928,31.325322],[121.497593,31.328109],[121.493575,31.330299],[121.50556,31.345732],[121.517628,31.340779],[121.520256,31.344033],[121.522883,31.342885],[121.525483,31.346797],[121.549398,31.337789],[121.555779,31.333948],[121.558574,31.331256],[121.560493,31.32781],[121.561883,31.321158],[121.561758,31.303339],[121.562523,31.29976],[121.565456,31.294135],[121.569141,31.285254],[121.56953,31.279567],[121.568515,31.275701],[121.563537,31.268805],[121.559074,31.264219],[121.541542,31.251826],[121.536384,31.249623],[121.527555,31.247252],[121.516488,31.246953]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310112,\"name\":\"闵行区\",\"center\":[121.375972,31.111658],\"centroid\":[121.418901,31.087213],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":7,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.35871,30.97786],[121.351258,30.975986],[121.34375,30.976599],[121.334406,30.980694],[121.329554,30.981318],[121.327371,30.980658],[121.3258,30.9833],[121.326898,30.989964],[121.326773,30.994479],[121.327482,30.995896],[121.330347,30.996905],[121.33823,31.006197],[121.339829,31.010267],[121.34425,31.013941],[121.34279,31.014817],[121.339898,31.013857],[121.333072,31.01334],[121.333725,31.015657],[121.333892,31.026917],[121.333308,31.030686],[121.334017,31.031922],[121.33367,31.040695],[121.335102,31.04564],[121.335338,31.060435],[121.341456,31.062763],[121.343444,31.059139],[121.35344,31.061287],[121.358195,31.064047],[121.357278,31.066758],[121.363743,31.068354],[121.364424,31.069878],[121.362116,31.072601],[121.364341,31.073705],[121.365481,31.077892],[121.368804,31.079127],[121.370625,31.078372],[121.372016,31.079871],[121.368289,31.088976],[121.362756,31.099771],[121.359085,31.098931],[121.35839,31.100791],[121.351341,31.099255],[121.348532,31.106655],[121.351675,31.107735],[121.352217,31.106487],[121.357014,31.110529],[121.356026,31.112532],[121.353774,31.111512],[121.35066,31.115554],[121.353065,31.117604],[121.349589,31.117748],[121.346753,31.121657],[121.347545,31.121969],[121.34489,31.12577],[121.346002,31.126202],[121.344014,31.129451],[121.344681,31.130338],[121.342095,31.134655],[121.33677,31.138971],[121.338814,31.14017],[121.336728,31.14355],[121.335477,31.143862],[121.333711,31.148765],[121.331292,31.149772],[121.331528,31.15205],[121.328775,31.156665],[121.327218,31.156856],[121.323854,31.162933],[121.318584,31.170256],[121.318042,31.173624],[121.316304,31.176836],[121.310784,31.18423],[121.30856,31.188388],[121.300565,31.197027],[121.297506,31.201412],[121.294837,31.203077],[121.292431,31.202514],[121.292126,31.200621],[121.287329,31.196332],[121.284034,31.194391],[121.277388,31.193576],[121.271701,31.198309],[121.266724,31.203257],[121.264777,31.203317],[121.263053,31.205701],[121.26468,31.206731],[121.263846,31.208912],[121.259397,31.212769],[121.261218,31.215081],[121.259675,31.218148],[121.25745,31.220208],[121.258215,31.222772],[121.256588,31.226329],[121.258006,31.226868],[121.257158,31.230701],[121.254155,31.23312],[121.252792,31.236965],[121.251082,31.238198],[121.249692,31.236534],[121.247912,31.240917],[121.241391,31.240222],[121.239932,31.241061],[121.241683,31.247348],[121.24591,31.248821],[121.247314,31.253287],[121.254183,31.258688],[121.254405,31.259634],[121.260217,31.258328],[121.263985,31.259155],[121.264444,31.256496],[121.271284,31.252258],[121.275302,31.253527],[121.280363,31.251886],[121.284228,31.251838],[121.28142,31.248174],[121.283742,31.245192],[121.287301,31.243276],[121.288538,31.238198],[121.29264,31.232761],[121.296922,31.231048],[121.302998,31.230605],[121.315386,31.227204],[121.322853,31.229623],[121.32612,31.229575],[121.333878,31.232006],[121.334935,31.235887],[121.338355,31.237528],[121.343513,31.234306],[121.345376,31.23039],[121.345362,31.227886],[121.341581,31.226293],[121.340997,31.224269],[121.345627,31.223526],[121.343096,31.223071],[121.342457,31.217789],[121.33937,31.216615],[121.339996,31.212278],[121.338508,31.212182],[121.338438,31.20666],[121.338925,31.196644],[121.33734,31.195817],[121.338049,31.192618],[121.331806,31.189622],[121.338341,31.180108],[121.341414,31.179436],[121.351424,31.183499],[121.353301,31.181629],[121.356958,31.182768],[121.358321,31.186015],[121.360253,31.185296],[121.365954,31.185572],[121.38001,31.190065],[121.391425,31.191911],[121.412572,31.19112],[121.41356,31.18683],[121.415256,31.187357],[121.415158,31.183391],[121.41146,31.182037],[121.400101,31.178813],[121.398349,31.179904],[121.398071,31.178226],[121.394442,31.177879],[121.395415,31.174595],[121.39269,31.173085],[121.394053,31.169489],[121.391508,31.168686],[121.394567,31.159601],[121.402645,31.162226],[121.404578,31.157588],[121.401867,31.157528],[121.395874,31.15585],[121.396931,31.152685],[121.401449,31.153776],[121.400977,31.155214],[121.404953,31.156689],[121.411293,31.14174],[121.41381,31.13728],[121.418398,31.131669],[121.421526,31.127137],[121.436445,31.129043],[121.43853,31.121729],[121.438836,31.119103],[121.435736,31.113539],[121.438002,31.1121],[121.441547,31.112568],[121.445788,31.114954],[121.446706,31.114282],[121.450807,31.115398],[121.450154,31.112819],[121.452364,31.108586],[121.447623,31.107423],[121.446275,31.105744],[121.451878,31.103849],[121.452629,31.101234],[121.455423,31.100755],[121.462862,31.101954],[121.463237,31.108586],[121.465211,31.1121],[121.470286,31.110937],[121.473984,31.112915],[121.474137,31.114354],[121.477321,31.110853],[121.481353,31.110697],[121.477446,31.117328],[121.481256,31.118024],[121.48191,31.120086],[121.485705,31.121933],[121.485969,31.124523],[121.490266,31.124283],[121.49281,31.118719],[121.498538,31.121501],[121.501583,31.114666],[121.505295,31.115494],[121.503863,31.118324],[121.50549,31.120002],[121.511343,31.12119],[121.513749,31.118012],[121.514513,31.115278],[121.521424,31.116309],[121.522869,31.115242],[121.525289,31.116741],[121.53142,31.11842],[121.532254,31.117208],[121.535341,31.117976],[121.537885,31.113983],[121.539526,31.115626],[121.542251,31.116153],[121.544225,31.111464],[121.547687,31.109653],[121.550426,31.11162],[121.549217,31.113419],[121.552317,31.113899],[121.553332,31.112688],[121.555279,31.114882],[121.556697,31.113083],[121.559867,31.111896],[121.557851,31.109797],[121.561396,31.106224],[121.561132,31.105264],[121.563649,31.101858],[121.562064,31.101258],[121.563315,31.098955],[121.566819,31.096569],[121.567264,31.09363],[121.564358,31.091891],[121.561855,31.091867],[121.561563,31.09357],[121.559088,31.091951],[121.551608,31.090128],[121.551539,31.088148],[121.548549,31.086889],[121.550565,31.082834],[121.553555,31.080303],[121.556405,31.081059],[121.557031,31.082702],[121.561563,31.08365],[121.563579,31.082486],[121.569766,31.081611],[121.571643,31.080063],[121.572658,31.081323],[121.575272,31.080063],[121.567639,31.0762],[121.56262,31.075121],[121.562675,31.074305],[121.557531,31.073357],[121.559033,31.072169],[121.555599,31.071689],[121.55279,31.069506],[121.556753,31.06737],[121.551789,31.065643],[121.551094,31.063795],[121.548549,31.063639],[121.547201,31.061647],[121.548383,31.056896],[121.543308,31.055696],[121.54328,31.054016],[121.540791,31.052528],[121.542307,31.049072],[121.541472,31.046396],[121.54588,31.047044],[121.547799,31.048544],[121.54955,31.047908],[121.550538,31.049396],[121.552693,31.0493],[121.554737,31.050824],[121.556127,31.047632],[121.557031,31.04798],[121.559811,31.044812],[121.562119,31.043635],[121.559464,31.041391],[121.559505,31.030278],[121.558254,31.029533],[121.558407,31.024528],[121.555765,31.022908],[121.552804,31.023268],[121.552262,31.020915],[121.554139,31.01861],[121.556516,31.01873],[121.556474,31.020255],[121.558699,31.020255],[121.56027,31.024132],[121.564302,31.021191],[121.569057,31.024396],[121.56839,31.025284],[121.572325,31.026677],[121.574758,31.020951],[121.574674,31.018634],[121.571018,31.016426],[121.569822,31.012452],[121.565859,31.011912],[121.568181,31.010063],[121.569725,31.010603],[121.571463,31.005633],[121.570253,31.004565],[121.570712,31.002295],[121.567959,31.000879],[121.570475,30.998345],[121.561494,30.995644],[121.555918,30.995152],[121.556224,30.993374],[121.553304,30.993026],[121.55279,30.98886],[121.549537,30.988307],[121.54613,30.99305],[121.543294,30.994203],[121.538233,30.993146],[121.537774,30.994683],[121.534507,30.995848],[121.531962,30.994815],[121.528612,30.99592],[121.522897,30.99981],[121.520325,30.999354],[121.520089,31.00256],[121.522105,31.002199],[121.520853,31.004445],[121.517002,31.007626],[121.510412,31.004553],[121.507881,31.004745],[121.503057,31.002716],[121.49883,30.999426],[121.498872,30.998213],[121.495924,30.998297],[121.491948,31.010039],[121.492879,31.012752],[121.489153,31.014949],[121.485872,31.014073],[121.476362,31.01334],[121.47144,31.011948],[121.465587,31.008755],[121.459942,31.007398],[121.448305,31.007458],[121.440811,31.005789],[121.436834,31.00406],[121.433636,31.001779],[121.431426,30.999174],[121.423973,30.994515],[121.413184,30.991069],[121.409333,30.990229],[121.394261,30.988247],[121.375227,30.982832],[121.35871,30.97786]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310113,\"name\":\"宝山区\",\"center\":[121.489934,31.398896],\"centroid\":[121.404861,31.392111],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":8,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.425252,31.270661],[121.419496,31.265237],[121.41577,31.265896],[121.41527,31.26914],[121.410598,31.270373],[121.41096,31.273175],[121.40544,31.273067],[121.406496,31.276862],[121.404564,31.276227],[121.400087,31.278071],[121.404453,31.286223],[121.400379,31.286115],[121.398446,31.287145],[121.399559,31.288904],[121.39789,31.29052],[121.393483,31.291274],[121.394762,31.294674],[121.388394,31.29526],[121.384765,31.294446],[121.381623,31.292711],[121.38154,31.289431],[121.376242,31.290592],[121.374838,31.289096],[121.370153,31.290329],[121.369666,31.28912],[121.363785,31.291334],[121.363785,31.292028],[121.358585,31.293465],[121.360295,31.294674],[121.363534,31.302741],[121.360309,31.302717],[121.354803,31.299808],[121.352954,31.301663],[121.348894,31.299246],[121.349659,31.297582],[121.346892,31.296349],[121.34685,31.297654],[121.340927,31.297439],[121.341011,31.293716],[121.338675,31.293225],[121.336506,31.294901],[121.33588,31.297044],[121.334198,31.296122],[121.331306,31.301436],[121.335686,31.303339],[121.338981,31.310101],[121.340357,31.311525],[121.343458,31.317185],[121.347698,31.316706],[121.347782,31.319542],[121.3492,31.321313],[121.345585,31.320835],[121.344848,31.323335],[121.347517,31.324077],[121.345932,31.32513],[121.342318,31.331005],[121.341692,31.33329],[121.342846,31.336066],[121.34628,31.336329],[121.344347,31.341928],[121.342401,31.341306],[121.338925,31.344775],[121.337521,31.344536],[121.336464,31.346821],[121.332502,31.347084],[121.332251,31.351307],[121.334643,31.3509],[121.337743,31.3534],[121.337118,31.356019],[121.341428,31.357802],[121.340329,31.360517],[121.338911,31.360995],[121.337576,31.364189],[121.335018,31.366963],[121.335991,31.370097],[121.333336,31.371281],[121.334003,31.37262],[121.331389,31.37433],[121.328734,31.377344],[121.331306,31.378456],[121.330527,31.381135],[121.326607,31.381063],[121.323061,31.388489],[121.320419,31.389123],[121.323339,31.393331],[121.323145,31.395866],[121.321476,31.397576],[121.317444,31.39742],[121.314747,31.398365],[121.315637,31.402729],[121.317375,31.403661],[121.314316,31.4072],[121.32847,31.411958],[121.330444,31.410308],[121.333141,31.410739],[121.332488,31.413117],[121.334101,31.413655],[121.33239,31.416943],[121.336561,31.419058],[121.336422,31.424999],[121.335143,31.429158],[121.336645,31.429493],[121.336603,31.432254],[121.333656,31.440118],[121.331236,31.439652],[121.328261,31.441098],[121.326106,31.448041],[121.327399,31.448829],[121.324132,31.455007],[121.319794,31.454876],[121.318654,31.456895],[121.320531,31.457289],[121.317778,31.460109],[121.317277,31.466262],[121.320058,31.466728],[121.320572,31.469058],[121.317958,31.468472],[121.31426,31.472474],[121.318807,31.475055],[121.315956,31.481219],[121.313342,31.480598],[121.310214,31.487311],[121.308629,31.488649],[121.31027,31.489735],[121.309171,31.492495],[121.306544,31.493307],[121.304667,31.495779],[121.300857,31.496747],[121.299926,31.499756],[121.302595,31.502599],[121.305876,31.503435],[121.305529,31.505333],[121.310353,31.505919],[121.311938,31.502909],[121.315345,31.501273],[121.316652,31.505775],[121.320169,31.505883],[121.321879,31.503399],[121.32003,31.502993],[121.319905,31.49972],[121.323701,31.499649],[121.323131,31.502288],[121.327218,31.504247],[121.329512,31.504247],[121.335838,31.508295],[121.343499,31.512057],[121.357751,31.508259],[121.362255,31.50679],[121.376298,31.501106],[121.405426,31.487215],[121.406288,31.485388],[121.403966,31.481494],[121.404328,31.479212],[121.409694,31.476321],[121.41869,31.470682],[121.434276,31.458496],[121.446024,31.450717],[121.463696,31.438277],[121.481339,31.427294],[121.49427,31.417851],[121.505991,31.407021],[121.507228,31.409722],[121.501319,31.411982],[121.502362,31.413404],[121.510801,31.409973],[121.517239,31.406303],[121.516585,31.405287],[121.509425,31.408288],[121.507353,31.405933],[121.521229,31.39479],[121.512372,31.385858],[121.507284,31.379102],[121.503835,31.373744],[121.50346,31.369403],[121.503835,31.36493],[121.508424,31.357251],[121.514903,31.352],[121.525483,31.346797],[121.522883,31.342885],[121.520256,31.344033],[121.517628,31.340779],[121.50556,31.345732],[121.493575,31.330299],[121.497593,31.328109],[121.498928,31.325322],[121.496216,31.323347],[121.496717,31.311489],[121.485413,31.311573],[121.485372,31.314636],[121.479171,31.314696],[121.472956,31.315797],[121.468312,31.316036],[121.468145,31.32032],[121.465378,31.321397],[121.457133,31.321002],[121.4547,31.319243],[121.447887,31.317101],[121.44672,31.319817],[121.436765,31.319662],[121.436459,31.32087],[121.433595,31.32087],[121.432468,31.318669],[121.434623,31.312303],[121.432163,31.31168],[121.431676,31.309478],[121.432441,31.305912],[121.431287,31.303638],[121.426434,31.303207],[121.426935,31.298528],[121.42364,31.297259],[121.420039,31.296912],[121.418648,31.292256],[121.419691,31.291071],[121.423806,31.291011],[121.422833,31.28426],[121.424432,31.280238],[121.424571,31.27193],[121.425252,31.270661]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310114,\"name\":\"嘉定区\",\"center\":[121.250333,31.383524],\"centroid\":[121.244394,31.358136],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":9,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.336506,31.294901],[121.332891,31.292998],[121.33353,31.291107],[121.326384,31.288928],[121.327316,31.285182],[121.328998,31.284595],[121.332738,31.286067],[121.335004,31.279711],[121.336061,31.280046],[121.336228,31.275461],[121.338883,31.275006],[121.338272,31.272839],[121.343541,31.271439],[121.344723,31.273917],[121.35732,31.271415],[121.358918,31.268793],[121.361268,31.27084],[121.367441,31.269631],[121.366996,31.266662],[121.362227,31.26756],[121.35985,31.266997],[121.358918,31.263609],[121.361783,31.259945],[121.366023,31.259358],[121.365884,31.257682],[121.374574,31.257059],[121.375158,31.25949],[121.377508,31.259478],[121.380886,31.257766],[121.377216,31.247719],[121.375686,31.244486],[121.3731,31.245683],[121.372349,31.243755],[121.368387,31.247384],[121.366718,31.246342],[121.363117,31.240091],[121.36067,31.238642],[121.360086,31.240498],[121.356068,31.240151],[121.356054,31.237803],[121.354177,31.237121],[121.352856,31.238342],[121.348741,31.239372],[121.350131,31.241839],[121.348922,31.243863],[121.347281,31.243192],[121.346822,31.241037],[121.344612,31.243552],[121.345585,31.239887],[121.340872,31.239947],[121.338355,31.237528],[121.334935,31.235887],[121.333878,31.232006],[121.32612,31.229575],[121.322853,31.229623],[121.315386,31.227204],[121.302998,31.230605],[121.296922,31.231048],[121.29264,31.232761],[121.288538,31.238198],[121.287301,31.243276],[121.283742,31.245192],[121.28142,31.248174],[121.284228,31.251838],[121.280363,31.251886],[121.275302,31.253527],[121.271284,31.252258],[121.264444,31.256496],[121.263985,31.259155],[121.260217,31.258328],[121.254405,31.259634],[121.254183,31.258688],[121.246758,31.258448],[121.246577,31.259801],[121.242253,31.25937],[121.237693,31.262088],[121.235177,31.262699],[121.229087,31.262711],[121.229198,31.261717],[121.223539,31.260532],[121.223859,31.259035],[121.220216,31.257406],[121.221273,31.256293],[121.214182,31.254353],[121.212625,31.259837],[121.209761,31.260831],[121.209816,31.258017],[121.208482,31.25749],[121.206368,31.260065],[121.202865,31.257131],[121.203143,31.255814],[121.199848,31.255239],[121.19608,31.253395],[121.19626,31.251228],[121.193368,31.251455],[121.193021,31.253623],[121.188377,31.25476],[121.186444,31.252329],[121.183928,31.252246],[121.181537,31.254413],[121.17934,31.253419],[121.178798,31.255862],[121.176768,31.254605],[121.174251,31.256856],[121.171415,31.254928],[121.16894,31.256197],[121.170386,31.259119],[121.168036,31.259622],[121.167661,31.263944],[121.162614,31.269176],[121.161057,31.26762],[121.157845,31.270541],[121.155537,31.266147],[121.151783,31.267632],[121.153924,31.272061],[121.153743,31.276646],[121.155481,31.278442],[121.155537,31.280765],[121.159402,31.281579],[121.161293,31.283985],[121.159305,31.28766],[121.156399,31.287408],[121.154967,31.290209],[121.153145,31.28997],[121.151282,31.291933],[121.152714,31.294075],[121.148933,31.298875],[121.150782,31.299018],[121.146903,31.305936],[121.143774,31.309706],[121.13895,31.305625],[121.139645,31.302992],[121.133778,31.30207],[121.129954,31.302597],[121.129134,31.307528],[121.129773,31.308306],[121.127966,31.311884],[121.128633,31.314265],[121.127076,31.316934],[121.127257,31.319315],[121.131637,31.32324],[121.131539,31.325441],[121.133305,31.325585],[121.132582,31.331962],[121.13115,31.332106],[121.130121,31.334702],[121.130816,31.341509],[121.130441,31.344213],[121.123948,31.342753],[121.117969,31.343447],[121.11733,31.34712],[121.120194,31.347562],[121.117246,31.351689],[121.111838,31.350517],[121.111157,31.351534],[121.10832,31.350649],[121.108418,31.354034],[121.107361,31.354763],[121.108251,31.360457],[121.106749,31.364535],[121.106958,31.366593],[121.10889,31.366509],[121.10928,31.364703],[121.112853,31.365133],[121.113173,31.36688],[121.120208,31.368674],[121.119082,31.370563],[121.11523,31.371137],[121.113757,31.37445],[121.118206,31.375837],[121.12328,31.37848],[121.124268,31.376722],[121.131247,31.379664],[121.131762,31.378815],[121.138408,31.381147],[121.137518,31.382785],[121.141049,31.384531],[121.141425,31.38355],[121.148432,31.385404],[121.148988,31.38691],[121.147097,31.3899],[121.14383,31.392327],[121.149475,31.394503],[121.147653,31.397325],[121.152742,31.398174],[121.149586,31.399381],[121.15049,31.402215],[121.153896,31.403685],[121.153104,31.405837],[121.157887,31.407893],[121.15886,31.410117],[121.154508,31.411575],[121.155523,31.413835],[121.153493,31.413679],[121.148905,31.415867],[121.149266,31.41913],[121.146208,31.419704],[121.146249,31.421078],[121.151157,31.421796],[121.155273,31.42574],[121.161362,31.425776],[121.162002,31.427951],[121.16431,31.427222],[121.16253,31.429565],[121.162711,31.432218],[121.158484,31.432254],[121.152492,31.433604],[121.14782,31.436186],[121.146569,31.439006],[121.147348,31.44393],[121.160917,31.449678],[121.163045,31.448865],[121.166048,31.450168],[121.16773,31.448315],[121.16983,31.450024],[121.174974,31.449295],[121.180814,31.451458],[121.186055,31.454362],[121.185457,31.457468],[121.186055,31.460814],[121.195051,31.467827],[121.202906,31.469356],[121.203421,31.472331],[121.206368,31.474995],[121.214377,31.479128],[121.21503,31.477528],[121.21364,31.475939],[121.219062,31.475222],[121.220731,31.47607],[121.225361,31.476022],[121.226209,31.477683],[121.230352,31.477432],[121.230839,31.481111],[121.22867,31.482127],[121.232994,31.487896],[121.235413,31.488099],[121.234746,31.492686],[121.237234,31.491957],[121.240877,31.493701],[121.241141,31.490906],[121.243797,31.487311],[121.244409,31.481183],[121.248176,31.481876],[121.245813,31.479881],[121.247064,31.477062],[121.249692,31.477623],[121.251221,31.479606],[121.253362,31.479809],[121.253627,31.483082],[121.255643,31.483632],[121.254794,31.477635],[121.261454,31.478854],[121.261732,31.480777],[121.265153,31.48313],[121.267433,31.483357],[121.267322,31.486224],[121.268879,31.487466],[121.272049,31.484337],[121.27622,31.485376],[121.276442,31.486654],[121.280321,31.488672],[121.279696,31.490404],[121.283686,31.489795],[121.285355,31.490679],[121.289387,31.489031],[121.29061,31.491694],[121.293488,31.489807],[121.298605,31.491515],[121.298563,31.493713],[121.300496,31.494537],[121.300857,31.496747],[121.304667,31.495779],[121.306544,31.493307],[121.309171,31.492495],[121.31027,31.489735],[121.308629,31.488649],[121.310214,31.487311],[121.313342,31.480598],[121.315956,31.481219],[121.318807,31.475055],[121.31426,31.472474],[121.317958,31.468472],[121.320572,31.469058],[121.320058,31.466728],[121.317277,31.466262],[121.317778,31.460109],[121.320531,31.457289],[121.318654,31.456895],[121.319794,31.454876],[121.324132,31.455007],[121.327399,31.448829],[121.326106,31.448041],[121.328261,31.441098],[121.331236,31.439652],[121.333656,31.440118],[121.336603,31.432254],[121.336645,31.429493],[121.335143,31.429158],[121.336422,31.424999],[121.336561,31.419058],[121.33239,31.416943],[121.334101,31.413655],[121.332488,31.413117],[121.333141,31.410739],[121.330444,31.410308],[121.32847,31.411958],[121.314316,31.4072],[121.317375,31.403661],[121.315637,31.402729],[121.314747,31.398365],[121.317444,31.39742],[121.321476,31.397576],[121.323145,31.395866],[121.323339,31.393331],[121.320419,31.389123],[121.323061,31.388489],[121.326607,31.381063],[121.330527,31.381135],[121.331306,31.378456],[121.328734,31.377344],[121.331389,31.37433],[121.334003,31.37262],[121.333336,31.371281],[121.335991,31.370097],[121.335018,31.366963],[121.337576,31.364189],[121.338911,31.360995],[121.340329,31.360517],[121.341428,31.357802],[121.337118,31.356019],[121.337743,31.3534],[121.334643,31.3509],[121.332251,31.351307],[121.332502,31.347084],[121.336464,31.346821],[121.337521,31.344536],[121.338925,31.344775],[121.342401,31.341306],[121.344347,31.341928],[121.34628,31.336329],[121.342846,31.336066],[121.341692,31.33329],[121.342318,31.331005],[121.345932,31.32513],[121.347517,31.324077],[121.344848,31.323335],[121.345585,31.320835],[121.3492,31.321313],[121.347782,31.319542],[121.347698,31.316706],[121.343458,31.317185],[121.340357,31.311525],[121.338981,31.310101],[121.335686,31.303339],[121.331306,31.301436],[121.334198,31.296122],[121.33588,31.297044],[121.336506,31.294901]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310115,\"name\":\"浦东新区\",\"center\":[121.567706,31.245944],\"centroid\":[121.742177,31.083823],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":10,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.570475,30.998345],[121.567959,31.000879],[121.570712,31.002295],[121.570253,31.004565],[121.571463,31.005633],[121.569725,31.010603],[121.568181,31.010063],[121.565859,31.011912],[121.569822,31.012452],[121.571018,31.016426],[121.574674,31.018634],[121.574758,31.020951],[121.572325,31.026677],[121.56839,31.025284],[121.569057,31.024396],[121.564302,31.021191],[121.56027,31.024132],[121.558699,31.020255],[121.556474,31.020255],[121.556516,31.01873],[121.554139,31.01861],[121.552262,31.020915],[121.552804,31.023268],[121.555765,31.022908],[121.558407,31.024528],[121.558254,31.029533],[121.559505,31.030278],[121.559464,31.041391],[121.562119,31.043635],[121.559811,31.044812],[121.557031,31.04798],[121.556127,31.047632],[121.554737,31.050824],[121.552693,31.0493],[121.550538,31.049396],[121.54955,31.047908],[121.547799,31.048544],[121.54588,31.047044],[121.541472,31.046396],[121.542307,31.049072],[121.540791,31.052528],[121.54328,31.054016],[121.543308,31.055696],[121.548383,31.056896],[121.547201,31.061647],[121.548549,31.063639],[121.551094,31.063795],[121.551789,31.065643],[121.556753,31.06737],[121.55279,31.069506],[121.555599,31.071689],[121.559033,31.072169],[121.557531,31.073357],[121.562675,31.074305],[121.56262,31.075121],[121.567639,31.0762],[121.575272,31.080063],[121.572658,31.081323],[121.571643,31.080063],[121.569766,31.081611],[121.563579,31.082486],[121.561563,31.08365],[121.557031,31.082702],[121.556405,31.081059],[121.553555,31.080303],[121.550565,31.082834],[121.548549,31.086889],[121.551539,31.088148],[121.551608,31.090128],[121.559088,31.091951],[121.561563,31.09357],[121.561855,31.091867],[121.564358,31.091891],[121.567264,31.09363],[121.566819,31.096569],[121.563315,31.098955],[121.562064,31.101258],[121.563649,31.101858],[121.561132,31.105264],[121.561396,31.106224],[121.557851,31.109797],[121.559867,31.111896],[121.556697,31.113083],[121.555279,31.114882],[121.553332,31.112688],[121.552317,31.113899],[121.549217,31.113419],[121.550426,31.11162],[121.547687,31.109653],[121.544225,31.111464],[121.542251,31.116153],[121.539526,31.115626],[121.537885,31.113983],[121.535341,31.117976],[121.532254,31.117208],[121.53142,31.11842],[121.525289,31.116741],[121.522869,31.115242],[121.521424,31.116309],[121.514513,31.115278],[121.513749,31.118012],[121.511343,31.12119],[121.50549,31.120002],[121.503863,31.118324],[121.505295,31.115494],[121.501583,31.114666],[121.498538,31.121501],[121.49281,31.118719],[121.490266,31.124283],[121.485969,31.124523],[121.485705,31.121933],[121.48191,31.120086],[121.481256,31.118024],[121.477446,31.117328],[121.481353,31.110697],[121.477321,31.110853],[121.474137,31.114354],[121.473984,31.112915],[121.470286,31.110937],[121.465211,31.1121],[121.469299,31.118731],[121.469674,31.124859],[121.468729,31.127868],[121.462431,31.134463],[121.457453,31.142232],[121.457453,31.146451],[121.460387,31.150276],[121.46574,31.155118],[121.468354,31.158091],[121.469369,31.162298],[121.468159,31.167092],[121.464905,31.17541],[121.464905,31.178022],[121.466254,31.18109],[121.468729,31.184122],[121.475987,31.187885],[121.490752,31.191467],[121.494631,31.192857],[121.498066,31.195601],[121.501319,31.199747],[121.508368,31.210158],[121.509911,31.214506],[121.509397,31.218459],[121.506741,31.223119],[121.502014,31.228018],[121.495744,31.232977],[121.493491,31.23615],[121.493491,31.240163],[121.494826,31.24221],[121.500012,31.244989],[121.50688,31.246474],[121.516488,31.246953],[121.527555,31.247252],[121.536384,31.249623],[121.541542,31.251826],[121.559074,31.264219],[121.563537,31.268805],[121.568515,31.275701],[121.56953,31.279567],[121.569141,31.285254],[121.565456,31.294135],[121.562523,31.29976],[121.561758,31.303339],[121.561883,31.321158],[121.560493,31.32781],[121.558574,31.331256],[121.555779,31.333948],[121.549398,31.337789],[121.525483,31.346797],[121.514903,31.352],[121.508424,31.357251],[121.503835,31.36493],[121.50346,31.369403],[121.503835,31.373744],[121.507284,31.379102],[121.512372,31.385858],[121.521229,31.39479],[121.538011,31.388489],[121.559811,31.38361],[121.593708,31.376411],[121.603038,31.372656],[121.610559,31.368195],[121.689448,31.322462],[121.712431,31.309407],[121.722511,31.303518],[121.729101,31.298288],[121.743742,31.283207],[121.809812,31.196907],[121.853358,31.155346],[121.884029,31.130638],[121.889465,31.121705],[121.94679,31.065883],[121.962682,31.047284],[121.977558,31.016101],[121.990934,30.968432],[121.996231,30.935458],[121.998497,30.899961],[121.996982,30.874898],[121.993951,30.863055],[121.985372,30.850694],[121.970732,30.839077],[121.954715,30.825811],[121.954326,30.821409],[121.955466,30.817138],[121.969703,30.789202],[121.943689,30.777096],[121.9246,30.8066],[121.915284,30.812892],[121.904467,30.814155],[121.793767,30.816862],[121.769338,30.85043],[121.768143,30.863272],[121.771605,30.875427],[121.772481,30.875703],[121.773134,30.880596],[121.776679,30.881005],[121.776012,30.886426],[121.778807,30.894588],[121.778987,30.899468],[121.778334,30.903807],[121.77896,30.910116],[121.780239,30.911811],[121.781115,30.917567],[121.777653,30.926723],[121.777806,30.931025],[121.77337,30.931553],[121.773023,30.933932],[121.769769,30.935278],[121.76799,30.93833],[121.766432,30.936539],[121.763846,30.936852],[121.764277,30.938522],[121.761469,30.938414],[121.761677,30.940132],[121.764542,30.941766],[121.760927,30.944613],[121.761024,30.947604],[121.759286,30.949154],[121.751987,30.952721],[121.749234,30.953046],[121.747857,30.951893],[121.743742,30.956589],[121.739988,30.956721],[121.73686,30.958703],[121.737916,30.960637],[121.733954,30.964469],[121.73191,30.967784],[121.712792,30.980934],[121.705507,30.984981],[121.699459,30.987419],[121.69298,30.98934],[121.688086,30.990145],[121.683595,30.989808],[121.674558,30.991802],[121.673348,30.989832],[121.669525,30.991609],[121.663115,30.992714],[121.654536,30.993254],[121.646695,30.99335],[121.62057,30.992678],[121.61772,30.995692],[121.614717,31.001251],[121.604066,31.001131],[121.595585,31.002043],[121.594682,31.000699],[121.584309,31.000819],[121.582933,30.999498],[121.576746,30.999474],[121.570475,30.998345]]],[[[121.943244,31.215465],[121.946595,31.224365],[121.951044,31.228821],[121.957259,31.230414],[121.969188,31.230282],[121.980659,31.22809],[121.989655,31.224521],[122.008563,31.220987],[122.011038,31.217405],[122.012609,31.210002],[122.012011,31.192043],[122.010593,31.188004],[121.999554,31.165079],[121.99573,31.1608],[121.975862,31.158834],[121.970773,31.157552],[121.965685,31.15754],[121.959637,31.159278],[121.952629,31.1672],[121.948027,31.176405],[121.944843,31.186878],[121.942619,31.198465],[121.941826,31.207678],[121.943244,31.215465]]],[[[121.882625,31.240857],[121.88991,31.242594],[121.897363,31.242115],[121.915451,31.236558],[121.923557,31.233863],[121.926727,31.229731],[121.927519,31.224017],[121.925448,31.205438],[121.922445,31.196859],[121.918788,31.194319],[121.913852,31.19384],[121.908777,31.195266],[121.901645,31.20146],[121.889271,31.214997],[121.885155,31.22052],[121.882541,31.225611],[121.880873,31.23633],[121.882625,31.240857]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310116,\"name\":\"金山区\",\"center\":[121.330736,30.724697],\"centroid\":[121.255144,30.818932],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":11,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.99673,30.950307],[121.002055,30.95104],[121.002653,30.947015],[121.00763,30.947628],[121.010175,30.950727],[121.015361,30.948169],[121.013345,30.946811],[121.011079,30.947184],[121.011607,30.943604],[121.013831,30.944168],[121.015291,30.940288],[121.017697,30.939219],[121.016932,30.941333],[121.019462,30.941165],[121.028041,30.94394],[121.02989,30.944457],[121.029612,30.941874],[121.031851,30.939771],[121.031503,30.936083],[121.028694,30.92754],[121.028319,30.922602],[121.025872,30.91675],[121.024885,30.911618],[121.025288,30.909059],[121.034659,30.90615],[121.034395,30.902737],[121.038788,30.902148],[121.040332,30.904504],[121.040874,30.900706],[121.04232,30.899408],[121.045184,30.901896],[121.053026,30.903374],[121.056529,30.90335],[121.067944,30.904504],[121.068973,30.902124],[121.072491,30.903182],[121.072421,30.904924],[121.080833,30.905946],[121.081806,30.904251],[121.083725,30.905285],[121.091664,30.90341],[121.094347,30.904804],[121.09425,30.902545],[121.097128,30.903206],[121.098782,30.906607],[121.096196,30.910332],[121.093805,30.909708],[121.089092,30.911979],[121.089022,30.915296],[121.091358,30.916185],[121.100395,30.926459],[121.104358,30.922758],[121.105122,30.920138],[121.110962,30.921749],[121.114591,30.921676],[121.121445,30.919958],[121.119346,30.911991],[121.117802,30.910705],[121.113506,30.903602],[121.110851,30.90103],[121.111087,30.899228],[121.113451,30.897425],[121.118164,30.901487],[121.122224,30.901114],[121.123545,30.902857],[121.130163,30.902593],[121.131706,30.899732],[121.134417,30.901812],[121.141258,30.901331],[121.14098,30.904984],[121.139673,30.907388],[121.14009,30.910332],[121.13742,30.913349],[121.139061,30.91961],[121.143246,30.918108],[121.142162,30.915596],[121.149836,30.912616],[121.152895,30.9102],[121.156649,30.909972],[121.156288,30.912616],[121.156746,30.918961],[121.158206,30.920295],[121.164616,30.919934],[121.16691,30.916978],[121.171262,30.914683],[121.174654,30.915115],[121.186472,30.915404],[121.187765,30.916593],[121.194828,30.917314],[121.207522,30.919886],[121.211026,30.92128],[121.218145,30.927684],[121.222997,30.930748],[121.227335,30.926783],[121.234495,30.928562],[121.234773,30.925978],[121.238166,30.924861],[121.240655,30.925149],[121.242935,30.91991],[121.244589,30.920307],[121.245507,30.917074],[121.243686,30.917855],[121.246619,30.9099],[121.255226,30.909551],[121.255893,30.907977],[121.258952,30.907208],[121.262122,30.908097],[121.262525,30.906835],[121.266932,30.906258],[121.266168,30.901715],[121.269046,30.901679],[121.270422,30.900165],[121.27298,30.900405],[121.274663,30.896078],[121.279098,30.897112],[121.27964,30.894456],[121.282073,30.894804],[121.28231,30.896571],[121.285257,30.896631],[121.285799,30.895429],[121.288413,30.896066],[121.288719,30.899961],[121.290151,30.900021],[121.291013,30.902677],[121.290068,30.909804],[121.288705,30.909912],[121.288844,30.916894],[121.294948,30.918504],[121.294809,30.914947],[121.296269,30.914959],[121.29848,30.909744],[121.301775,30.908458],[121.303443,30.909287],[121.303721,30.912099],[121.306502,30.912123],[121.306808,30.910212],[121.313829,30.910717],[121.314608,30.909143],[121.320127,30.91109],[121.321518,30.908986],[121.325939,30.908962],[121.327635,30.91014],[121.331097,30.907508],[121.334657,30.907737],[121.336631,30.906739],[121.340162,30.908554],[121.343819,30.909119],[121.347573,30.913145],[121.350604,30.911402],[121.351814,30.913217],[121.35668,30.908614],[121.358418,30.900598],[121.360476,30.897785],[121.361185,30.892977],[121.36327,30.886955],[121.367233,30.886667],[121.370166,30.883914],[121.371751,30.883698],[121.377535,30.879983],[121.382207,30.878961],[121.381498,30.876605],[121.382791,30.874489],[121.38286,30.869043],[121.381873,30.867324],[121.381929,30.863765],[121.384001,30.863488],[121.383472,30.859232],[121.384376,30.856238],[121.383722,30.851765],[121.384918,30.848073],[121.385446,30.843178],[121.379065,30.843238],[121.379259,30.840112],[121.383764,30.833906],[121.387588,30.832799],[121.387588,30.829864],[121.391717,30.829913],[121.392051,30.82782],[121.396986,30.827988],[121.397376,30.833292],[121.399712,30.834182],[121.404202,30.833797],[121.403632,30.829877],[121.400685,30.830105],[121.400991,30.827399],[121.404786,30.823081],[121.41235,30.821505],[121.414171,30.821757],[121.41552,30.819941],[121.415131,30.815803],[121.419288,30.81602],[121.420525,30.819797],[121.425989,30.81869],[121.437029,30.818101],[121.441645,30.806829],[121.445427,30.804868],[121.44672,30.805577],[121.451711,30.798323],[121.465072,30.776483],[121.478767,30.756347],[121.426365,30.730283],[121.406997,30.718086],[121.361894,30.67952],[121.35433,30.676991],[121.346642,30.675593],[121.326718,30.67593],[121.291041,30.678328],[121.274649,30.6774],[121.271604,30.69689],[121.270422,30.69807],[121.270672,30.701563],[121.268656,30.702129],[121.268031,30.706103],[121.266668,30.706296],[121.265862,30.709488],[121.268448,30.712149],[121.267057,30.715039],[121.270339,30.716894],[121.270102,30.72047],[121.272035,30.723252],[121.270339,30.725864],[121.271451,30.726948],[121.269755,30.730729],[121.271451,30.73227],[121.26817,30.734931],[121.266835,30.733498],[121.261343,30.738217],[121.256393,30.743948],[121.244756,30.749185],[121.243102,30.750533],[121.23729,30.752651],[121.232298,30.755817],[121.230686,30.763737],[121.229115,30.767974],[121.226918,30.770826],[121.226209,30.775087],[121.224624,30.776976],[121.2234,30.775977],[121.217992,30.784954],[121.213723,30.785929],[121.205534,30.785905],[121.200098,30.783294],[121.199166,30.780755],[121.20032,30.773618],[121.196956,30.773354],[121.191839,30.778853],[121.190963,30.781092],[121.189517,30.778974],[121.186361,30.779034],[121.185791,30.776651],[121.183441,30.775038],[121.179965,30.774376],[121.174668,30.772018],[121.170984,30.774677],[121.170789,30.777084],[121.168968,30.775953],[121.163434,30.775279],[121.160737,30.773221],[121.160681,30.776579],[121.155815,30.777205],[121.152687,30.778974],[121.144122,30.779479],[121.140618,30.776928],[121.1387,30.77842],[121.13603,30.777337],[121.131817,30.777313],[121.127521,30.778673],[121.12342,30.77895],[121.117219,30.786073],[121.120041,30.788552],[121.125255,30.788179],[121.126576,30.788998],[121.126047,30.79304],[121.128202,30.810221],[121.130218,30.815574],[121.132373,30.819279],[121.13742,30.825029],[121.13742,30.829985],[121.136239,30.827868],[121.134264,30.828505],[121.132916,30.831608],[121.134612,30.833028],[121.131609,30.83601],[121.129982,30.834892],[121.127688,30.83565],[121.120639,30.836335],[121.117747,30.835301],[121.119832,30.83773],[121.12025,30.843299],[121.123545,30.847267],[121.121153,30.850165],[121.120055,30.849119],[121.114744,30.851476],[121.113159,30.854049],[121.110906,30.851416],[121.104789,30.849335],[121.102272,30.850261],[121.097684,30.854927],[121.097712,30.857103],[121.080471,30.848746],[121.066999,30.84877],[121.06052,30.845187],[121.061674,30.843383],[121.060228,30.842793],[121.062049,30.83779],[121.056335,30.835602],[121.046755,30.831091],[121.048896,30.825186],[121.045101,30.825907],[121.043516,30.828157],[121.039956,30.827218],[121.04175,30.825378],[121.040276,30.82438],[121.039192,30.820867],[121.03769,30.820266],[121.03908,30.818582],[121.043752,30.820013],[121.044976,30.815526],[121.037912,30.81389],[121.036647,30.818449],[121.030057,30.828553],[121.014874,30.833954],[121.014402,30.835818],[121.010898,30.834615],[121.006935,30.830779],[121.003446,30.826304],[121.00054,30.829431],[120.994603,30.821493],[120.990918,30.822708],[120.992754,30.825691],[120.989153,30.828698],[120.992462,30.831572],[120.989125,30.832318],[120.989987,30.834724],[120.992865,30.838392],[120.995659,30.838572],[120.997759,30.84408],[120.9999,30.843335],[121.000985,30.845632],[121.003974,30.846101],[121.006463,30.850454],[121.008006,30.850574],[121.010133,30.853135],[121.013359,30.851692],[121.015013,30.853604],[121.010981,30.856033],[121.015403,30.86053],[121.016265,30.862851],[121.013971,30.86439],[121.01778,30.86938],[121.014819,30.871027],[121.01778,30.873359],[121.020463,30.87188],[121.019796,30.873996],[121.021896,30.875162],[121.019421,30.876665],[121.021465,30.878793],[121.0186,30.880716],[121.017474,30.882724],[121.011092,30.882219],[121.008298,30.882964],[121.00852,30.888121],[121.005017,30.888794],[120.993824,30.88966],[120.992907,30.893915],[120.99046,30.89579],[120.992656,30.899732],[120.992809,30.90216],[120.995715,30.903723],[120.998635,30.903386],[120.998704,30.905946],[121.00257,30.904852],[121.004516,30.906955],[121.004572,30.909299],[120.998982,30.909527],[120.999622,30.91395],[121.000025,30.934701],[121.000818,30.937729],[120.997481,30.941141],[120.995673,30.944336],[120.996813,30.944625],[120.99673,30.950307]]],[[[121.426671,30.682183],[121.428589,30.681749],[121.426796,30.680315],[121.426671,30.682183]]],[[[121.422458,30.691482],[121.426615,30.691277],[121.428909,30.689109],[121.425364,30.687374],[121.419482,30.689856],[121.419469,30.691626],[121.422458,30.691482]]],[[[121.406775,30.704995],[121.409291,30.704514],[121.406622,30.703093],[121.406775,30.704995]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310117,\"name\":\"松江区\",\"center\":[121.223543,31.03047],\"centroid\":[121.220231,31.015194],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":12,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.323854,31.162933],[121.327218,31.156856],[121.328775,31.156665],[121.331528,31.15205],[121.331292,31.149772],[121.333711,31.148765],[121.335477,31.143862],[121.336728,31.14355],[121.338814,31.14017],[121.33677,31.138971],[121.342095,31.134655],[121.344681,31.130338],[121.344014,31.129451],[121.346002,31.126202],[121.34489,31.12577],[121.347545,31.121969],[121.346753,31.121657],[121.349589,31.117748],[121.353065,31.117604],[121.35066,31.115554],[121.353774,31.111512],[121.356026,31.112532],[121.357014,31.110529],[121.352217,31.106487],[121.351675,31.107735],[121.348532,31.106655],[121.351341,31.099255],[121.35839,31.100791],[121.359085,31.098931],[121.362756,31.099771],[121.368289,31.088976],[121.372016,31.079871],[121.370625,31.078372],[121.368804,31.079127],[121.365481,31.077892],[121.364341,31.073705],[121.362116,31.072601],[121.364424,31.069878],[121.363743,31.068354],[121.357278,31.066758],[121.358195,31.064047],[121.35344,31.061287],[121.343444,31.059139],[121.341456,31.062763],[121.335338,31.060435],[121.335102,31.04564],[121.33367,31.040695],[121.334017,31.031922],[121.333308,31.030686],[121.333892,31.026917],[121.333725,31.015657],[121.333072,31.01334],[121.339898,31.013857],[121.34279,31.014817],[121.34425,31.013941],[121.339829,31.010267],[121.33823,31.006197],[121.330347,30.996905],[121.327482,30.995896],[121.326773,30.994479],[121.326898,30.989964],[121.3258,30.9833],[121.327371,30.980658],[121.329554,30.981318],[121.334406,30.980694],[121.34375,30.976599],[121.351258,30.975986],[121.35871,30.97786],[121.359961,30.976251],[121.361435,30.970438],[121.36099,30.965574],[121.362853,30.959544],[121.363117,30.956109],[121.362255,30.9517],[121.362478,30.948901],[121.365467,30.947232],[121.363868,30.945165],[121.361129,30.944048],[121.362408,30.939122],[121.362658,30.934761],[121.359336,30.935086],[121.357361,30.933632],[121.354706,30.933512],[121.355679,30.932058],[121.35116,30.930628],[121.352203,30.928213],[121.352161,30.923803],[121.355373,30.921388],[121.356054,30.919742],[121.355081,30.916341],[121.351814,30.913217],[121.350604,30.911402],[121.347573,30.913145],[121.343819,30.909119],[121.340162,30.908554],[121.336631,30.906739],[121.334657,30.907737],[121.331097,30.907508],[121.327635,30.91014],[121.325939,30.908962],[121.321518,30.908986],[121.320127,30.91109],[121.314608,30.909143],[121.313829,30.910717],[121.306808,30.910212],[121.306502,30.912123],[121.303721,30.912099],[121.303443,30.909287],[121.301775,30.908458],[121.29848,30.909744],[121.296269,30.914959],[121.294809,30.914947],[121.294948,30.918504],[121.288844,30.916894],[121.288705,30.909912],[121.290068,30.909804],[121.291013,30.902677],[121.290151,30.900021],[121.288719,30.899961],[121.288413,30.896066],[121.285799,30.895429],[121.285257,30.896631],[121.28231,30.896571],[121.282073,30.894804],[121.27964,30.894456],[121.279098,30.897112],[121.274663,30.896078],[121.27298,30.900405],[121.270422,30.900165],[121.269046,30.901679],[121.266168,30.901715],[121.266932,30.906258],[121.262525,30.906835],[121.262122,30.908097],[121.258952,30.907208],[121.255893,30.907977],[121.255226,30.909551],[121.246619,30.9099],[121.243686,30.917855],[121.245507,30.917074],[121.244589,30.920307],[121.242935,30.91991],[121.240655,30.925149],[121.238166,30.924861],[121.234773,30.925978],[121.234495,30.928562],[121.227335,30.926783],[121.222997,30.930748],[121.218145,30.927684],[121.211026,30.92128],[121.207522,30.919886],[121.194828,30.917314],[121.187765,30.916593],[121.186472,30.915404],[121.174654,30.915115],[121.171262,30.914683],[121.16691,30.916978],[121.164616,30.919934],[121.158206,30.920295],[121.156746,30.918961],[121.156288,30.912616],[121.156649,30.909972],[121.152895,30.9102],[121.149836,30.912616],[121.142162,30.915596],[121.143246,30.918108],[121.139061,30.91961],[121.13742,30.913349],[121.14009,30.910332],[121.139673,30.907388],[121.14098,30.904984],[121.141258,30.901331],[121.134417,30.901812],[121.131706,30.899732],[121.130163,30.902593],[121.123545,30.902857],[121.122224,30.901114],[121.118164,30.901487],[121.113451,30.897425],[121.111087,30.899228],[121.110851,30.90103],[121.113506,30.903602],[121.117802,30.910705],[121.119346,30.911991],[121.121445,30.919958],[121.114591,30.921676],[121.110962,30.921749],[121.105122,30.920138],[121.104358,30.922758],[121.100395,30.926459],[121.091358,30.916185],[121.089022,30.915296],[121.089092,30.911979],[121.093805,30.909708],[121.096196,30.910332],[121.098782,30.906607],[121.097128,30.903206],[121.09425,30.902545],[121.094347,30.904804],[121.091664,30.90341],[121.083725,30.905285],[121.081806,30.904251],[121.080833,30.905946],[121.072421,30.904924],[121.072491,30.903182],[121.068973,30.902124],[121.067944,30.904504],[121.056529,30.90335],[121.053026,30.903374],[121.045184,30.901896],[121.04232,30.899408],[121.040874,30.900706],[121.040332,30.904504],[121.038788,30.902148],[121.034395,30.902737],[121.034659,30.90615],[121.025288,30.909059],[121.024885,30.911618],[121.025872,30.91675],[121.028319,30.922602],[121.028694,30.92754],[121.031503,30.936083],[121.031851,30.939771],[121.029612,30.941874],[121.02989,30.944457],[121.028041,30.94394],[121.027902,30.945826],[121.033213,30.947111],[121.034659,30.952974],[121.036258,30.957094],[121.040401,30.956493],[121.043516,30.957514],[121.042626,30.960433],[121.045949,30.963448],[121.043112,30.969429],[121.0467,30.970246],[121.047409,30.969033],[121.051024,30.969369],[121.053262,30.964445],[121.05735,30.965346],[121.056891,30.96191],[121.059505,30.959184],[121.060339,30.956517],[121.065344,30.95516],[121.07231,30.955088],[121.076495,30.955809],[121.076634,30.957574],[121.079109,30.958283],[121.078539,30.960025],[121.080736,30.960181],[121.081236,30.962283],[121.088174,30.962151],[121.088035,30.964168],[121.093555,30.964673],[121.097489,30.965634],[121.095779,30.968408],[121.095557,30.974245],[121.099172,30.973068],[121.099686,30.980994],[121.099227,30.981979],[121.100145,30.994935],[121.104107,30.99508],[121.104205,31.007998],[121.10205,31.011756],[121.093026,31.020207],[121.085532,31.0255],[121.089509,31.027901],[121.091177,31.025933],[121.096405,31.026437],[121.096975,31.031454],[121.099936,31.031202],[121.100284,31.03341],[121.097767,31.038871],[121.095863,31.040479],[121.09311,31.040719],[121.09621,31.044812],[121.090259,31.048136],[121.089926,31.05194],[121.087159,31.052948],[121.085866,31.050224],[121.082404,31.054208],[121.080972,31.056896],[121.08442,31.058779],[121.086519,31.061167],[121.085935,31.062847],[121.088202,31.064671],[121.092929,31.064539],[121.094542,31.061899],[121.093012,31.058443],[121.094639,31.056332],[121.098337,31.05662],[121.101146,31.053644],[121.101813,31.05728],[121.10839,31.057939],[121.10864,31.05662],[121.118206,31.056068],[121.117997,31.058407],[121.120708,31.057268],[121.12588,31.057376],[121.127757,31.059751],[121.126395,31.059811],[121.126228,31.06665],[121.122238,31.067178],[121.121543,31.07019],[121.118386,31.075948],[121.117121,31.075624],[121.112603,31.077628],[121.107264,31.082115],[121.102912,31.080219],[121.100687,31.080939],[121.099408,31.085941],[121.10084,31.088688],[121.097601,31.093534],[121.099519,31.094158],[121.099853,31.096593],[121.097976,31.099339],[121.100618,31.098428],[121.103843,31.100539],[121.103551,31.102638],[121.108751,31.107159],[121.112589,31.111932],[121.114368,31.109797],[121.11612,31.110973],[121.117733,31.108874],[121.120959,31.107747],[121.125505,31.103369],[121.127688,31.103309],[121.130691,31.100527],[121.131942,31.10205],[121.133319,31.099075],[121.135766,31.09808],[121.141605,31.09868],[121.141897,31.096893],[121.144483,31.097456],[121.14586,31.093954],[121.149461,31.095297],[121.151157,31.091651],[121.152867,31.092035],[121.153465,31.09014],[121.155161,31.090475],[121.155384,31.093162],[121.156733,31.09315],[121.156788,31.098943],[121.154341,31.098884],[121.154397,31.101846],[121.159569,31.100539],[121.165492,31.101438],[121.1652,31.104269],[121.166799,31.104293],[121.166451,31.10831],[121.170567,31.107819],[121.170497,31.109054],[121.174487,31.108538],[121.172986,31.114091],[121.17521,31.115242],[121.174321,31.117868],[121.17642,31.119007],[121.178839,31.117149],[121.183817,31.118695],[121.183858,31.124295],[121.181815,31.124295],[121.181842,31.126957],[121.180341,31.127425],[121.179868,31.131873],[121.181662,31.131777],[121.181968,31.143478],[121.194717,31.138179],[121.199653,31.139582],[121.201627,31.140937],[121.200348,31.137832],[121.206174,31.138299],[121.208287,31.135686],[121.22055,31.138383],[121.227988,31.139091],[121.226765,31.134139],[121.223581,31.126442],[121.221732,31.119931],[121.221301,31.115074],[121.224095,31.115146],[121.233884,31.117316],[121.235816,31.118959],[121.236831,31.125698],[121.239848,31.126238],[121.244534,31.125398],[121.245326,31.129295],[121.239348,31.129955],[121.245479,31.130758],[121.246995,31.134163],[121.25378,31.13264],[121.258048,31.132353],[121.257965,31.127077],[121.261607,31.127173],[121.26062,31.132269],[121.263623,31.135422],[121.26557,31.134787],[121.265737,31.136393],[121.280989,31.133252],[121.287482,31.139954],[121.284173,31.142627],[121.281781,31.142016],[121.279293,31.145708],[121.277012,31.144174],[121.276415,31.145852],[121.278723,31.14825],[121.277763,31.152265],[121.28028,31.150539],[121.283825,31.150839],[121.28313,31.152158],[121.285438,31.153452],[121.287134,31.152313],[121.295435,31.15392],[121.301441,31.15549],[121.316221,31.160189],[121.318056,31.157564],[121.320934,31.158487],[121.322491,31.162394],[121.323854,31.162933]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310118,\"name\":\"青浦区\",\"center\":[121.113021,31.151209],\"centroid\":[121.085182,31.124658],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":13,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.323854,31.162933],[121.322491,31.162394],[121.320934,31.158487],[121.318056,31.157564],[121.316221,31.160189],[121.301441,31.15549],[121.295435,31.15392],[121.287134,31.152313],[121.285438,31.153452],[121.28313,31.152158],[121.283825,31.150839],[121.28028,31.150539],[121.277763,31.152265],[121.278723,31.14825],[121.276415,31.145852],[121.277012,31.144174],[121.279293,31.145708],[121.281781,31.142016],[121.284173,31.142627],[121.287482,31.139954],[121.280989,31.133252],[121.265737,31.136393],[121.26557,31.134787],[121.263623,31.135422],[121.26062,31.132269],[121.261607,31.127173],[121.257965,31.127077],[121.258048,31.132353],[121.25378,31.13264],[121.246995,31.134163],[121.245479,31.130758],[121.239348,31.129955],[121.245326,31.129295],[121.244534,31.125398],[121.239848,31.126238],[121.236831,31.125698],[121.235816,31.118959],[121.233884,31.117316],[121.224095,31.115146],[121.221301,31.115074],[121.221732,31.119931],[121.223581,31.126442],[121.226765,31.134139],[121.227988,31.139091],[121.22055,31.138383],[121.208287,31.135686],[121.206174,31.138299],[121.200348,31.137832],[121.201627,31.140937],[121.199653,31.139582],[121.194717,31.138179],[121.181968,31.143478],[121.181662,31.131777],[121.179868,31.131873],[121.180341,31.127425],[121.181842,31.126957],[121.181815,31.124295],[121.183858,31.124295],[121.183817,31.118695],[121.178839,31.117149],[121.17642,31.119007],[121.174321,31.117868],[121.17521,31.115242],[121.172986,31.114091],[121.174487,31.108538],[121.170497,31.109054],[121.170567,31.107819],[121.166451,31.10831],[121.166799,31.104293],[121.1652,31.104269],[121.165492,31.101438],[121.159569,31.100539],[121.154397,31.101846],[121.154341,31.098884],[121.156788,31.098943],[121.156733,31.09315],[121.155384,31.093162],[121.155161,31.090475],[121.153465,31.09014],[121.152867,31.092035],[121.151157,31.091651],[121.149461,31.095297],[121.14586,31.093954],[121.144483,31.097456],[121.141897,31.096893],[121.141605,31.09868],[121.135766,31.09808],[121.133319,31.099075],[121.131942,31.10205],[121.130691,31.100527],[121.127688,31.103309],[121.125505,31.103369],[121.120959,31.107747],[121.117733,31.108874],[121.11612,31.110973],[121.114368,31.109797],[121.112589,31.111932],[121.108751,31.107159],[121.103551,31.102638],[121.103843,31.100539],[121.100618,31.098428],[121.097976,31.099339],[121.099853,31.096593],[121.099519,31.094158],[121.097601,31.093534],[121.10084,31.088688],[121.099408,31.085941],[121.100687,31.080939],[121.102912,31.080219],[121.107264,31.082115],[121.112603,31.077628],[121.117121,31.075624],[121.118386,31.075948],[121.121543,31.07019],[121.122238,31.067178],[121.126228,31.06665],[121.126395,31.059811],[121.127757,31.059751],[121.12588,31.057376],[121.120708,31.057268],[121.117997,31.058407],[121.118206,31.056068],[121.10864,31.05662],[121.10839,31.057939],[121.101813,31.05728],[121.101146,31.053644],[121.098337,31.05662],[121.094639,31.056332],[121.093012,31.058443],[121.094542,31.061899],[121.092929,31.064539],[121.088202,31.064671],[121.085935,31.062847],[121.086519,31.061167],[121.08442,31.058779],[121.080972,31.056896],[121.082404,31.054208],[121.085866,31.050224],[121.087159,31.052948],[121.089926,31.05194],[121.090259,31.048136],[121.09621,31.044812],[121.09311,31.040719],[121.095863,31.040479],[121.097767,31.038871],[121.100284,31.03341],[121.099936,31.031202],[121.096975,31.031454],[121.096405,31.026437],[121.091177,31.025933],[121.089509,31.027901],[121.085532,31.0255],[121.093026,31.020207],[121.10205,31.011756],[121.104205,31.007998],[121.104107,30.99508],[121.100145,30.994935],[121.099227,30.981979],[121.099686,30.980994],[121.099172,30.973068],[121.095557,30.974245],[121.095779,30.968408],[121.097489,30.965634],[121.093555,30.964673],[121.088035,30.964168],[121.088174,30.962151],[121.081236,30.962283],[121.080736,30.960181],[121.078539,30.960025],[121.079109,30.958283],[121.076634,30.957574],[121.076495,30.955809],[121.07231,30.955088],[121.065344,30.95516],[121.060339,30.956517],[121.059505,30.959184],[121.056891,30.96191],[121.05735,30.965346],[121.053262,30.964445],[121.051024,30.969369],[121.047409,30.969033],[121.0467,30.970246],[121.043112,30.969429],[121.045949,30.963448],[121.042626,30.960433],[121.043516,30.957514],[121.040401,30.956493],[121.036258,30.957094],[121.034659,30.952974],[121.033213,30.947111],[121.027902,30.945826],[121.028041,30.94394],[121.019462,30.941165],[121.016932,30.941333],[121.017697,30.939219],[121.015291,30.940288],[121.013831,30.944168],[121.011607,30.943604],[121.011079,30.947184],[121.013345,30.946811],[121.015361,30.948169],[121.010175,30.950727],[121.00763,30.947628],[121.002653,30.947015],[121.002055,30.95104],[120.99673,30.950307],[120.995368,30.950367],[120.994797,30.954824],[120.992531,30.955028],[120.991683,30.958211],[120.994756,30.958703],[120.992601,30.962835],[120.993699,30.964024],[120.991433,30.968372],[120.993143,30.972119],[120.99737,30.972444],[121.000512,30.973933],[121.000567,30.977007],[121.002361,30.97762],[121.000832,30.980466],[120.999344,30.980106],[120.997133,30.989232],[120.994603,30.991922],[120.994839,30.99526],[120.990515,30.994551],[120.989834,30.996664],[120.992045,30.997109],[120.992086,31.003424],[120.991057,31.00747],[120.991933,31.008154],[120.989987,31.010495],[120.989514,31.014397],[120.983855,31.014445],[120.982993,31.016089],[120.970202,31.016149],[120.963209,31.016594],[120.964849,31.019751],[120.964293,31.020771],[120.960483,31.021659],[120.958301,31.028573],[120.952197,31.030254],[120.951085,31.029077],[120.949124,31.029953],[120.948735,31.025068],[120.951168,31.024012],[120.949972,31.017638],[120.936305,31.01711],[120.935749,31.015381],[120.940087,31.010027],[120.938085,31.009007],[120.933789,31.010027],[120.931383,31.01178],[120.92699,31.012068],[120.926155,31.010423],[120.918105,31.012788],[120.911014,31.010555],[120.909944,31.012644],[120.910055,31.016942],[120.901365,31.017494],[120.900559,31.020423],[120.901338,31.0255],[120.901977,31.037647],[120.899739,31.039603],[120.897027,31.04558],[120.897208,31.04822],[120.895442,31.050332],[120.894567,31.053896],[120.894622,31.058659],[120.895915,31.063075],[120.898863,31.070514],[120.899614,31.07836],[120.904619,31.078528],[120.90473,31.080495],[120.901671,31.084094],[120.902116,31.085653],[120.899294,31.086937],[120.896694,31.086649],[120.895415,31.090703],[120.892175,31.094194],[120.892842,31.096533],[120.891216,31.09718],[120.891021,31.094302],[120.887476,31.094074],[120.878077,31.095753],[120.878967,31.09838],[120.876005,31.097864],[120.876631,31.099939],[120.873169,31.100323],[120.872543,31.098884],[120.869818,31.098943],[120.869582,31.097216],[120.865744,31.097624],[120.863993,31.100299],[120.859766,31.100287],[120.856804,31.102829],[120.857917,31.108526],[120.860225,31.10933],[120.862241,31.112508],[120.865967,31.11475],[120.870597,31.119715],[120.871014,31.123804],[120.872349,31.127161],[120.876422,31.131489],[120.881289,31.134727],[120.89921,31.136057],[120.905397,31.134211],[120.916923,31.136189],[120.93034,31.141404],[120.952642,31.138251],[120.983911,31.131705],[120.991252,31.13318],[121.007269,31.13342],[121.018489,31.134103],[121.022813,31.138311],[121.022271,31.140457],[121.025677,31.140769],[121.02672,31.143766],[121.028375,31.143874],[121.028778,31.141249],[121.033088,31.142208],[121.036119,31.140325],[121.036258,31.137376],[121.038649,31.136909],[121.041819,31.138899],[121.044781,31.145528],[121.041541,31.146931],[121.041472,31.14982],[121.045254,31.151582],[121.04542,31.154028],[121.049133,31.154615],[121.050273,31.150719],[121.055834,31.150659],[121.057378,31.152781],[121.062564,31.153129],[121.064135,31.150839],[121.066067,31.150947],[121.06572,31.148597],[121.069126,31.148705],[121.067777,31.152289],[121.072046,31.153512],[121.073839,31.157072],[121.077023,31.158451],[121.07605,31.160536],[121.076787,31.162622],[121.0737,31.161711],[121.07313,31.163257],[121.077371,31.16454],[121.075466,31.170316],[121.072379,31.169609],[121.072532,31.172701],[121.075424,31.173444],[121.074229,31.176225],[121.071406,31.179472],[121.071225,31.181462],[121.075591,31.182852],[121.074993,31.184386],[121.069474,31.182888],[121.068751,31.184889],[121.071684,31.185955],[121.07035,31.188735],[121.070614,31.1913],[121.07256,31.191527],[121.072185,31.193169],[121.070113,31.193612],[121.069599,31.195314],[121.06679,31.194966],[121.066609,31.197183],[121.069209,31.196524],[121.067805,31.201005],[121.065608,31.211871],[121.062633,31.224664],[121.0628,31.226964],[121.064719,31.227275],[121.064649,31.230785],[121.06718,31.230917],[121.067388,31.232929],[121.06458,31.232965],[121.062605,31.234689],[121.061243,31.237827],[121.063898,31.238438],[121.063565,31.242222],[121.064343,31.246138],[121.061646,31.24524],[121.057669,31.246749],[121.060979,31.246486],[121.061952,31.257945],[121.063245,31.267907],[121.068695,31.268098],[121.072741,31.26914],[121.080416,31.270158],[121.082154,31.271535],[121.084545,31.275713],[121.081361,31.277257],[121.084698,31.2876],[121.087326,31.290664],[121.086909,31.291717],[121.090134,31.291909],[121.093096,31.28821],[121.095404,31.287001],[121.09881,31.276251],[121.105442,31.273654],[121.103829,31.27533],[121.106666,31.276706],[121.111115,31.281746],[121.114994,31.285265],[121.117719,31.285684],[121.131053,31.280106],[121.131678,31.281363],[121.138032,31.278753],[121.137601,31.277592],[121.140535,31.276491],[121.142885,31.277664],[121.142996,31.275473],[121.150392,31.275437],[121.153743,31.276646],[121.153924,31.272061],[121.151783,31.267632],[121.155537,31.266147],[121.157845,31.270541],[121.161057,31.26762],[121.162614,31.269176],[121.167661,31.263944],[121.168036,31.259622],[121.170386,31.259119],[121.16894,31.256197],[121.171415,31.254928],[121.174251,31.256856],[121.176768,31.254605],[121.178798,31.255862],[121.17934,31.253419],[121.181537,31.254413],[121.183928,31.252246],[121.186444,31.252329],[121.188377,31.25476],[121.193021,31.253623],[121.193368,31.251455],[121.19626,31.251228],[121.19608,31.253395],[121.199848,31.255239],[121.203143,31.255814],[121.202865,31.257131],[121.206368,31.260065],[121.208482,31.25749],[121.209816,31.258017],[121.209761,31.260831],[121.212625,31.259837],[121.214182,31.254353],[121.221273,31.256293],[121.220216,31.257406],[121.223859,31.259035],[121.223539,31.260532],[121.229198,31.261717],[121.229087,31.262711],[121.235177,31.262699],[121.237693,31.262088],[121.242253,31.25937],[121.246577,31.259801],[121.246758,31.258448],[121.254183,31.258688],[121.247314,31.253287],[121.24591,31.248821],[121.241683,31.247348],[121.239932,31.241061],[121.241391,31.240222],[121.247912,31.240917],[121.249692,31.236534],[121.251082,31.238198],[121.252792,31.236965],[121.254155,31.23312],[121.257158,31.230701],[121.258006,31.226868],[121.256588,31.226329],[121.258215,31.222772],[121.25745,31.220208],[121.259675,31.218148],[121.261218,31.215081],[121.259397,31.212769],[121.263846,31.208912],[121.26468,31.206731],[121.263053,31.205701],[121.264777,31.203317],[121.266724,31.203257],[121.271701,31.198309],[121.277388,31.193576],[121.284034,31.194391],[121.287329,31.196332],[121.292126,31.200621],[121.292431,31.202514],[121.294837,31.203077],[121.297506,31.201412],[121.300565,31.197027],[121.30856,31.188388],[121.310784,31.18423],[121.316304,31.176836],[121.318042,31.173624],[121.318584,31.170256],[121.323854,31.162933]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310120,\"name\":\"奉贤区\",\"center\":[121.458472,30.912345],\"centroid\":[121.56251,30.897998],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":14,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.570475,30.998345],[121.576746,30.999474],[121.582933,30.999498],[121.584309,31.000819],[121.594682,31.000699],[121.595585,31.002043],[121.604066,31.001131],[121.614717,31.001251],[121.61772,30.995692],[121.62057,30.992678],[121.646695,30.99335],[121.654536,30.993254],[121.663115,30.992714],[121.669525,30.991609],[121.673348,30.989832],[121.674558,30.991802],[121.683595,30.989808],[121.688086,30.990145],[121.69298,30.98934],[121.699459,30.987419],[121.705507,30.984981],[121.712792,30.980934],[121.73191,30.967784],[121.733954,30.964469],[121.737916,30.960637],[121.73686,30.958703],[121.739988,30.956721],[121.743742,30.956589],[121.747857,30.951893],[121.749234,30.953046],[121.751987,30.952721],[121.759286,30.949154],[121.761024,30.947604],[121.760927,30.944613],[121.764542,30.941766],[121.761677,30.940132],[121.761469,30.938414],[121.764277,30.938522],[121.763846,30.936852],[121.766432,30.936539],[121.76799,30.93833],[121.769769,30.935278],[121.773023,30.933932],[121.77337,30.931553],[121.777806,30.931025],[121.777653,30.926723],[121.781115,30.917567],[121.780239,30.911811],[121.77896,30.910116],[121.778334,30.903807],[121.778987,30.899468],[121.778807,30.894588],[121.776012,30.886426],[121.776679,30.881005],[121.773134,30.880596],[121.772481,30.875703],[121.771605,30.875427],[121.768143,30.863272],[121.769338,30.85043],[121.793767,30.816862],[121.77914,30.817222],[121.727071,30.817716],[121.68119,30.818401],[121.648419,30.8162],[121.601327,30.805084],[121.552832,30.789395],[121.517197,30.775387],[121.478767,30.756347],[121.465072,30.776483],[121.451711,30.798323],[121.44672,30.805577],[121.445427,30.804868],[121.441645,30.806829],[121.437029,30.818101],[121.425989,30.81869],[121.420525,30.819797],[121.419288,30.81602],[121.415131,30.815803],[121.41552,30.819941],[121.414171,30.821757],[121.41235,30.821505],[121.404786,30.823081],[121.400991,30.827399],[121.400685,30.830105],[121.403632,30.829877],[121.404202,30.833797],[121.399712,30.834182],[121.397376,30.833292],[121.396986,30.827988],[121.392051,30.82782],[121.391717,30.829913],[121.387588,30.829864],[121.387588,30.832799],[121.383764,30.833906],[121.379259,30.840112],[121.379065,30.843238],[121.385446,30.843178],[121.384918,30.848073],[121.383722,30.851765],[121.384376,30.856238],[121.383472,30.859232],[121.384001,30.863488],[121.381929,30.863765],[121.381873,30.867324],[121.38286,30.869043],[121.382791,30.874489],[121.381498,30.876605],[121.382207,30.878961],[121.377535,30.879983],[121.371751,30.883698],[121.370166,30.883914],[121.367233,30.886667],[121.36327,30.886955],[121.361185,30.892977],[121.360476,30.897785],[121.358418,30.900598],[121.35668,30.908614],[121.351814,30.913217],[121.355081,30.916341],[121.356054,30.919742],[121.355373,30.921388],[121.352161,30.923803],[121.352203,30.928213],[121.35116,30.930628],[121.355679,30.932058],[121.354706,30.933512],[121.357361,30.933632],[121.359336,30.935086],[121.362658,30.934761],[121.362408,30.939122],[121.361129,30.944048],[121.363868,30.945165],[121.365467,30.947232],[121.362478,30.948901],[121.362255,30.9517],[121.363117,30.956109],[121.362853,30.959544],[121.36099,30.965574],[121.361435,30.970438],[121.359961,30.976251],[121.35871,30.97786],[121.375227,30.982832],[121.394261,30.988247],[121.409333,30.990229],[121.413184,30.991069],[121.423973,30.994515],[121.431426,30.999174],[121.433636,31.001779],[121.436834,31.00406],[121.440811,31.005789],[121.448305,31.007458],[121.459942,31.007398],[121.465587,31.008755],[121.47144,31.011948],[121.476362,31.01334],[121.485872,31.014073],[121.489153,31.014949],[121.492879,31.012752],[121.491948,31.010039],[121.495924,30.998297],[121.498872,30.998213],[121.49883,30.999426],[121.503057,31.002716],[121.507881,31.004745],[121.510412,31.004553],[121.517002,31.007626],[121.520853,31.004445],[121.522105,31.002199],[121.520089,31.00256],[121.520325,30.999354],[121.522897,30.99981],[121.528612,30.99592],[121.531962,30.994815],[121.534507,30.995848],[121.537774,30.994683],[121.538233,30.993146],[121.543294,30.994203],[121.54613,30.99305],[121.549537,30.988307],[121.55279,30.98886],[121.553304,30.993026],[121.556224,30.993374],[121.555918,30.995152],[121.561494,30.995644],[121.570475,30.998345]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":310151,\"name\":\"崇明区\",\"center\":[121.397516,31.626946],\"centroid\":[121.568484,31.635916],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":310000},\"subFeatureIndex\":15,\"acroutes\":[100000,310000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[121.975181,31.617034],[121.98825,31.529597],[121.993867,31.51189],[121.995716,31.493104],[121.991698,31.476763],[121.981813,31.4641],[121.967284,31.456656],[121.934304,31.442364],[121.918051,31.434692],[121.901144,31.430126],[121.89055,31.428788],[121.882096,31.428656],[121.87299,31.429338],[121.857807,31.430043],[121.845377,31.431895],[121.834212,31.433975],[121.819183,31.438206],[121.763443,31.458233],[121.72988,31.471973],[121.682858,31.491061],[121.670609,31.494214],[121.638645,31.49972],[121.625784,31.501775],[121.617678,31.503673],[121.608794,31.50691],[121.547673,31.531125],[121.471176,31.57443],[121.43422,31.590336],[121.414797,31.591076],[121.403521,31.590002],[121.395457,31.585444],[121.37221,31.55321],[121.345585,31.571685],[121.289109,31.616283],[121.179868,31.720774],[121.145332,31.753927],[121.142064,31.755308],[121.118498,31.759084],[121.149225,31.787294],[121.181509,31.820411],[121.200334,31.835144],[121.225305,31.847043],[121.242073,31.853397],[121.252111,31.857727],[121.265584,31.864128],[121.281336,31.869041],[121.291166,31.870992],[121.3019,31.872716],[121.310367,31.872502],[121.315859,31.871479],[121.323061,31.868529],[121.369291,31.843283],[121.376381,31.838571],[121.385043,31.833525],[121.395388,31.821291],[121.399142,31.817483],[121.405468,31.809841],[121.411488,31.806341],[121.416312,31.79764],[121.410904,31.79558],[121.420915,31.779602],[121.425781,31.774267],[121.431481,31.769266],[121.445385,31.7643],[121.449751,31.761668],[121.455576,31.759346],[121.464141,31.757142],[121.476807,31.756142],[121.487749,31.753415],[121.498566,31.75326],[121.51304,31.743695],[121.514986,31.742873],[121.526693,31.740217],[121.528361,31.738347],[121.539429,31.735499],[121.540124,31.733307],[121.549509,31.726969],[121.551386,31.727386],[121.565025,31.716711],[121.578539,31.710527],[121.592262,31.706487],[121.593249,31.705379],[121.599659,31.703115],[121.60091,31.707],[121.602746,31.70694],[121.611755,31.704283],[121.627341,31.697776],[121.633278,31.696167],[121.642649,31.697454],[121.715267,31.673842],[121.817806,31.652025],[121.887616,31.63638],[121.975181,31.617034]]],[[[121.778862,31.310196],[121.770951,31.31168],[121.76425,31.315306],[121.76076,31.320344],[121.751166,31.337801],[121.744659,31.343675],[121.740766,31.346486],[121.727933,31.354799],[121.686682,31.376591],[121.641036,31.401115],[121.601425,31.421855],[121.590371,31.427545],[121.572255,31.436066],[121.558463,31.448793],[121.549773,31.457062],[121.54328,31.462403],[121.537413,31.466704],[121.529515,31.471172],[121.516849,31.477313],[121.510134,31.482581],[121.509105,31.485352],[121.509355,31.489795],[121.513457,31.493355],[121.516933,31.494298],[121.521132,31.493976],[121.549926,31.489747],[121.562356,31.486367],[121.567347,31.4835],[121.572811,31.469452],[121.575828,31.463813],[121.58303,31.456262],[121.585561,31.454672],[121.599812,31.450681],[121.606319,31.449403],[121.621752,31.444145],[121.673835,31.427748],[121.688294,31.425883],[121.697193,31.423995],[121.708316,31.419728],[121.723707,31.412364],[121.729296,31.410356],[121.737485,31.408814],[121.742185,31.407212],[121.753725,31.400362],[121.760857,31.395185],[121.76938,31.390749],[121.774135,31.386982],[121.780572,31.380154],[121.787886,31.37164],[121.790875,31.367059],[121.792377,31.363304],[121.793002,31.355074],[121.796005,31.345624],[121.796478,31.33542],[121.795866,31.329976],[121.794073,31.319542],[121.790986,31.314313],[121.7879,31.312003],[121.782004,31.310328],[121.778862,31.310196]]],[[[122.242018,31.419082],[122.245369,31.421318],[122.247149,31.419333],[122.243562,31.417839],[122.242018,31.419082]]],[[[121.801775,31.356976],[121.800566,31.363997],[121.797674,31.369642],[121.792808,31.377571],[121.793864,31.380477],[121.796756,31.381075],[121.803458,31.381219],[121.817445,31.380585],[121.824744,31.378588],[121.828401,31.376447],[121.831752,31.375526],[121.845586,31.374582],[121.852885,31.371376],[121.858516,31.369379],[121.870376,31.366007],[121.913074,31.350445],[121.951726,31.337274],[122.001556,31.329246],[122.04107,31.323814],[122.078012,31.323527],[122.116678,31.321229],[122.121975,31.315438],[122.122684,31.307205],[122.105207,31.262136],[122.097769,31.255658],[122.087285,31.257538],[122.072005,31.266829],[122.016447,31.282285],[121.975779,31.279998],[121.932261,31.283147],[121.900755,31.291167],[121.88959,31.292028],[121.865968,31.294937],[121.860782,31.294949],[121.856681,31.292818],[121.852885,31.292364],[121.840566,31.29544],[121.833601,31.299653],[121.832043,31.301711],[121.822617,31.307372],[121.81319,31.316228],[121.806642,31.324173],[121.80375,31.328445],[121.803152,31.332106],[121.802693,31.342789],[121.801775,31.356976]]],[[[121.627049,31.444993],[121.616872,31.446643],[121.613855,31.447885],[121.594153,31.458568],[121.58627,31.464076],[121.577886,31.472486],[121.57612,31.474768],[121.575814,31.478197],[121.577149,31.479343],[121.586896,31.479535],[121.595293,31.478292],[121.602134,31.476835],[121.608571,31.474446],[121.61366,31.471339],[121.625172,31.462212],[121.631609,31.456823],[121.635044,31.452988],[121.636295,31.449881],[121.634001,31.445937],[121.631512,31.445101],[121.627049,31.444993]]]]}}]}', 'admin', '2020-12-07 19:24:11', NULL, '2020-12-07 19:24:11', '0', NULL); +INSERT INTO `jimu_report_map` VALUES ('1336859680042913794', '北京', 'beijing', '{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"adcode\":110101,\"name\":\"东城区\",\"center\":[116.418757,39.917544],\"centroid\":[116.416739,39.912912],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":0,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.387658,39.96093],[116.389498,39.96314],[116.40788,39.962182],[116.407504,39.973995],[116.411101,39.97146],[116.411415,39.964928],[116.414196,39.962182],[116.424861,39.962279],[116.429002,39.957274],[116.429483,39.950155],[116.436698,39.949245],[116.435422,39.952121],[116.442239,39.9497],[116.440566,39.945295],[116.446338,39.946205],[116.443703,39.936663],[116.443682,39.928664],[116.434314,39.92868],[116.434983,39.913964],[116.436488,39.902042],[116.448722,39.903246],[116.446819,39.900042],[116.447154,39.894186],[116.450876,39.894088],[116.450939,39.890249],[116.444059,39.890038],[116.445648,39.879283],[116.44364,39.87284],[116.442574,39.87188],[116.423209,39.872824],[116.413652,39.871148],[116.41589,39.863645],[116.41246,39.858942],[116.406856,39.859967],[116.3955,39.858682],[116.394956,39.862734],[116.387888,39.867372],[116.380632,39.866054],[116.38059,39.871148],[116.399097,39.872205],[116.397612,39.898675],[116.396086,39.89944],[116.395563,39.907995],[116.392259,39.907881],[116.392175,39.92242],[116.399474,39.923574],[116.396692,39.928306],[116.396169,39.94006],[116.394266,39.940629],[116.393723,39.957371],[116.38678,39.957014],[116.387658,39.96093]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110102,\"name\":\"西城区\",\"center\":[116.366794,39.915309],\"centroid\":[116.365684,39.912236],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":1,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.380903,39.972712],[116.394099,39.972858],[116.394162,39.969397],[116.390084,39.968406],[116.387658,39.96093],[116.38678,39.957014],[116.393723,39.957371],[116.394266,39.940629],[116.396169,39.94006],[116.396692,39.928306],[116.399474,39.923574],[116.392175,39.92242],[116.392259,39.907881],[116.395563,39.907995],[116.396086,39.89944],[116.397612,39.898675],[116.399097,39.872205],[116.38059,39.871148],[116.35058,39.86869],[116.349472,39.873588],[116.344286,39.873653],[116.341567,39.876159],[116.335273,39.875183],[116.326636,39.876859],[116.321345,39.875004],[116.325799,39.896789],[116.337301,39.89739],[116.335356,39.898448],[116.334645,39.922664],[116.333056,39.938565],[116.327953,39.942369],[116.332889,39.944092],[116.341442,39.941979],[116.35171,39.94375],[116.351814,39.950854],[116.355265,39.951796],[116.35698,39.944466],[116.371974,39.948594],[116.370384,39.967902],[116.380401,39.968178],[116.380903,39.972712]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110105,\"name\":\"朝阳区\",\"center\":[116.486409,39.921489],\"centroid\":[116.513687,39.951064],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":2,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.595548,40.01751],[116.60132,40.013873],[116.61989,40.011794],[116.628129,40.007653],[116.625766,40.003122],[116.63273,39.999825],[116.637582,40.002359],[116.642684,39.996755],[116.643751,39.989608],[116.640321,39.990177],[116.639129,39.986879],[116.63365,39.986197],[116.634026,39.981696],[116.639819,39.982606],[116.641827,39.969575],[116.643081,39.952983],[116.645277,39.945977],[116.632228,39.950545],[116.630492,39.946156],[116.633441,39.940906],[116.629677,39.938727],[116.6293,39.931314],[116.624156,39.929981],[116.630576,39.921672],[116.620956,39.923103],[116.623006,39.913818],[116.620245,39.90767],[116.623361,39.904271],[116.621019,39.898854],[116.61531,39.895503],[116.615603,39.889794],[116.627585,39.890477],[116.628987,39.881594],[116.624323,39.881155],[116.62493,39.87725],[116.619994,39.868951],[116.626958,39.860683],[116.613449,39.850185],[116.604185,39.850071],[116.604666,39.846132],[116.608367,39.846539],[116.601905,39.840727],[116.60224,39.831675],[116.598977,39.831659],[116.599228,39.825585],[116.59147,39.826367],[116.591595,39.823875],[116.583732,39.824917],[116.587015,39.828223],[116.577479,39.827539],[116.577145,39.830682],[116.569386,39.833498],[116.558596,39.834687],[116.543664,39.835078],[116.542681,39.830209],[116.533187,39.832733],[116.538143,39.828207],[116.534944,39.82482],[116.525868,39.826904],[116.525366,39.829754],[116.516164,39.829835],[116.510602,39.827637],[116.510142,39.821449],[116.502801,39.819006],[116.505813,39.817866],[116.498201,39.8157],[116.495357,39.818795],[116.485632,39.816889],[116.485256,39.81272],[116.474256,39.809772],[116.468463,39.814511],[116.462775,39.815945],[116.452737,39.823012],[116.443912,39.82096],[116.44592,39.826692],[116.436677,39.827425],[116.43699,39.830649],[116.430068,39.830112],[116.425217,39.831903],[116.432055,39.832929],[116.436739,39.841329],[116.440587,39.839653],[116.442323,39.843674],[116.446694,39.84426],[116.445983,39.848329],[116.450479,39.848704],[116.451148,39.852008],[116.460308,39.848622],[116.467794,39.856012],[116.463319,39.856224],[116.456062,39.86122],[116.454222,39.859381],[116.448178,39.863645],[116.446359,39.860862],[116.442971,39.866087],[116.44364,39.87284],[116.445648,39.879283],[116.444059,39.890038],[116.450939,39.890249],[116.450876,39.894088],[116.447154,39.894186],[116.446819,39.900042],[116.448722,39.903246],[116.436488,39.902042],[116.434983,39.913964],[116.434314,39.92868],[116.443682,39.928664],[116.443703,39.936663],[116.446338,39.946205],[116.440566,39.945295],[116.442239,39.9497],[116.435422,39.952121],[116.436698,39.949245],[116.429483,39.950155],[116.429002,39.957274],[116.424861,39.962279],[116.414196,39.962182],[116.411415,39.964928],[116.411101,39.97146],[116.407504,39.973995],[116.40788,39.962182],[116.389498,39.96314],[116.387658,39.96093],[116.390084,39.968406],[116.394162,39.969397],[116.394099,39.972858],[116.380903,39.972712],[116.381196,39.977976],[116.376554,39.992971],[116.350873,40.0267],[116.378708,40.031181],[116.395103,40.032854],[116.390251,40.036587],[116.390649,40.041279],[116.39297,40.041733],[116.395333,40.036766],[116.405266,40.038974],[116.408884,40.043291],[116.406124,40.049768],[116.409595,40.055626],[116.415618,40.056],[116.433268,40.06228],[116.442867,40.061323],[116.451629,40.058759],[116.45142,40.06129],[116.459408,40.059992],[116.462127,40.06731],[116.458635,40.070377],[116.458823,40.075796],[116.462608,40.076786],[116.461855,40.080825],[116.466247,40.08235],[116.466832,40.090185],[116.471015,40.08939],[116.473545,40.085562],[116.482935,40.083745],[116.486657,40.081036],[116.49933,40.080387],[116.506775,40.074352],[116.513948,40.070426],[116.525993,40.071334],[116.534379,40.066791],[116.543183,40.059408],[116.547784,40.062718],[116.551757,40.059765],[116.552761,40.05488],[116.54655,40.048956],[116.550753,40.045499],[116.564242,40.039655],[116.570474,40.032431],[116.578797,40.033097],[116.577814,40.027512],[116.595548,40.01751]]],[[[116.603683,40.052949],[116.598517,40.052543],[116.601633,40.047658],[116.599417,40.047171],[116.599814,40.041408],[116.590006,40.043616],[116.591198,40.051796],[116.587957,40.05053],[116.590131,40.056162],[116.586597,40.074336],[116.58139,40.073817],[116.581411,40.067846],[116.578149,40.076461],[116.574322,40.096138],[116.574071,40.107815],[116.578316,40.102739],[116.580365,40.088352],[116.595903,40.090218],[116.598705,40.09351],[116.598392,40.103874],[116.602909,40.093883],[116.603473,40.086811],[116.608409,40.054912],[116.603683,40.052949]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110106,\"name\":\"丰台区\",\"center\":[116.286968,39.863642],\"centroid\":[116.250298,39.83569],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":3,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.167033,39.888752],[116.179099,39.882684],[116.19035,39.881529],[116.199426,39.883286],[116.20457,39.879885],[116.208126,39.874125],[116.212099,39.874679],[116.210907,39.878079],[116.219105,39.876713],[116.219523,39.881334],[116.222952,39.883986],[116.22772,39.883839],[116.227783,39.889078],[116.234642,39.88955],[116.233534,39.89212],[116.252899,39.896382],[116.259089,39.896658],[116.266199,39.896252],[116.294975,39.896496],[116.294995,39.886735],[116.29922,39.889566],[116.30656,39.890883],[116.30449,39.892478],[116.313189,39.896772],[116.325799,39.896789],[116.321345,39.875004],[116.326636,39.876859],[116.335273,39.875183],[116.341567,39.876159],[116.344286,39.873653],[116.349472,39.873588],[116.35058,39.86869],[116.38059,39.871148],[116.380632,39.866054],[116.387888,39.867372],[116.394956,39.862734],[116.3955,39.858682],[116.406856,39.859967],[116.41246,39.858942],[116.41589,39.863645],[116.413652,39.871148],[116.423209,39.872824],[116.442574,39.87188],[116.44364,39.87284],[116.442971,39.866087],[116.446359,39.860862],[116.448178,39.863645],[116.454222,39.859381],[116.456062,39.86122],[116.463319,39.856224],[116.467794,39.856012],[116.460308,39.848622],[116.451148,39.852008],[116.450479,39.848704],[116.445983,39.848329],[116.446694,39.84426],[116.442323,39.843674],[116.440587,39.839653],[116.436739,39.841329],[116.432055,39.832929],[116.425217,39.831903],[116.420072,39.826611],[116.415785,39.829428],[116.414426,39.824282],[116.418441,39.822915],[116.419759,39.815375],[116.41016,39.817052],[116.410013,39.811336],[116.415262,39.812525],[116.417772,39.81013],[116.422456,39.81044],[116.425719,39.805358],[116.429399,39.803583],[116.429274,39.794102],[116.421034,39.794134],[116.42024,39.787439],[116.396023,39.786738],[116.397905,39.781068],[116.398888,39.765864],[116.391903,39.765277],[116.390649,39.780465],[116.385609,39.778852],[116.379209,39.77939],[116.378478,39.785646],[116.367582,39.784962],[116.365742,39.794151],[116.368189,39.794819],[116.367039,39.79982],[116.356833,39.800471],[116.355704,39.805668],[116.341755,39.807589],[116.340124,39.802149],[116.328225,39.801416],[116.326824,39.798386],[116.322872,39.798386],[116.321784,39.783626],[116.317978,39.783447],[116.31068,39.772057],[116.307062,39.770085],[116.301541,39.774941],[116.295205,39.790958],[116.291148,39.793271],[116.296083,39.795568],[116.289182,39.795894],[116.287237,39.799103],[116.27423,39.796936],[116.262184,39.792782],[116.259298,39.797621],[116.251519,39.793059],[116.250933,39.801432],[116.25361,39.807231],[116.251644,39.81329],[116.244304,39.818567],[116.243007,39.825145],[116.23962,39.826872],[116.228306,39.827197],[116.227219,39.825048],[116.214127,39.824706],[116.214462,39.818974],[116.216762,39.816905],[116.207415,39.810814],[116.208063,39.806352],[116.201852,39.799657],[116.201852,39.788269],[116.200388,39.778151],[116.194449,39.778493],[116.194407,39.780579],[116.188008,39.781785],[116.183365,39.780204],[116.182989,39.783707],[116.16971,39.784278],[116.166113,39.775039],[116.159923,39.767494],[116.150554,39.766565],[116.143444,39.764381],[116.133427,39.766336],[116.12847,39.762409],[116.121465,39.761626],[116.117491,39.77336],[116.121486,39.779047],[116.124351,39.77675],[116.127467,39.779047],[116.132569,39.778624],[116.131503,39.783121],[116.125062,39.785353],[116.120754,39.784848],[116.119792,39.789654],[116.106366,39.788612],[116.107014,39.78532],[116.101368,39.78576],[116.094613,39.781557],[116.091581,39.784082],[116.091916,39.787927],[116.0856,39.795324],[116.087127,39.803289],[116.084826,39.811596],[116.086186,39.816401],[116.089594,39.816352],[116.088214,39.82692],[116.089741,39.829721],[116.085747,39.832163],[116.084366,39.828581],[116.078615,39.831593],[116.07619,39.837015],[116.068975,39.840792],[116.061488,39.841899],[116.05465,39.845953],[116.056553,39.85095],[116.070982,39.853717],[116.070188,39.860423],[116.067344,39.865761],[116.07046,39.868446],[116.078323,39.870318],[116.087169,39.866152],[116.095826,39.869032],[116.104149,39.868837],[116.105425,39.872547],[116.112242,39.873247],[116.119729,39.877477],[116.125898,39.877949],[116.13167,39.881268],[116.147605,39.885287],[116.150972,39.884051],[116.156137,39.889029],[116.163352,39.886881],[116.167033,39.888752]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110107,\"name\":\"石景山区\",\"center\":[116.195445,39.914601],\"centroid\":[116.176243,39.9332],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":4,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.259089,39.896658],[116.252899,39.896382],[116.233534,39.89212],[116.234642,39.88955],[116.227783,39.889078],[116.22772,39.883839],[116.222952,39.883986],[116.219523,39.881334],[116.219105,39.876713],[116.210907,39.878079],[116.212099,39.874679],[116.208126,39.874125],[116.20457,39.879885],[116.199426,39.883286],[116.19035,39.881529],[116.179099,39.882684],[116.167033,39.888752],[116.161094,39.896805],[116.153503,39.900985],[116.152792,39.906629],[116.146852,39.910077],[116.139282,39.922095],[116.13029,39.924518],[116.127341,39.926615],[116.127822,39.930338],[116.124769,39.934907],[116.119875,39.932761],[116.11195,39.942921],[116.114522,39.949196],[116.120545,39.951],[116.115254,39.957745],[116.120712,39.96119],[116.122971,39.967561],[116.116592,39.971932],[116.113455,39.981518],[116.118934,39.986115],[116.144678,39.989186],[116.151579,39.993442],[116.156117,39.989137],[116.158124,39.984133],[116.166845,39.987561],[116.169229,39.979357],[116.171487,39.977001],[116.178012,39.982216],[116.178911,39.988292],[116.186586,39.983906],[116.18531,39.977976],[116.185812,39.970274],[116.190685,39.968259],[116.190747,39.965367],[116.20112,39.961109],[116.212831,39.948952],[116.215466,39.94375],[116.216281,39.936386],[116.213186,39.933232],[116.216198,39.931233],[116.213061,39.928891],[116.215696,39.927103],[116.207707,39.9259],[116.206787,39.916663],[116.230899,39.919525],[116.232426,39.91694],[116.237696,39.918452],[116.250975,39.919834],[116.252983,39.915558],[116.252983,39.896951],[116.259089,39.896658]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110108,\"name\":\"海淀区\",\"center\":[116.310316,39.956074],\"centroid\":[116.233161,40.026971],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":5,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.259089,39.896658],[116.252983,39.896951],[116.252983,39.915558],[116.250975,39.919834],[116.237696,39.918452],[116.232426,39.91694],[116.230899,39.919525],[116.206787,39.916663],[116.207707,39.9259],[116.215696,39.927103],[116.213061,39.928891],[116.216198,39.931233],[116.213186,39.933232],[116.216281,39.936386],[116.215466,39.94375],[116.212831,39.948952],[116.20112,39.961109],[116.190747,39.965367],[116.190685,39.968259],[116.185812,39.970274],[116.18531,39.977976],[116.186586,39.983906],[116.178911,39.988292],[116.178012,39.982216],[116.171487,39.977001],[116.169229,39.979357],[116.166845,39.987561],[116.158124,39.984133],[116.156117,39.989137],[116.151579,39.993442],[116.154527,39.997275],[116.161658,39.999987],[116.172115,40.000637],[116.175335,40.006403],[116.164774,40.014328],[116.163938,40.016796],[116.157309,40.021034],[116.149278,40.022154],[116.140098,40.02873],[116.129558,40.0311],[116.123598,40.029655],[116.114522,40.033],[116.105488,40.032204],[116.098398,40.033811],[116.095073,40.031782],[116.084241,40.030905],[116.078176,40.032756],[116.075123,40.039915],[116.068055,40.051926],[116.071129,40.062037],[116.064981,40.067456],[116.064019,40.073022],[116.054587,40.07823],[116.051325,40.084345],[116.048878,40.085303],[116.051848,40.091661],[116.055905,40.09643],[116.061969,40.09956],[116.062931,40.10282],[116.069456,40.104912],[116.072676,40.109258],[116.073847,40.115436],[116.077883,40.115047],[116.08445,40.120252],[116.089783,40.119327],[116.096056,40.121257],[116.102246,40.115987],[116.105864,40.118014],[116.113309,40.115598],[116.127676,40.116393],[116.132214,40.115079],[116.132925,40.121354],[116.152708,40.121776],[116.169563,40.124564],[116.167409,40.128455],[116.17178,40.127936],[116.168622,40.135442],[116.167681,40.141844],[116.174122,40.143595],[116.180417,40.14729],[116.183094,40.153335],[116.182696,40.158099],[116.192065,40.155669],[116.194282,40.160076],[116.202166,40.160984],[116.203211,40.153773],[116.205658,40.150175],[116.206285,40.143092],[116.212224,40.140548],[116.215445,40.143174],[116.233785,40.136577],[116.247043,40.136204],[116.245036,40.118825],[116.241836,40.118403],[116.243363,40.113279],[116.240498,40.108009],[116.245956,40.10535],[116.252732,40.106517],[116.255868,40.104474],[116.25957,40.106907],[116.258022,40.11195],[116.263334,40.110588],[116.263899,40.10402],[116.258273,40.101522],[116.265237,40.094694],[116.27333,40.09557],[116.2731,40.092699],[116.279897,40.079754],[116.290353,40.083145],[116.302942,40.060803],[116.305995,40.063043],[116.309446,40.060609],[116.318292,40.061663],[116.325946,40.054799],[116.338828,40.058921],[116.340271,40.055091],[116.343366,40.055448],[116.342676,40.059635],[116.346963,40.06043],[116.34667,40.063659],[116.357293,40.066012],[116.363023,40.065931],[116.363149,40.068965],[116.372538,40.06843],[116.373354,40.065623],[116.381928,40.066402],[116.382848,40.061582],[116.379272,40.059002],[116.372267,40.05785],[116.372999,40.054344],[116.367394,40.053436],[116.36959,40.04696],[116.376114,40.045466],[116.376888,40.042756],[116.38519,40.042853],[116.390649,40.041279],[116.390251,40.036587],[116.395103,40.032854],[116.378708,40.031181],[116.350873,40.0267],[116.376554,39.992971],[116.381196,39.977976],[116.380903,39.972712],[116.380401,39.968178],[116.370384,39.967902],[116.371974,39.948594],[116.35698,39.944466],[116.355265,39.951796],[116.351814,39.950854],[116.35171,39.94375],[116.341442,39.941979],[116.332889,39.944092],[116.327953,39.942369],[116.333056,39.938565],[116.334645,39.922664],[116.335356,39.898448],[116.337301,39.89739],[116.325799,39.896789],[116.313189,39.896772],[116.30449,39.892478],[116.30656,39.890883],[116.29922,39.889566],[116.294995,39.886735],[116.294975,39.896496],[116.266199,39.896252],[116.259089,39.896658]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110109,\"name\":\"门头沟区\",\"center\":[116.105381,39.937183],\"centroid\":[115.791703,39.994114],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":6,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[115.853348,40.149332],[115.856547,40.147468],[115.865184,40.148635],[115.870768,40.144276],[115.874155,40.14387],[115.8816,40.139073],[115.900442,40.138716],[115.904457,40.136123],[115.906549,40.138181],[115.921438,40.134485],[115.933588,40.124824],[115.947913,40.107409],[115.943229,40.103339],[115.952681,40.10102],[115.956717,40.096041],[115.957449,40.100679],[115.962552,40.10235],[115.962092,40.094419],[115.960461,40.092456],[115.966588,40.084556],[115.968575,40.075488],[115.977232,40.079041],[115.979993,40.081669],[115.986434,40.083469],[115.99735,40.082074],[116.005129,40.079803],[116.007785,40.080614],[116.020856,40.074579],[116.030914,40.082188],[116.033926,40.079657],[116.037899,40.084524],[116.043775,40.083502],[116.048878,40.085303],[116.051325,40.084345],[116.054587,40.07823],[116.064019,40.073022],[116.064981,40.067456],[116.071129,40.062037],[116.068055,40.051926],[116.075123,40.039915],[116.078176,40.032756],[116.084241,40.030905],[116.095073,40.031782],[116.098398,40.033811],[116.105488,40.032204],[116.114522,40.033],[116.123598,40.029655],[116.129558,40.0311],[116.140098,40.02873],[116.149278,40.022154],[116.157309,40.021034],[116.163938,40.016796],[116.164774,40.014328],[116.175335,40.006403],[116.172115,40.000637],[116.161658,39.999987],[116.154527,39.997275],[116.151579,39.993442],[116.144678,39.989186],[116.118934,39.986115],[116.113455,39.981518],[116.116592,39.971932],[116.122971,39.967561],[116.120712,39.96119],[116.115254,39.957745],[116.120545,39.951],[116.114522,39.949196],[116.11195,39.942921],[116.119875,39.932761],[116.124769,39.934907],[116.127822,39.930338],[116.127341,39.926615],[116.13029,39.924518],[116.139282,39.922095],[116.146852,39.910077],[116.152792,39.906629],[116.153503,39.900985],[116.161094,39.896805],[116.167033,39.888752],[116.163352,39.886881],[116.156137,39.889029],[116.150972,39.884051],[116.147605,39.885287],[116.13167,39.881268],[116.125898,39.877949],[116.119729,39.877477],[116.112242,39.873247],[116.105425,39.872547],[116.104149,39.868837],[116.095826,39.869032],[116.087169,39.866152],[116.078323,39.870318],[116.07046,39.868446],[116.067344,39.865761],[116.070188,39.860423],[116.070982,39.853717],[116.056553,39.85095],[116.05465,39.845953],[116.045825,39.84732],[116.04181,39.844878],[116.033089,39.845904],[116.030308,39.843462],[116.021023,39.840662],[116.018367,39.841525],[116.016694,39.849225],[116.00789,39.849469],[115.991285,39.840222],[115.98428,39.849111],[115.98817,39.859837],[115.986789,39.864703],[115.992875,39.867356],[115.997245,39.875167],[115.990177,39.876338],[115.97627,39.870497],[115.976563,39.868251],[115.968742,39.867714],[115.967822,39.872059],[115.961318,39.867877],[115.954145,39.866786],[115.949837,39.871278],[115.92744,39.876192],[115.921856,39.884164],[115.935805,39.898236],[115.944965,39.901847],[115.945697,39.910972],[115.941159,39.917509],[115.935868,39.917753],[115.927858,39.914257],[115.903935,39.914029],[115.890112,39.917281],[115.87884,39.915964],[115.87311,39.912484],[115.868321,39.905572],[115.860897,39.901359],[115.845255,39.897049],[115.838772,39.900644],[115.835112,39.899586],[115.826914,39.910581],[115.8188,39.913948],[115.811084,39.913785],[115.806839,39.919656],[115.797344,39.92216],[115.792848,39.920859],[115.774257,39.920599],[115.769385,39.925233],[115.76148,39.920989],[115.749622,39.917655],[115.74889,39.9152],[115.731261,39.907865],[115.721621,39.906824],[115.719592,39.904612],[115.709178,39.905117],[115.691779,39.8997],[115.68929,39.896187],[115.682556,39.893047],[115.678144,39.886556],[115.671055,39.88597],[115.667541,39.883888],[115.654869,39.882505],[115.648867,39.875411],[115.644705,39.875964],[115.640021,39.871554],[115.630987,39.871977],[115.623103,39.866949],[115.621973,39.863271],[115.616369,39.857542],[115.613086,39.843755],[115.607586,39.84089],[115.604533,39.834443],[115.599325,39.829151],[115.596649,39.821498],[115.59117,39.818534],[115.587322,39.813762],[115.577367,39.812541],[115.569274,39.813274],[115.563461,39.816417],[115.548027,39.822703],[115.546396,39.825992],[115.534957,39.830714],[115.530482,39.829916],[115.526509,39.835241],[115.514505,39.83835],[115.510992,39.84509],[115.515948,39.847678],[115.522368,39.858779],[115.521929,39.868186],[115.527345,39.869862],[115.529185,39.875948],[115.526299,39.875655],[115.516659,39.880406],[115.51003,39.88148],[115.509026,39.884164],[115.523016,39.898919],[115.52013,39.902547],[115.50386,39.915818],[115.494994,39.917948],[115.487277,39.923835],[115.48069,39.93585],[115.472387,39.93876],[115.464462,39.940142],[115.456787,39.944271],[115.452312,39.948188],[115.447042,39.948806],[115.444595,39.951358],[115.438468,39.95256],[115.43577,39.950919],[115.42615,39.95035],[115.423745,39.955697],[115.426924,39.965302],[115.423411,39.969819],[115.427635,39.979471],[115.428513,39.984328],[115.436815,39.991427],[115.443905,39.994644],[115.450346,39.993247],[115.449196,40.001985],[115.442817,40.007345],[115.442169,40.010885],[115.452082,40.02079],[115.454528,40.029704],[115.460656,40.032172],[115.468414,40.031896],[115.478557,40.036165],[115.488992,40.043746],[115.488323,40.046132],[115.500954,40.052478],[115.510427,40.062913],[115.509695,40.065477],[115.514944,40.066937],[115.527324,40.076072],[115.537885,40.077775],[115.544263,40.07591],[115.552168,40.079252],[115.555472,40.082626],[115.553736,40.091661],[115.563419,40.097922],[115.567769,40.096543],[115.576196,40.100825],[115.578538,40.096365],[115.584038,40.094889],[115.590709,40.096397],[115.592403,40.110182],[115.594432,40.108982],[115.59485,40.116279],[115.599116,40.120008],[115.606979,40.120057],[115.616223,40.117138],[115.621388,40.118711],[115.625048,40.116295],[115.631468,40.117852],[115.635943,40.115793],[115.643722,40.117511],[115.641882,40.120819],[115.64458,40.126639],[115.654806,40.131276],[115.657734,40.128098],[115.678667,40.130935],[115.681197,40.13267],[115.68699,40.13053],[115.693096,40.131924],[115.697216,40.12672],[115.702172,40.128196],[115.712064,40.126899],[115.711039,40.128941],[115.704765,40.129655],[115.699746,40.132394],[115.708697,40.134291],[115.715891,40.133383],[115.724841,40.128812],[115.734126,40.129379],[115.741111,40.132216],[115.749246,40.137711],[115.75485,40.145459],[115.749539,40.152995],[115.754328,40.163252],[115.762212,40.16262],[115.768213,40.165553],[115.773023,40.176197],[115.787014,40.178708],[115.78693,40.170414],[115.789837,40.168939],[115.802091,40.156754],[115.806567,40.153254],[115.822272,40.152606],[115.829047,40.149981],[115.83576,40.145426],[115.834234,40.15024],[115.846384,40.147096],[115.853348,40.149332]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110111,\"name\":\"房山区\",\"center\":[116.139157,39.735535],\"centroid\":[115.853935,39.719211],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":7,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.05465,39.845953],[116.061488,39.841899],[116.068975,39.840792],[116.07619,39.837015],[116.078615,39.831593],[116.084366,39.828581],[116.085747,39.832163],[116.089741,39.829721],[116.088214,39.82692],[116.089594,39.816352],[116.086186,39.816401],[116.084826,39.811596],[116.087127,39.803289],[116.0856,39.795324],[116.091916,39.787927],[116.091581,39.784082],[116.094613,39.781557],[116.101368,39.78576],[116.107014,39.78532],[116.106366,39.788612],[116.119792,39.789654],[116.120754,39.784848],[116.125062,39.785353],[116.131503,39.783121],[116.132569,39.778624],[116.127467,39.779047],[116.124351,39.77675],[116.121486,39.779047],[116.117491,39.77336],[116.121465,39.761626],[116.12847,39.762409],[116.133427,39.766336],[116.143444,39.764381],[116.150554,39.766565],[116.159923,39.767494],[116.166113,39.775039],[116.16971,39.784278],[116.182989,39.783707],[116.183365,39.780204],[116.188008,39.781785],[116.194407,39.780579],[116.194449,39.778493],[116.200388,39.778151],[116.201852,39.788269],[116.201852,39.799657],[116.208063,39.806352],[116.207415,39.810814],[116.216762,39.816905],[116.214462,39.818974],[116.214127,39.824706],[116.227219,39.825048],[116.228306,39.827197],[116.23962,39.826872],[116.243007,39.825145],[116.244304,39.818567],[116.251644,39.81329],[116.25361,39.807231],[116.250933,39.801432],[116.251519,39.793059],[116.251602,39.782518],[116.253777,39.77952],[116.252481,39.771747],[116.254426,39.76324],[116.252481,39.758676],[116.251895,39.749092],[116.243948,39.741658],[116.248026,39.732641],[116.248466,39.728027],[116.245768,39.72408],[116.245036,39.718421],[116.236629,39.71286],[116.231945,39.706025],[116.23435,39.703823],[116.230941,39.692355],[116.221238,39.678453],[116.22565,39.67359],[116.221342,39.667486],[116.223162,39.664728],[116.216992,39.651572],[116.215487,39.64305],[116.218875,39.628011],[116.219502,39.618931],[116.21808,39.608102],[116.223141,39.597222],[116.222597,39.593938],[116.226089,39.591993],[116.225085,39.584085],[116.221175,39.578921],[116.208105,39.577728],[116.206243,39.583219],[116.201726,39.586373],[116.196394,39.586095],[116.196854,39.588987],[116.19058,39.587386],[116.190768,39.589396],[116.184432,39.590915],[116.177071,39.590016],[116.176924,39.585899],[116.165527,39.583562],[116.151788,39.583415],[116.149613,39.573087],[116.13878,39.571044],[116.138425,39.568887],[116.130373,39.567743],[116.130311,39.569459],[116.121528,39.570554],[116.121465,39.574917],[116.116634,39.574002],[116.11379,39.570668],[116.106282,39.570979],[116.105801,39.576568],[116.101368,39.580049],[116.102016,39.576143],[116.098817,39.575146],[116.039237,39.571943],[116.032964,39.572302],[116.032859,39.574607],[116.024766,39.575604],[116.02623,39.587402],[116.020667,39.585981],[116.014038,39.588072],[116.013703,39.583039],[116.010588,39.583023],[116.007618,39.577205],[115.995196,39.577075],[115.996953,39.583203],[115.990721,39.586471],[115.990993,39.593791],[115.978445,39.595686],[115.977086,39.590931],[115.978153,39.572842],[115.974576,39.570832],[115.968909,39.570995],[115.967592,39.564604],[115.963409,39.565503],[115.957554,39.560927],[115.954982,39.566092],[115.950423,39.56637],[115.949147,39.573299],[115.943083,39.574672],[115.943187,39.577385],[115.937938,39.577467],[115.938105,39.581699],[115.934969,39.581814],[115.934174,39.588072],[115.929991,39.589935],[115.930221,39.593382],[115.924178,39.59384],[115.923759,39.597287],[115.912488,39.599149],[115.910187,39.600832],[115.9068,39.590016],[115.909665,39.588284],[115.908744,39.58402],[115.915604,39.582958],[115.911777,39.574182],[115.91276,39.572842],[115.907866,39.566876],[115.896009,39.569916],[115.890028,39.567873],[115.893416,39.561875],[115.89306,39.556219],[115.888752,39.555614],[115.887686,39.55066],[115.883587,39.551102],[115.88296,39.54811],[115.873298,39.548829],[115.872315,39.546099],[115.866355,39.546361],[115.866041,39.549843],[115.862026,39.548551],[115.855481,39.554993],[115.851361,39.550448],[115.847555,39.550284],[115.846028,39.543287],[115.84216,39.54157],[115.828692,39.541309],[115.828399,39.535455],[115.824321,39.534212],[115.822753,39.530533],[115.819219,39.530762],[115.819804,39.524923],[115.824112,39.522405],[115.824447,39.518774],[115.819762,39.518528],[115.822146,39.514145],[115.829487,39.512885],[115.828692,39.507045],[115.821456,39.509499],[115.792681,39.510742],[115.785006,39.51035],[115.777917,39.513834],[115.776537,39.512722],[115.767419,39.515862],[115.770828,39.510971],[115.768736,39.508878],[115.765328,39.514848],[115.759451,39.513916],[115.752508,39.515453],[115.743934,39.526771],[115.741487,39.536289],[115.73879,39.539314],[115.739124,39.545363],[115.726765,39.548143],[115.726953,39.543908],[115.7216,39.543499],[115.72022,39.554747],[115.717104,39.560403],[115.710161,39.563019],[115.698722,39.563248],[115.692072,39.565781],[115.694393,39.56941],[115.698596,39.570586],[115.697906,39.579248],[115.693431,39.580327],[115.694226,39.587778],[115.689269,39.592941],[115.68929,39.599035],[115.685317,39.603675],[115.673271,39.608526],[115.667479,39.615256],[115.667583,39.609637],[115.665304,39.605325],[115.657273,39.600081],[115.650268,39.600996],[115.643576,39.598937],[115.641589,39.603332],[115.634688,39.603871],[115.632555,39.597695],[115.625947,39.599394],[115.618439,39.604067],[115.6125,39.601126],[115.605285,39.600032],[115.599785,39.600865],[115.598719,39.597761],[115.592445,39.59665],[115.586109,39.589412],[115.571867,39.591569],[115.573875,39.596552],[115.567267,39.599623],[115.564569,39.605619],[115.55451,39.609408],[115.551875,39.614064],[115.545978,39.618751],[115.539119,39.616285],[115.533263,39.611434],[115.533891,39.608608],[115.530586,39.602874],[115.524229,39.598937],[115.518311,39.597156],[115.518834,39.593072],[115.515948,39.591193],[115.512121,39.605129],[115.514358,39.613508],[115.523414,39.620384],[115.521699,39.622311],[115.520423,39.633416],[115.522452,39.639964],[115.515864,39.641237],[115.511493,39.644388],[115.506705,39.652127],[115.496771,39.652551],[115.494659,39.649237],[115.478515,39.650331],[115.477971,39.654216],[115.482593,39.66303],[115.491334,39.668694],[115.486733,39.673362],[115.489724,39.678012],[115.488783,39.681619],[115.494408,39.686481],[115.496395,39.685665],[115.499783,39.691278],[115.49926,39.696189],[115.492631,39.701719],[115.490247,39.701409],[115.493404,39.707494],[115.491229,39.714719],[115.488866,39.733163],[115.492108,39.73887],[115.482321,39.742473],[115.470568,39.742391],[115.46672,39.740451],[115.457728,39.744918],[115.439158,39.752678],[115.434411,39.763859],[115.435414,39.769938],[115.430918,39.772073],[115.427029,39.769775],[115.425209,39.77336],[115.431169,39.775756],[115.434076,39.782274],[115.443382,39.785646],[115.452751,39.781964],[115.45777,39.782143],[115.475859,39.791821],[115.483241,39.798679],[115.49238,39.796057],[115.497336,39.791088],[115.508712,39.784082],[115.513815,39.788693],[115.536275,39.792131],[115.539432,39.794754],[115.554866,39.795601],[115.56229,39.803713],[115.566577,39.804609],[115.566367,39.809788],[115.569274,39.813274],[115.577367,39.812541],[115.587322,39.813762],[115.59117,39.818534],[115.596649,39.821498],[115.599325,39.829151],[115.604533,39.834443],[115.607586,39.84089],[115.613086,39.843755],[115.616369,39.857542],[115.621973,39.863271],[115.623103,39.866949],[115.630987,39.871977],[115.640021,39.871554],[115.644705,39.875964],[115.648867,39.875411],[115.654869,39.882505],[115.667541,39.883888],[115.671055,39.88597],[115.678144,39.886556],[115.682556,39.893047],[115.68929,39.896187],[115.691779,39.8997],[115.709178,39.905117],[115.719592,39.904612],[115.721621,39.906824],[115.731261,39.907865],[115.74889,39.9152],[115.749622,39.917655],[115.76148,39.920989],[115.769385,39.925233],[115.774257,39.920599],[115.792848,39.920859],[115.797344,39.92216],[115.806839,39.919656],[115.811084,39.913785],[115.8188,39.913948],[115.826914,39.910581],[115.835112,39.899586],[115.838772,39.900644],[115.845255,39.897049],[115.860897,39.901359],[115.868321,39.905572],[115.87311,39.912484],[115.87884,39.915964],[115.890112,39.917281],[115.903935,39.914029],[115.927858,39.914257],[115.935868,39.917753],[115.941159,39.917509],[115.945697,39.910972],[115.944965,39.901847],[115.935805,39.898236],[115.921856,39.884164],[115.92744,39.876192],[115.949837,39.871278],[115.954145,39.866786],[115.961318,39.867877],[115.967822,39.872059],[115.968742,39.867714],[115.976563,39.868251],[115.97627,39.870497],[115.990177,39.876338],[115.997245,39.875167],[115.992875,39.867356],[115.986789,39.864703],[115.98817,39.859837],[115.98428,39.849111],[115.991285,39.840222],[116.00789,39.849469],[116.016694,39.849225],[116.018367,39.841525],[116.021023,39.840662],[116.030308,39.843462],[116.033089,39.845904],[116.04181,39.844878],[116.045825,39.84732],[116.05465,39.845953]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110112,\"name\":\"通州区\",\"center\":[116.658603,39.902486],\"centroid\":[116.73624,39.803923],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":8,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.534944,39.82482],[116.538143,39.828207],[116.533187,39.832733],[116.542681,39.830209],[116.543664,39.835078],[116.558596,39.834687],[116.569386,39.833498],[116.577145,39.830682],[116.577479,39.827539],[116.587015,39.828223],[116.583732,39.824917],[116.591595,39.823875],[116.59147,39.826367],[116.599228,39.825585],[116.598977,39.831659],[116.60224,39.831675],[116.601905,39.840727],[116.608367,39.846539],[116.604666,39.846132],[116.604185,39.850071],[116.613449,39.850185],[116.626958,39.860683],[116.619994,39.868951],[116.62493,39.87725],[116.624323,39.881155],[116.628987,39.881594],[116.627585,39.890477],[116.615603,39.889794],[116.61531,39.895503],[116.621019,39.898854],[116.623361,39.904271],[116.620245,39.90767],[116.623006,39.913818],[116.620956,39.923103],[116.630576,39.921672],[116.624156,39.929981],[116.6293,39.931314],[116.629677,39.938727],[116.633441,39.940906],[116.630492,39.946156],[116.632228,39.950545],[116.645277,39.945977],[116.643081,39.952983],[116.641827,39.969575],[116.639819,39.982606],[116.634026,39.981696],[116.63365,39.986197],[116.639129,39.986879],[116.640321,39.990177],[116.643751,39.989608],[116.642684,39.996755],[116.637582,40.002359],[116.63273,39.999825],[116.625766,40.003122],[116.628129,40.007653],[116.61989,40.011794],[116.60132,40.013873],[116.595548,40.01751],[116.600839,40.018858],[116.602762,40.028503],[116.610061,40.031214],[116.614055,40.03175],[116.614139,40.028178],[116.619388,40.026733],[116.620099,40.022512],[116.624239,40.023664],[116.627063,40.021505],[116.633504,40.023664],[116.636159,40.019703],[116.651195,40.025759],[116.651676,40.021911],[116.655629,40.018566],[116.660125,40.021651],[116.664705,40.019037],[116.668615,40.013938],[116.678465,40.015058],[116.683777,40.014458],[116.686286,40.00827],[116.688378,40.00918],[116.685575,40.016569],[116.697244,40.016098],[116.703936,40.020141],[116.708621,40.026587],[116.716337,40.023762],[116.717383,40.019605],[116.719725,40.022512],[116.724221,40.021278],[116.724828,40.024265],[116.732043,40.022219],[116.732335,40.025109],[116.737145,40.02761],[116.747058,40.025385],[116.747037,40.021976],[116.751763,40.019962],[116.75329,40.015919],[116.764791,40.016049],[116.771755,40.014474],[116.770459,40.011632],[116.775749,40.002943],[116.775373,39.992759],[116.766757,39.982281],[116.766443,39.976351],[116.759605,39.969933],[116.757326,39.961483],[116.762826,39.956006],[116.78058,39.949716],[116.782567,39.947554],[116.78332,39.936045],[116.782358,39.928273],[116.78217,39.910419],[116.78424,39.902221],[116.7847,39.89142],[116.787084,39.886833],[116.794738,39.881252],[116.804148,39.877933],[116.804253,39.88488],[116.808247,39.884913],[116.80831,39.889631],[116.812304,39.889712],[116.81312,39.881301],[116.817009,39.878649],[116.823681,39.879137],[116.827277,39.877071],[116.836897,39.864736],[116.839407,39.865777],[116.847249,39.858616],[116.85254,39.859056],[116.85829,39.84846],[116.865505,39.846913],[116.866049,39.843902],[116.871507,39.842062],[116.878638,39.842257],[116.878304,39.84522],[116.885665,39.844585],[116.897501,39.832587],[116.903357,39.830682],[116.907581,39.834117],[116.902896,39.841346],[116.902813,39.848248],[116.910383,39.850608],[116.917431,39.846913],[116.9259,39.835403],[116.92887,39.820912],[116.92818,39.814153],[116.92979,39.811368],[116.942881,39.801677],[116.934809,39.801139],[116.938301,39.793124],[116.950828,39.791528],[116.953797,39.78607],[116.948004,39.785369],[116.94974,39.778542],[116.945788,39.777369],[116.939284,39.781361],[116.933784,39.781801],[116.921718,39.780628],[116.91649,39.775935],[116.920902,39.769107],[116.910613,39.762278],[116.908292,39.766711],[116.901809,39.763615],[116.901558,39.755204],[116.907163,39.75597],[116.913185,39.745962],[116.914461,39.741755],[116.910718,39.740989],[116.912934,39.73569],[116.916364,39.73587],[116.916678,39.731353],[116.911533,39.731516],[116.90229,39.729413],[116.89976,39.726168],[116.887589,39.725515],[116.8828,39.71847],[116.887108,39.714311],[116.886376,39.707004],[116.893841,39.695879],[116.89336,39.693187],[116.887819,39.690952],[116.88991,39.687656],[116.902896,39.690576],[116.909024,39.682859],[116.905197,39.681651],[116.906661,39.677425],[116.891144,39.67408],[116.883239,39.675352],[116.87318,39.671387],[116.863979,39.670391],[116.860486,39.667258],[116.849946,39.667552],[116.85141,39.652845],[116.839135,39.647523],[116.840766,39.644241],[116.833572,39.644127],[116.834555,39.641841],[116.826901,39.638217],[116.82893,39.635163],[116.826357,39.633122],[116.838445,39.62223],[116.834116,39.621495],[116.835391,39.617004],[116.82504,39.613884],[116.823994,39.617183],[116.81954,39.618996],[116.809711,39.614521],[116.802078,39.6123],[116.790012,39.610535],[116.792835,39.602155],[116.789384,39.602596],[116.790702,39.596045],[116.785474,39.596209],[116.785055,39.593497],[116.778196,39.593382],[116.774892,39.599166],[116.774202,39.605439],[116.762616,39.613819],[116.748689,39.619943],[116.744004,39.616824],[116.737877,39.61537],[116.730516,39.619143],[116.730202,39.622932],[116.725518,39.624075],[116.721398,39.629415],[116.723489,39.639033],[116.716003,39.640356],[116.710419,39.639686],[116.70609,39.642903],[116.702891,39.649923],[116.702138,39.657644],[116.704857,39.667192],[116.703769,39.674145],[116.693543,39.674944],[116.692706,39.676789],[116.685554,39.676886],[116.680786,39.674896],[116.675203,39.676234],[116.668574,39.674602],[116.666022,39.679693],[116.669577,39.683642],[116.666566,39.687101],[116.65818,39.68857],[116.658097,39.686155],[116.651321,39.687868],[116.651509,39.694459],[116.647097,39.694786],[116.64626,39.700447],[116.647912,39.703579],[116.653098,39.703823],[116.652994,39.708619],[116.644587,39.709647],[116.638502,39.717166],[116.637623,39.723934],[116.631203,39.722971],[116.628129,39.727749],[116.621646,39.728076],[116.621876,39.725825],[116.616251,39.725581],[116.609141,39.719367],[116.604561,39.718731],[116.604017,39.714752],[116.598371,39.711963],[116.590194,39.711522],[116.590152,39.713349],[116.581202,39.712517],[116.579884,39.710234],[116.573464,39.709125],[116.573276,39.714507],[116.544961,39.715045],[116.535676,39.711881],[116.530552,39.713268],[116.53256,39.71529],[116.527332,39.716578],[116.52936,39.719808],[116.534609,39.718079],[116.536972,39.72152],[116.53783,39.728043],[116.531849,39.730016],[116.532413,39.73962],[116.537997,39.738071],[116.53624,39.740663],[116.527562,39.743304],[116.536408,39.753917],[116.540716,39.760502],[116.548119,39.765554],[116.561565,39.771111],[116.576957,39.771943],[116.594377,39.776685],[116.574677,39.798386],[116.565078,39.793988],[116.562423,39.796936],[116.555145,39.793548],[116.546634,39.803501],[116.538373,39.81513],[116.533375,39.819658],[116.539586,39.821563],[116.534944,39.82482]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110113,\"name\":\"顺义区\",\"center\":[116.653525,40.128936],\"centroid\":[116.726467,40.152366],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":9,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.771755,40.014474],[116.764791,40.016049],[116.75329,40.015919],[116.751763,40.019962],[116.747037,40.021976],[116.747058,40.025385],[116.737145,40.02761],[116.732335,40.025109],[116.732043,40.022219],[116.724828,40.024265],[116.724221,40.021278],[116.719725,40.022512],[116.717383,40.019605],[116.716337,40.023762],[116.708621,40.026587],[116.703936,40.020141],[116.697244,40.016098],[116.685575,40.016569],[116.688378,40.00918],[116.686286,40.00827],[116.683777,40.014458],[116.678465,40.015058],[116.668615,40.013938],[116.664705,40.019037],[116.660125,40.021651],[116.655629,40.018566],[116.651676,40.021911],[116.651195,40.025759],[116.636159,40.019703],[116.633504,40.023664],[116.627063,40.021505],[116.624239,40.023664],[116.620099,40.022512],[116.619388,40.026733],[116.614139,40.028178],[116.614055,40.03175],[116.610061,40.031214],[116.603683,40.052949],[116.608409,40.054912],[116.603473,40.086811],[116.602909,40.093883],[116.598392,40.103874],[116.598705,40.09351],[116.595903,40.090218],[116.580365,40.088352],[116.578316,40.102739],[116.574071,40.107815],[116.574322,40.096138],[116.578149,40.076461],[116.551757,40.059765],[116.547784,40.062718],[116.543183,40.059408],[116.534379,40.066791],[116.525993,40.071334],[116.513948,40.070426],[116.506775,40.074352],[116.49933,40.080387],[116.486657,40.081036],[116.482935,40.083745],[116.473545,40.085562],[116.471015,40.08939],[116.466832,40.090185],[116.466498,40.094954],[116.473357,40.097516],[116.480885,40.096965],[116.489292,40.101668],[116.492199,40.111561],[116.487222,40.124678],[116.484754,40.140078],[116.482307,40.140629],[116.480781,40.14742],[116.490777,40.148992],[116.492303,40.156981],[116.484629,40.160465],[116.477916,40.159979],[116.476912,40.163576],[116.480802,40.171937],[116.483332,40.171742],[116.485151,40.176764],[116.490129,40.181316],[116.487975,40.184686],[116.488016,40.191796],[116.484503,40.196493],[116.472249,40.205092],[116.473712,40.221203],[116.477979,40.225201],[116.483771,40.225185],[116.481094,40.238248],[116.482098,40.245385],[116.493705,40.251179],[116.501024,40.251599],[116.503011,40.25969],[116.505959,40.261356],[116.509201,40.258056],[116.523965,40.257522],[116.526181,40.261324],[116.535717,40.261373],[116.540088,40.267165],[116.53693,40.277178],[116.540904,40.274946],[116.546236,40.276224],[116.552176,40.27383],[116.566187,40.27802],[116.565371,40.273377],[116.570516,40.273102],[116.570202,40.268863],[116.58254,40.268362],[116.585238,40.266226],[116.588396,40.269462],[116.590842,40.264139],[116.599647,40.265385],[116.600755,40.258978],[116.604624,40.256146],[116.603787,40.251324],[116.61324,40.251761],[116.622044,40.250467],[116.6238,40.252667],[116.623654,40.26058],[116.63526,40.261454],[116.637038,40.25846],[116.641492,40.259463],[116.643081,40.25715],[116.648519,40.260143],[116.666901,40.262085],[116.669494,40.253153],[116.673321,40.246777],[116.668783,40.238539],[116.670247,40.234865],[116.676311,40.238604],[116.678131,40.234379],[116.684007,40.234282],[116.69072,40.240886],[116.697265,40.243216],[116.696554,40.248072],[116.704585,40.251551],[116.704668,40.257101],[116.710837,40.256227],[116.738421,40.284392],[116.738965,40.284101],[116.741098,40.283001],[116.738337,40.278764],[116.74298,40.279087],[116.752788,40.275512],[116.762658,40.269058],[116.768597,40.270109],[116.771651,40.266501],[116.773512,40.269527],[116.782964,40.273248],[116.784073,40.279443],[116.787795,40.281449],[116.788025,40.289439],[116.794487,40.287417],[116.800572,40.289196],[116.809607,40.28601],[116.811823,40.282387],[116.825123,40.285347],[116.82458,40.290991],[116.827215,40.298333],[116.830101,40.299206],[116.828992,40.304413],[116.838382,40.310185],[116.848984,40.311204],[116.854547,40.303152],[116.857182,40.2929],[116.859462,40.290878],[116.871319,40.290943],[116.871737,40.281481],[116.876338,40.274348],[116.874247,40.268281],[116.879893,40.264139],[116.881273,40.259221],[116.886104,40.255256],[116.886585,40.251907],[116.892252,40.245709],[116.894343,40.240028],[116.901746,40.23684],[116.893946,40.233457],[116.900701,40.228763],[116.906598,40.228682],[116.908606,40.222401],[116.913917,40.220118],[116.915507,40.222271],[116.922031,40.220134],[116.92544,40.225768],[116.931065,40.230624],[116.935206,40.229847],[116.940978,40.223922],[116.938029,40.210549],[116.929685,40.211585],[116.930898,40.207084],[116.939556,40.192347],[116.945913,40.193141],[116.94997,40.186354],[116.945809,40.186224],[116.945349,40.1813],[116.951371,40.174788],[116.962037,40.175549],[116.961242,40.171937],[116.968749,40.163495],[116.972054,40.156301],[116.977763,40.151374],[116.970025,40.140321],[116.967829,40.129849],[116.96578,40.127823],[116.971594,40.124224],[116.969189,40.118776],[116.971301,40.114009],[116.976069,40.111188],[116.973329,40.103712],[116.967976,40.101214],[116.975462,40.095051],[116.979938,40.093867],[116.981862,40.089828],[116.981192,40.08149],[116.986274,40.078359],[116.982844,40.070685],[116.980816,40.071188],[116.978599,40.064893],[116.973476,40.066304],[116.970652,40.063805],[116.962288,40.063529],[116.961932,40.051358],[116.945265,40.041425],[116.945014,40.048631],[116.937632,40.046911],[116.938824,40.050887],[116.931693,40.052024],[116.928096,40.054929],[116.924164,40.047463],[116.917974,40.044704],[116.914252,40.052592],[116.906431,40.051423],[116.90137,40.047723],[116.890265,40.04597],[116.88075,40.046164],[116.873619,40.041522],[116.867826,40.041863],[116.857809,40.051894],[116.850197,40.054977],[116.849486,40.051926],[116.831502,40.051196],[116.831732,40.048485],[116.822739,40.046473],[116.823158,40.039834],[116.820816,40.038779],[116.82,40.028357],[116.815295,40.030905],[116.803375,40.032155],[116.800259,40.028844],[116.789531,40.032318],[116.790221,40.034477],[116.781542,40.034818],[116.77782,40.032448],[116.777485,40.027204],[116.771755,40.014474]]],[[[116.578149,40.076461],[116.581411,40.067846],[116.58139,40.073817],[116.586597,40.074336],[116.590131,40.056162],[116.587957,40.05053],[116.591198,40.051796],[116.590006,40.043616],[116.599814,40.041408],[116.599417,40.047171],[116.601633,40.047658],[116.598517,40.052543],[116.603683,40.052949],[116.610061,40.031214],[116.602762,40.028503],[116.600839,40.018858],[116.595548,40.01751],[116.577814,40.027512],[116.578797,40.033097],[116.570474,40.032431],[116.564242,40.039655],[116.550753,40.045499],[116.54655,40.048956],[116.552761,40.05488],[116.551757,40.059765],[116.578149,40.076461]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110114,\"name\":\"昌平区\",\"center\":[116.235906,40.218085],\"centroid\":[116.210635,40.215461],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":10,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.466832,40.090185],[116.466247,40.08235],[116.461855,40.080825],[116.462608,40.076786],[116.458823,40.075796],[116.458635,40.070377],[116.462127,40.06731],[116.459408,40.059992],[116.45142,40.06129],[116.451629,40.058759],[116.442867,40.061323],[116.433268,40.06228],[116.415618,40.056],[116.409595,40.055626],[116.406124,40.049768],[116.408884,40.043291],[116.405266,40.038974],[116.395333,40.036766],[116.39297,40.041733],[116.390649,40.041279],[116.38519,40.042853],[116.376888,40.042756],[116.376114,40.045466],[116.36959,40.04696],[116.367394,40.053436],[116.372999,40.054344],[116.372267,40.05785],[116.379272,40.059002],[116.382848,40.061582],[116.381928,40.066402],[116.373354,40.065623],[116.372538,40.06843],[116.363149,40.068965],[116.363023,40.065931],[116.357293,40.066012],[116.34667,40.063659],[116.346963,40.06043],[116.342676,40.059635],[116.343366,40.055448],[116.340271,40.055091],[116.338828,40.058921],[116.325946,40.054799],[116.318292,40.061663],[116.309446,40.060609],[116.305995,40.063043],[116.302942,40.060803],[116.290353,40.083145],[116.279897,40.079754],[116.2731,40.092699],[116.27333,40.09557],[116.265237,40.094694],[116.258273,40.101522],[116.263899,40.10402],[116.263334,40.110588],[116.258022,40.11195],[116.25957,40.106907],[116.255868,40.104474],[116.252732,40.106517],[116.245956,40.10535],[116.240498,40.108009],[116.243363,40.113279],[116.241836,40.118403],[116.245036,40.118825],[116.247043,40.136204],[116.233785,40.136577],[116.215445,40.143174],[116.212224,40.140548],[116.206285,40.143092],[116.205658,40.150175],[116.203211,40.153773],[116.202166,40.160984],[116.194282,40.160076],[116.192065,40.155669],[116.182696,40.158099],[116.183094,40.153335],[116.180417,40.14729],[116.174122,40.143595],[116.167681,40.141844],[116.168622,40.135442],[116.17178,40.127936],[116.167409,40.128455],[116.169563,40.124564],[116.152708,40.121776],[116.132925,40.121354],[116.132214,40.115079],[116.127676,40.116393],[116.113309,40.115598],[116.105864,40.118014],[116.102246,40.115987],[116.096056,40.121257],[116.089783,40.119327],[116.08445,40.120252],[116.077883,40.115047],[116.073847,40.115436],[116.072676,40.109258],[116.069456,40.104912],[116.062931,40.10282],[116.061969,40.09956],[116.055905,40.09643],[116.051848,40.091661],[116.048878,40.085303],[116.043775,40.083502],[116.037899,40.084524],[116.033926,40.079657],[116.030914,40.082188],[116.020856,40.074579],[116.007785,40.080614],[116.005129,40.079803],[115.99735,40.082074],[115.986434,40.083469],[115.979993,40.081669],[115.977232,40.079041],[115.968575,40.075488],[115.966588,40.084556],[115.960461,40.092456],[115.962092,40.094419],[115.962552,40.10235],[115.957449,40.100679],[115.956717,40.096041],[115.952681,40.10102],[115.943229,40.103339],[115.947913,40.107409],[115.933588,40.124824],[115.921438,40.134485],[115.906549,40.138181],[115.904457,40.136123],[115.900442,40.138716],[115.8816,40.139073],[115.874155,40.14387],[115.870768,40.144276],[115.865184,40.148635],[115.856547,40.147468],[115.853348,40.149332],[115.853557,40.154162],[115.84676,40.163171],[115.844418,40.168016],[115.846865,40.169458],[115.854205,40.179939],[115.848099,40.183843],[115.855502,40.188865],[115.863072,40.186095],[115.870308,40.186079],[115.873695,40.192687],[115.87633,40.193918],[115.877313,40.200849],[115.886326,40.206663],[115.883169,40.209594],[115.885072,40.212039],[115.883106,40.216119],[115.891366,40.225379],[115.891994,40.228147],[115.898476,40.234509],[115.898079,40.236419],[115.906695,40.23412],[115.911965,40.234477],[115.916628,40.242391],[115.916984,40.247068],[115.935826,40.25558],[115.942706,40.253557],[115.950276,40.256163],[115.960001,40.256648],[115.965605,40.259415],[115.968888,40.264269],[115.967006,40.265612],[115.976396,40.270983],[115.981812,40.276903],[115.978822,40.281627],[115.981227,40.28525],[115.978675,40.289633],[115.982732,40.297977],[115.990323,40.299498],[115.987919,40.303799],[115.975538,40.308698],[115.976417,40.311511],[115.973259,40.318997],[115.979658,40.320532],[115.982711,40.324202],[115.993398,40.328986],[115.999065,40.325463],[116.007597,40.33314],[116.01684,40.33466],[116.026481,40.324283],[116.026167,40.320484],[116.031144,40.312352],[116.040095,40.312724],[116.042479,40.316846],[116.051116,40.315812],[116.056971,40.322181],[116.053353,40.326853],[116.061802,40.336809],[116.06841,40.336971],[116.073429,40.339831],[116.077716,40.339346],[116.083342,40.33571],[116.086353,40.330813],[116.098649,40.330005],[116.102978,40.331524],[116.110381,40.330813],[116.116634,40.323668],[116.116237,40.321955],[116.122385,40.312805],[116.132737,40.31198],[116.141959,40.316879],[116.138383,40.324671],[116.13809,40.330974],[116.143904,40.336082],[116.137651,40.336534],[116.137567,40.340769],[116.140809,40.343047],[116.138404,40.345229],[116.144782,40.348541],[116.147543,40.340655],[116.144719,40.336631],[116.152603,40.337714],[116.155677,40.344906],[116.1507,40.349252],[116.145514,40.351046],[116.148651,40.35696],[116.148233,40.361807],[116.159295,40.366265],[116.168789,40.366718],[116.170713,40.369351],[116.177154,40.370934],[116.180354,40.367687],[116.192985,40.372775],[116.209129,40.376232],[116.211451,40.381756],[116.222221,40.382111],[116.226989,40.38111],[116.23184,40.374988],[116.23665,40.377427],[116.241962,40.377508],[116.24353,40.379818],[116.247796,40.374471],[116.252104,40.376297],[116.25338,40.381239],[116.258336,40.383193],[116.261264,40.380561],[116.270863,40.382693],[116.282845,40.375263],[116.290729,40.383177],[116.289872,40.391672],[116.293762,40.392415],[116.295581,40.384437],[116.302691,40.387473],[116.313106,40.389459],[116.32078,40.386859],[116.32398,40.387295],[116.337364,40.379769],[116.34506,40.373163],[116.355369,40.37137],[116.360033,40.366815],[116.357356,40.364084],[116.352797,40.364391],[116.348866,40.356427],[116.355641,40.356814],[116.363923,40.359028],[116.369673,40.356362],[116.367101,40.350351],[116.364508,40.349107],[116.369903,40.342401],[116.368231,40.334805],[116.365909,40.331702],[116.376135,40.334352],[116.375069,40.337375],[116.384563,40.339055],[116.391422,40.338393],[116.396358,40.334853],[116.408633,40.334886],[116.408989,40.333205],[116.417061,40.329843],[116.424359,40.331265],[116.427914,40.329213],[116.43423,40.329116],[116.438245,40.333221],[116.443745,40.322682],[116.449182,40.32113],[116.455184,40.316345],[116.44822,40.305982],[116.443766,40.302457],[116.448011,40.300484],[116.45096,40.293045],[116.449412,40.286722],[116.45533,40.284845],[116.460308,40.28711],[116.469634,40.283001],[116.472081,40.280122],[116.478794,40.280025],[116.484001,40.2759],[116.484273,40.267634],[116.493245,40.262489],[116.501839,40.262974],[116.505959,40.261356],[116.503011,40.25969],[116.501024,40.251599],[116.493705,40.251179],[116.482098,40.245385],[116.481094,40.238248],[116.483771,40.225185],[116.477979,40.225201],[116.473712,40.221203],[116.472249,40.205092],[116.484503,40.196493],[116.488016,40.191796],[116.487975,40.184686],[116.490129,40.181316],[116.485151,40.176764],[116.483332,40.171742],[116.480802,40.171937],[116.476912,40.163576],[116.477916,40.159979],[116.484629,40.160465],[116.492303,40.156981],[116.490777,40.148992],[116.480781,40.14742],[116.482307,40.140629],[116.484754,40.140078],[116.487222,40.124678],[116.492199,40.111561],[116.489292,40.101668],[116.480885,40.096965],[116.473357,40.097516],[116.466498,40.094954],[116.466832,40.090185]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110115,\"name\":\"大兴区\",\"center\":[116.338033,39.728908],\"centroid\":[116.421058,39.649884],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":11,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.534944,39.82482],[116.539586,39.821563],[116.533375,39.819658],[116.538373,39.81513],[116.546634,39.803501],[116.555145,39.793548],[116.562423,39.796936],[116.565078,39.793988],[116.574677,39.798386],[116.594377,39.776685],[116.576957,39.771943],[116.561565,39.771111],[116.548119,39.765554],[116.540716,39.760502],[116.536408,39.753917],[116.527562,39.743304],[116.53624,39.740663],[116.537997,39.738071],[116.532413,39.73962],[116.531849,39.730016],[116.53783,39.728043],[116.536972,39.72152],[116.534609,39.718079],[116.52936,39.719808],[116.527332,39.716578],[116.53256,39.71529],[116.530552,39.713268],[116.535676,39.711881],[116.544961,39.715045],[116.573276,39.714507],[116.573464,39.709125],[116.579884,39.710234],[116.581202,39.712517],[116.590152,39.713349],[116.590194,39.711522],[116.598371,39.711963],[116.604017,39.714752],[116.604561,39.718731],[116.609141,39.719367],[116.616251,39.725581],[116.621876,39.725825],[116.621646,39.728076],[116.628129,39.727749],[116.631203,39.722971],[116.637623,39.723934],[116.638502,39.717166],[116.644587,39.709647],[116.652994,39.708619],[116.653098,39.703823],[116.647912,39.703579],[116.64626,39.700447],[116.647097,39.694786],[116.651509,39.694459],[116.651321,39.687868],[116.658097,39.686155],[116.65818,39.68857],[116.666566,39.687101],[116.669577,39.683642],[116.666022,39.679693],[116.668574,39.674602],[116.675203,39.676234],[116.680786,39.674896],[116.685554,39.676886],[116.692706,39.676789],[116.693543,39.674944],[116.703769,39.674145],[116.704857,39.667192],[116.702138,39.657644],[116.702891,39.649923],[116.70609,39.642903],[116.710419,39.639686],[116.716003,39.640356],[116.723489,39.639033],[116.721398,39.629415],[116.725518,39.624075],[116.721858,39.621756],[116.716149,39.62156],[116.70929,39.618114],[116.705338,39.621462],[116.700737,39.62107],[116.702577,39.610421],[116.718282,39.603021],[116.718324,39.601077],[116.724953,39.598006],[116.727065,39.593055],[116.705108,39.587974],[116.700695,39.590964],[116.699127,39.595457],[116.696408,39.595392],[116.694087,39.601355],[116.6889,39.598496],[116.669975,39.603381],[116.670037,39.604916],[116.662384,39.60521],[116.6568,39.602776],[116.657678,39.60075],[116.646532,39.599117],[116.645549,39.60209],[116.635595,39.604818],[116.635407,39.599934],[116.628338,39.599558],[116.620517,39.601665],[116.620182,39.606893],[116.616857,39.607301],[116.616648,39.614096],[116.613177,39.613802],[116.611755,39.618882],[116.607781,39.619698],[116.607886,39.624696],[116.602177,39.624533],[116.600128,39.619649],[116.593561,39.618588],[116.591993,39.621299],[116.579194,39.623487],[116.579382,39.619666],[116.565936,39.61978],[116.565978,39.616138],[116.569637,39.61176],[116.566103,39.61114],[116.566605,39.604361],[116.562276,39.601714],[116.557132,39.601502],[116.549436,39.596143],[116.544187,39.596519],[116.544124,39.603609],[116.540883,39.60142],[116.541803,39.59348],[116.530866,39.596715],[116.530615,39.598774],[116.524446,39.596535],[116.525052,39.593807],[116.521267,39.590229],[116.52317,39.586242],[116.519699,39.581863],[116.520389,39.577156],[116.52614,39.577271],[116.527248,39.57294],[116.520389,39.57191],[116.519385,39.566484],[116.511564,39.565503],[116.510581,39.560502],[116.50805,39.560256],[116.508448,39.551053],[116.489773,39.550268],[116.48948,39.553472],[116.473378,39.553096],[116.470952,39.5546],[116.475134,39.545756],[116.47802,39.543205],[116.478188,39.535487],[116.468819,39.534359],[116.464595,39.531628],[116.464553,39.527638],[116.453846,39.528652],[116.45372,39.526477],[116.440985,39.527311],[116.436802,39.526346],[116.439876,39.523353],[116.440378,39.516271],[116.442741,39.516189],[116.443829,39.509875],[116.433017,39.507438],[116.431699,39.51053],[116.424631,39.509728],[116.423125,39.516337],[116.424046,39.522732],[116.421473,39.525103],[116.411247,39.524678],[116.402652,39.526886],[116.40282,39.51439],[116.407253,39.512116],[116.40857,39.508011],[116.418734,39.506391],[116.422895,39.496608],[116.418504,39.496575],[116.415827,39.48823],[116.411582,39.485105],[116.412376,39.482077],[116.423544,39.485154],[116.427329,39.487788],[116.429964,39.481325],[116.425342,39.481259],[116.428333,39.476219],[116.433644,39.478183],[116.436258,39.482912],[116.444142,39.482192],[116.444059,39.47887],[116.448764,39.476284],[116.448638,39.465122],[116.453992,39.45751],[116.454682,39.453302],[116.450667,39.452648],[116.450353,39.448522],[116.437241,39.445951],[116.434397,39.442758],[116.425635,39.446885],[116.408947,39.450257],[116.399787,39.450044],[116.391903,39.452893],[116.388557,39.450732],[116.373563,39.452058],[116.367791,39.451633],[116.362187,39.454874],[116.351124,39.455529],[116.350162,39.45291],[116.334499,39.457019],[116.325611,39.462961],[116.325088,39.466153],[116.320048,39.468543],[116.319944,39.473436],[116.314779,39.476104],[116.312708,39.480556],[116.306957,39.485023],[116.305284,39.489179],[116.283201,39.493941],[116.279269,39.491306],[116.275631,39.495201],[116.269315,39.495495],[116.257939,39.500518],[116.25706,39.505491],[116.253861,39.510055],[116.245831,39.514897],[116.246709,39.520098],[116.24353,39.524236],[116.246479,39.525299],[116.248256,39.530271],[116.245601,39.53014],[116.246521,39.539788],[116.242505,39.552966],[116.246186,39.557167],[116.243007,39.55836],[116.240644,39.564098],[116.234684,39.563934],[116.236462,39.568396],[116.229373,39.565471],[116.225817,39.568151],[116.221175,39.578921],[116.225085,39.584085],[116.226089,39.591993],[116.222597,39.593938],[116.223141,39.597222],[116.21808,39.608102],[116.219502,39.618931],[116.218875,39.628011],[116.215487,39.64305],[116.216992,39.651572],[116.223162,39.664728],[116.221342,39.667486],[116.22565,39.67359],[116.221238,39.678453],[116.230941,39.692355],[116.23435,39.703823],[116.231945,39.706025],[116.236629,39.71286],[116.245036,39.718421],[116.245768,39.72408],[116.248466,39.728027],[116.248026,39.732641],[116.243948,39.741658],[116.251895,39.749092],[116.252481,39.758676],[116.254426,39.76324],[116.252481,39.771747],[116.253777,39.77952],[116.251602,39.782518],[116.251519,39.793059],[116.259298,39.797621],[116.262184,39.792782],[116.27423,39.796936],[116.287237,39.799103],[116.289182,39.795894],[116.296083,39.795568],[116.291148,39.793271],[116.295205,39.790958],[116.301541,39.774941],[116.307062,39.770085],[116.31068,39.772057],[116.317978,39.783447],[116.321784,39.783626],[116.322872,39.798386],[116.326824,39.798386],[116.328225,39.801416],[116.340124,39.802149],[116.341755,39.807589],[116.355704,39.805668],[116.356833,39.800471],[116.367039,39.79982],[116.368189,39.794819],[116.365742,39.794151],[116.367582,39.784962],[116.378478,39.785646],[116.379209,39.77939],[116.385609,39.778852],[116.390649,39.780465],[116.391903,39.765277],[116.398888,39.765864],[116.397905,39.781068],[116.396023,39.786738],[116.42024,39.787439],[116.421034,39.794134],[116.429274,39.794102],[116.429399,39.803583],[116.425719,39.805358],[116.422456,39.81044],[116.417772,39.81013],[116.415262,39.812525],[116.410013,39.811336],[116.41016,39.817052],[116.419759,39.815375],[116.418441,39.822915],[116.414426,39.824282],[116.415785,39.829428],[116.420072,39.826611],[116.425217,39.831903],[116.430068,39.830112],[116.43699,39.830649],[116.436677,39.827425],[116.44592,39.826692],[116.443912,39.82096],[116.452737,39.823012],[116.462775,39.815945],[116.468463,39.814511],[116.474256,39.809772],[116.485256,39.81272],[116.485632,39.816889],[116.495357,39.818795],[116.498201,39.8157],[116.505813,39.817866],[116.502801,39.819006],[116.510142,39.821449],[116.510602,39.827637],[116.516164,39.829835],[116.525366,39.829754],[116.525868,39.826904],[116.534944,39.82482]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110116,\"name\":\"怀柔区\",\"center\":[116.637122,40.324272],\"centroid\":[116.586079,40.63069],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":12,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.289872,40.391672],[116.286003,40.396032],[116.289746,40.402539],[116.287864,40.404719],[116.291608,40.408448],[116.288513,40.413437],[116.289433,40.418021],[116.291942,40.416617],[116.296648,40.420701],[116.294452,40.429304],[116.290667,40.435856],[116.289788,40.440907],[116.294368,40.449975],[116.293824,40.452831],[116.300955,40.458429],[116.306853,40.466092],[116.301646,40.468108],[116.294786,40.47535],[116.291691,40.485317],[116.29717,40.486768],[116.303779,40.485817],[116.31022,40.491702],[116.31321,40.491799],[116.323227,40.500151],[116.330567,40.500748],[116.336653,40.498636],[116.34232,40.500457],[116.348636,40.499071],[116.357042,40.501941],[116.365909,40.499635],[116.369632,40.500312],[116.377537,40.49683],[116.378603,40.491525],[116.376825,40.485736],[116.387344,40.482043],[116.38609,40.475802],[116.393702,40.47256],[116.4065,40.481995],[116.413673,40.481527],[116.416664,40.483011],[116.420971,40.480301],[116.433142,40.478189],[116.443201,40.481801],[116.455937,40.480914],[116.457903,40.488445],[116.465577,40.48701],[116.468212,40.48493],[116.483541,40.484994],[116.487347,40.481737],[116.492157,40.481027],[116.508322,40.483172],[116.511543,40.486929],[116.519092,40.491799],[116.519155,40.496604],[116.51194,40.501135],[116.506398,40.508212],[116.500459,40.510904],[116.497762,40.518093],[116.492073,40.518093],[116.488581,40.515853],[116.476306,40.514192],[116.470345,40.518963],[116.46587,40.518802],[116.460956,40.524363],[116.467125,40.530068],[116.470617,40.535418],[116.479651,40.541396],[116.484587,40.552867],[116.496277,40.555106],[116.499999,40.560921],[116.505144,40.562581],[116.509577,40.57276],[116.513153,40.572792],[116.517796,40.579749],[116.525136,40.583002],[116.531577,40.59131],[116.530929,40.595883],[116.535948,40.59944],[116.532915,40.606459],[116.535634,40.615698],[116.538938,40.619673],[116.539294,40.625612],[116.545003,40.627076],[116.551674,40.625209],[116.561231,40.628557],[116.568989,40.625483],[116.574092,40.631678],[116.573903,40.63628],[116.563886,40.636908],[116.55389,40.642877],[116.551151,40.642828],[116.550335,40.647606],[116.545023,40.650116],[116.544103,40.653767],[116.540046,40.656679],[116.529507,40.654588],[116.527039,40.6584],[116.518381,40.660925],[116.520096,40.66411],[116.517273,40.665734],[116.513488,40.672344],[116.505938,40.673067],[116.501568,40.671186],[116.492826,40.673984],[116.487138,40.674338],[116.483374,40.679403],[116.488811,40.69196],[116.496653,40.696879],[116.502676,40.697361],[116.501066,40.70228],[116.501923,40.706796],[116.506064,40.710879],[116.503115,40.715893],[116.504119,40.720135],[116.506858,40.720039],[116.510748,40.72645],[116.509493,40.73548],[116.513697,40.741456],[116.506461,40.743432],[116.501819,40.746581],[116.502906,40.756635],[116.50025,40.760811],[116.495482,40.759735],[116.491404,40.7633],[116.485193,40.765179],[116.4803,40.771586],[116.471517,40.771233],[116.465452,40.772742],[116.465849,40.774525],[116.460663,40.78244],[116.461416,40.78854],[116.457233,40.7983],[116.452152,40.798059],[116.450981,40.801927],[116.440002,40.809133],[116.439897,40.815038],[116.436823,40.820735],[116.422477,40.822772],[116.414991,40.829318],[116.406458,40.833361],[116.406145,40.837933],[116.399306,40.850492],[116.391778,40.854838],[116.389707,40.861814],[116.38174,40.863465],[116.374881,40.871531],[116.366599,40.876645],[116.365972,40.880188],[116.360514,40.884885],[116.353864,40.887786],[116.344683,40.894694],[116.342236,40.899887],[116.334436,40.90463],[116.33544,40.910495],[116.334122,40.920829],[116.338828,40.925732],[116.339894,40.929416],[116.35012,40.936048],[116.358925,40.93608],[116.364801,40.942999],[116.370343,40.943655],[116.379941,40.935775],[116.379732,40.933228],[116.384019,40.928535],[116.384877,40.922848],[116.39274,40.913123],[116.396316,40.911264],[116.398533,40.906024],[116.404764,40.905736],[116.413715,40.899758],[116.418922,40.902339],[116.430905,40.903364],[116.436614,40.89939],[116.448492,40.899919],[116.45073,40.901345],[116.458676,40.900592],[116.464344,40.896329],[116.474047,40.896008],[116.477581,40.901746],[116.473608,40.91974],[116.468422,40.925091],[116.467209,40.931322],[116.461541,40.932684],[116.462315,40.935231],[116.455372,40.945433],[116.454829,40.949533],[116.447446,40.95384],[116.453302,40.964584],[116.451713,40.968667],[116.455519,40.980481],[116.464135,40.984498],[116.474193,40.978608],[116.47894,40.979104],[116.485612,40.982465],[116.493726,40.977919],[116.496737,40.978432],[116.504516,40.975919],[116.51629,40.975198],[116.519573,40.981569],[116.524718,40.981073],[116.533417,40.985698],[116.535634,40.988675],[116.541991,40.99026],[116.547826,40.988003],[116.558617,40.988627],[116.561231,40.993461],[116.569177,40.991636],[116.574928,40.986307],[116.589692,40.976703],[116.597764,40.97475],[116.614515,40.983314],[116.617067,40.998725],[116.614892,41.003574],[116.619179,41.01423],[116.621897,41.015749],[116.62288,41.020693],[116.621228,41.028978],[116.617589,41.034704],[116.614118,41.036096],[116.613491,41.040782],[116.617736,41.048649],[116.61646,41.053382],[116.624093,41.054437],[116.630848,41.0608],[116.637937,41.060497],[116.641158,41.058322],[116.647431,41.059393],[116.653914,41.05626],[116.657009,41.051303],[116.665207,41.046682],[116.673279,41.046378],[116.67698,41.042732],[116.682878,41.041789],[116.688629,41.044651],[116.692246,41.040813],[116.691347,41.037503],[116.69509,41.033265],[116.695739,41.025396],[116.698855,41.021253],[116.693836,41.013686],[116.690866,41.012982],[116.69095,41.007254],[116.683066,41.000486],[116.682543,40.986259],[116.685304,40.982641],[116.681267,40.980737],[116.677921,40.975983],[116.677921,40.970972],[116.687248,40.962551],[116.689298,40.951118],[116.696178,40.94452],[116.702368,40.940628],[116.702786,40.936512],[116.70722,40.934029],[116.712197,40.934846],[116.713891,40.929416],[116.722318,40.92743],[116.717111,40.921695],[116.713347,40.910431],[116.716881,40.910175],[116.723678,40.906313],[116.726145,40.901185],[116.730432,40.897771],[116.739759,40.896665],[116.750257,40.891665],[116.759501,40.889854],[116.758539,40.881983],[116.762135,40.880765],[116.769392,40.882961],[116.772362,40.87852],[116.776795,40.878376],[116.797226,40.860034],[116.796996,40.854886],[116.802413,40.851198],[116.802496,40.842392],[116.805947,40.840836],[116.813622,40.848423],[116.820732,40.848263],[116.823471,40.842681],[116.828009,40.841109],[116.831815,40.842585],[116.837775,40.841542],[116.839741,40.839024],[116.84819,40.839313],[116.848587,40.837147],[116.855425,40.835447],[116.860633,40.830457],[116.861448,40.825356],[116.870378,40.821601],[116.876171,40.8212],[116.876735,40.818456],[116.882172,40.814172],[116.880207,40.804367],[116.886961,40.801076],[116.878575,40.797545],[116.873326,40.798781],[116.871277,40.794785],[116.862577,40.792858],[116.867471,40.784559],[116.858039,40.78305],[116.856806,40.77955],[116.851264,40.778924],[116.850448,40.775006],[116.834785,40.770221],[116.840076,40.760682],[116.831795,40.751303],[116.826211,40.749343],[116.818662,40.75042],[116.810527,40.749118],[116.802977,40.745986],[116.793629,40.748267],[116.783759,40.757631],[116.780727,40.751512],[116.782818,40.747817],[116.786352,40.736026],[116.790472,40.728973],[116.789091,40.712454],[116.786687,40.7103],[116.787105,40.704482],[116.783989,40.700496],[116.769246,40.70281],[116.762867,40.706427],[116.756155,40.705687],[116.754963,40.702891],[116.748668,40.700544],[116.747518,40.697072],[116.74252,40.69593],[116.735807,40.69167],[116.725581,40.689114],[116.725413,40.68466],[116.714915,40.680014],[116.713221,40.669867],[116.714309,40.666104],[116.709855,40.662598],[116.712636,40.653896],[116.711151,40.648218],[116.712197,40.641268],[116.70149,40.632917],[116.70195,40.628444],[116.705128,40.626947],[116.704689,40.620076],[116.701322,40.621379],[116.697955,40.618402],[116.702598,40.612785],[116.70655,40.610998],[116.707993,40.606507],[116.705609,40.60303],[116.711235,40.600213],[116.708495,40.595206],[116.711611,40.59189],[116.708955,40.590054],[116.714351,40.58028],[116.71456,40.570682],[116.710503,40.568685],[116.709855,40.565512],[116.699336,40.563563],[116.686349,40.564497],[116.679636,40.562001],[116.682397,40.556766],[116.66872,40.557507],[116.665771,40.552432],[116.67698,40.554462],[116.68225,40.548904],[116.690699,40.549468],[116.702138,40.545456],[116.701469,40.539913],[116.706948,40.532582],[116.712573,40.529955],[116.717216,40.524798],[116.712239,40.522058],[116.711402,40.516465],[116.701071,40.510549],[116.699106,40.50444],[116.698353,40.493266],[116.693376,40.490783],[116.694149,40.485462],[116.704334,40.479043],[116.69348,40.481704],[116.693397,40.476108],[116.695571,40.466721],[116.698667,40.468043],[116.706174,40.459929],[116.716902,40.457074],[116.719223,40.460397],[116.723594,40.458542],[116.7196,40.455735],[116.719265,40.448636],[116.725811,40.443085],[116.72098,40.440988],[116.716421,40.441714],[116.723552,40.435065],[116.722339,40.423832],[116.72556,40.418053],[116.73244,40.420604],[116.733235,40.418312],[116.741139,40.414631],[116.728801,40.40982],[116.724389,40.409191],[116.723427,40.405316],[116.718512,40.402055],[116.713242,40.40157],[116.713849,40.395806],[116.711716,40.386908],[116.716254,40.384114],[116.707115,40.377007],[116.706509,40.373809],[116.714079,40.368608],[116.719872,40.369044],[116.718094,40.361338],[116.726773,40.361193],[116.725769,40.355619],[116.729031,40.355619],[116.727484,40.346522],[116.723887,40.344033],[116.722967,40.339152],[116.731185,40.339023],[116.73129,40.335031],[116.744046,40.339136],[116.744653,40.333706],[116.751491,40.335742],[116.758559,40.333884],[116.759689,40.326853],[116.762846,40.326707],[116.768639,40.317816],[116.773324,40.315973],[116.762888,40.310428],[116.756845,40.302586],[116.754461,40.303686],[116.738965,40.284101],[116.738421,40.284392],[116.710837,40.256227],[116.704668,40.257101],[116.704585,40.251551],[116.696554,40.248072],[116.697265,40.243216],[116.69072,40.240886],[116.684007,40.234282],[116.678131,40.234379],[116.676311,40.238604],[116.670247,40.234865],[116.668783,40.238539],[116.673321,40.246777],[116.669494,40.253153],[116.666901,40.262085],[116.648519,40.260143],[116.643081,40.25715],[116.641492,40.259463],[116.637038,40.25846],[116.63526,40.261454],[116.623654,40.26058],[116.6238,40.252667],[116.622044,40.250467],[116.61324,40.251761],[116.603787,40.251324],[116.604624,40.256146],[116.600755,40.258978],[116.599647,40.265385],[116.590842,40.264139],[116.588396,40.269462],[116.585238,40.266226],[116.58254,40.268362],[116.570202,40.268863],[116.570516,40.273102],[116.565371,40.273377],[116.566187,40.27802],[116.552176,40.27383],[116.546236,40.276224],[116.540904,40.274946],[116.53693,40.277178],[116.540088,40.267165],[116.535717,40.261373],[116.526181,40.261324],[116.523965,40.257522],[116.509201,40.258056],[116.505959,40.261356],[116.501839,40.262974],[116.493245,40.262489],[116.484273,40.267634],[116.484001,40.2759],[116.478794,40.280025],[116.472081,40.280122],[116.469634,40.283001],[116.460308,40.28711],[116.45533,40.284845],[116.449412,40.286722],[116.45096,40.293045],[116.448011,40.300484],[116.443766,40.302457],[116.44822,40.305982],[116.455184,40.316345],[116.449182,40.32113],[116.443745,40.322682],[116.438245,40.333221],[116.43423,40.329116],[116.427914,40.329213],[116.424359,40.331265],[116.417061,40.329843],[116.408989,40.333205],[116.408633,40.334886],[116.396358,40.334853],[116.391422,40.338393],[116.384563,40.339055],[116.375069,40.337375],[116.376135,40.334352],[116.365909,40.331702],[116.368231,40.334805],[116.369903,40.342401],[116.364508,40.349107],[116.367101,40.350351],[116.369673,40.356362],[116.363923,40.359028],[116.355641,40.356814],[116.348866,40.356427],[116.352797,40.364391],[116.357356,40.364084],[116.360033,40.366815],[116.355369,40.37137],[116.34506,40.373163],[116.337364,40.379769],[116.32398,40.387295],[116.32078,40.386859],[116.313106,40.389459],[116.302691,40.387473],[116.295581,40.384437],[116.293762,40.392415],[116.289872,40.391672]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110117,\"name\":\"平谷区\",\"center\":[117.112335,40.144783],\"centroid\":[117.145392,40.208997],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":13,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.961932,40.051358],[116.962288,40.063529],[116.970652,40.063805],[116.973476,40.066304],[116.978599,40.064893],[116.980816,40.071188],[116.982844,40.070685],[116.986274,40.078359],[116.981192,40.08149],[116.981862,40.089828],[116.979938,40.093867],[116.975462,40.095051],[116.967976,40.101214],[116.973329,40.103712],[116.976069,40.111188],[116.971301,40.114009],[116.969189,40.118776],[116.971594,40.124224],[116.96578,40.127823],[116.967829,40.129849],[116.970025,40.140321],[116.977763,40.151374],[116.972054,40.156301],[116.968749,40.163495],[116.961242,40.171937],[116.962037,40.175549],[116.951371,40.174788],[116.945349,40.1813],[116.945809,40.186224],[116.94997,40.186354],[116.945913,40.193141],[116.939556,40.192347],[116.930898,40.207084],[116.929685,40.211585],[116.938029,40.210549],[116.940978,40.223922],[116.935206,40.229847],[116.936837,40.232259],[116.945641,40.233441],[116.946896,40.236095],[116.953567,40.236079],[116.956286,40.232615],[116.959924,40.23268],[116.974082,40.24456],[116.975881,40.249463],[116.969293,40.253962],[116.961786,40.252635],[116.954341,40.25715],[116.950953,40.261081],[116.960468,40.2704],[116.961995,40.273442],[116.970527,40.276531],[116.971343,40.281724],[116.983765,40.287886],[116.991042,40.287724],[116.990833,40.290603],[116.99834,40.29083],[117.004091,40.293918],[117.002,40.299675],[117.011306,40.307113],[117.007563,40.314599],[117.006998,40.319255],[117.01024,40.320726],[117.012686,40.32674],[117.020842,40.336179],[117.026133,40.338458],[117.032762,40.33752],[117.039266,40.340057],[117.048279,40.341528],[117.052817,40.337649],[117.060931,40.337795],[117.066933,40.342983],[117.072286,40.342999],[117.072705,40.345584],[117.085231,40.350432],[117.0946,40.358285],[117.100915,40.360546],[117.117457,40.353744],[117.125362,40.35641],[117.128122,40.358866],[117.142385,40.362824],[117.147466,40.369965],[117.155329,40.371402],[117.157609,40.374859],[117.16796,40.371467],[117.170491,40.374342],[117.179943,40.375021],[117.185799,40.377767],[117.199747,40.375861],[117.204536,40.373082],[117.211124,40.373825],[117.218527,40.377718],[117.223901,40.375538],[117.22618,40.369044],[117.237055,40.370627],[117.242283,40.369981],[117.247762,40.364101],[117.250188,40.358381],[117.254182,40.357105],[117.25437,40.351191],[117.257089,40.341463],[117.261125,40.338781],[117.259828,40.336195],[117.267127,40.335694],[117.274969,40.331944],[117.271288,40.325285],[117.271853,40.319853],[117.274697,40.314405],[117.274342,40.308552],[117.285739,40.302214],[117.293309,40.296748],[117.294647,40.290894],[117.292368,40.286236],[117.29632,40.2781],[117.304309,40.278181],[117.316835,40.281999],[117.316794,40.285104],[117.32336,40.284441],[117.331244,40.289665],[117.334005,40.285654],[117.337999,40.265903],[117.337622,40.263266],[117.342202,40.256502],[117.339881,40.246194],[117.343457,40.242909],[117.345464,40.234946],[117.348246,40.234574],[117.351613,40.229459],[117.355691,40.229556],[117.36027,40.23255],[117.373989,40.232777],[117.386829,40.227111],[117.390029,40.227969],[117.39373,40.221656],[117.377586,40.218612],[117.378443,40.21029],[117.385679,40.207894],[117.393145,40.203376],[117.379552,40.201319],[117.381455,40.194906],[117.384382,40.195278],[117.38409,40.187828],[117.388356,40.188249],[117.397704,40.192914],[117.4077,40.187504],[117.404751,40.183244],[117.401217,40.183617],[117.391618,40.177607],[117.393186,40.174901],[117.380597,40.17691],[117.381225,40.172455],[117.377021,40.176327],[117.372023,40.176538],[117.368844,40.17299],[117.364014,40.176683],[117.359413,40.173346],[117.353746,40.17367],[117.351111,40.171661],[117.357343,40.164273],[117.360626,40.156965],[117.351717,40.150564],[117.355272,40.148587],[117.350525,40.144827],[117.356883,40.145037],[117.35636,40.140904],[117.351404,40.139932],[117.349082,40.136528],[117.330617,40.133691],[117.33093,40.13575],[117.323276,40.14071],[117.318571,40.138522],[117.313761,40.139964],[117.307613,40.136982],[117.302991,40.125926],[117.297073,40.121273],[117.297094,40.118857],[117.285425,40.121322],[117.275659,40.113636],[117.276663,40.109307],[117.274362,40.105804],[117.269908,40.107198],[117.266834,40.112177],[117.260393,40.114155],[117.255541,40.113279],[117.249268,40.116474],[117.245357,40.113215],[117.238226,40.111755],[117.236009,40.108382],[117.229025,40.103533],[117.228606,40.100257],[117.224403,40.098619],[117.224487,40.094662],[117.211249,40.096608],[117.21104,40.090785],[117.213989,40.086243],[117.204285,40.079657],[117.203616,40.076704],[117.208175,40.076834],[117.205247,40.07028],[117.197572,40.067748],[117.198576,40.070101],[117.191842,40.072973],[117.189207,40.082853],[117.18538,40.083875],[117.181533,40.080095],[117.186426,40.076202],[117.183603,40.072081],[117.175593,40.071642],[117.172227,40.074157],[117.158466,40.077435],[117.160139,40.075553],[117.15625,40.069338],[117.139227,40.064049],[117.128896,40.06546],[117.119507,40.072421],[117.107775,40.071805],[117.103927,40.075585],[117.085608,40.075131],[117.085064,40.068592],[117.080986,40.065087],[117.081049,40.068819],[117.069652,40.06757],[117.070634,40.064179],[117.064382,40.062783],[117.061182,40.060105],[117.052022,40.059375],[117.053382,40.052884],[117.051437,40.051163],[117.038639,40.049378],[117.033159,40.04235],[117.027032,40.038828],[117.028517,40.033957],[117.023916,40.033746],[117.024836,40.03011],[117.020884,40.032448],[117.018061,40.030467],[117.011369,40.031246],[117.000683,40.029915],[117.00016,40.032253],[116.991837,40.036896],[116.985626,40.038828],[116.972095,40.036977],[116.969293,40.048583],[116.964902,40.047836],[116.961932,40.051358]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110118,\"name\":\"密云区\",\"center\":[116.843352,40.377362],\"centroid\":[116.994846,40.526834],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":14,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[116.886961,40.801076],[116.889073,40.798348],[116.896686,40.796438],[116.89495,40.790675],[116.895013,40.781733],[116.898589,40.77674],[116.904569,40.777286],[116.923391,40.773722],[116.923181,40.766897],[116.927908,40.757824],[116.923516,40.750596],[116.926548,40.744894],[116.940706,40.739786],[116.942714,40.729857],[116.946645,40.726916],[116.960134,40.721083],[116.96647,40.71525],[116.965111,40.709593],[116.969628,40.706362],[116.977533,40.705559],[116.979938,40.702826],[116.988177,40.703164],[116.990456,40.701203],[117.002481,40.697345],[117.005513,40.694853],[117.013418,40.694082],[117.018291,40.696011],[117.027848,40.694355],[117.031047,40.692136],[117.035585,40.694467],[117.036108,40.697265],[117.044494,40.700367],[117.054887,40.699804],[117.058338,40.70154],[117.076804,40.700029],[117.081153,40.702617],[117.086047,40.702055],[117.095144,40.705559],[117.110661,40.708243],[117.117792,40.700078],[117.128792,40.700913],[117.132493,40.698663],[117.142531,40.6972],[117.147571,40.698968],[117.159491,40.696332],[117.16474,40.699628],[117.169236,40.699097],[117.176639,40.693567],[117.180947,40.694082],[117.182453,40.697072],[117.193996,40.696268],[117.197802,40.694291],[117.202361,40.695577],[117.208405,40.694435],[117.210622,40.691976],[117.217335,40.69196],[117.218715,40.689484],[117.233207,40.683583],[117.234336,40.680577],[117.241635,40.676669],[117.256775,40.679467],[117.261397,40.681155],[117.267754,40.676669],[117.273401,40.670076],[117.278629,40.667551],[117.278608,40.664463],[117.290423,40.660185],[117.321164,40.658287],[117.331851,40.661504],[117.337622,40.664447],[117.336681,40.666956],[117.342411,40.673437],[117.359748,40.673919],[117.37058,40.679708],[117.378192,40.678808],[117.386996,40.684178],[117.397223,40.683776],[117.409226,40.687281],[117.414852,40.685947],[117.419348,40.68696],[117.426437,40.685304],[117.432711,40.681622],[117.437332,40.683599],[117.442226,40.676605],[117.453958,40.677618],[117.465188,40.673534],[117.471503,40.674338],[117.482399,40.679033],[117.484741,40.677087],[117.493357,40.67527],[117.502934,40.669674],[117.514583,40.660523],[117.513913,40.656196],[117.50283,40.653076],[117.505026,40.646142],[117.501972,40.644518],[117.500425,40.6362],[117.489948,40.636023],[117.486163,40.633496],[117.477986,40.635331],[117.475539,40.644421],[117.473093,40.644453],[117.467885,40.649521],[117.464309,40.648652],[117.462009,40.653076],[117.449106,40.651596],[117.456467,40.649167],[117.451448,40.646577],[117.45402,40.642844],[117.448876,40.62838],[117.442289,40.627977],[117.438002,40.625692],[117.431561,40.625596],[117.42857,40.631887],[117.428884,40.637632],[117.421188,40.635427],[117.42054,40.629232],[117.424701,40.621862],[117.422987,40.618305],[117.41918,40.617114],[117.412739,40.605123],[117.414747,40.600728],[117.421753,40.593178],[117.420623,40.590875],[117.423217,40.58144],[117.429804,40.579298],[117.429992,40.576126],[117.42123,40.569104],[117.413471,40.569893],[117.40358,40.574257],[117.400589,40.569345],[117.39465,40.567912],[117.389297,40.561244],[117.378422,40.56337],[117.375453,40.567799],[117.369221,40.57036],[117.365917,40.575965],[117.353014,40.578831],[117.350023,40.582197],[117.342767,40.581585],[117.334611,40.576464],[117.328442,40.575948],[117.325451,40.578155],[117.311837,40.578026],[117.299562,40.566801],[117.285592,40.565061],[117.279256,40.560342],[117.273191,40.561501],[117.268507,40.559842],[117.25964,40.552867],[117.24954,40.548179],[117.250606,40.542024],[117.247427,40.540236],[117.252007,40.53632],[117.255123,40.527973],[117.26146,40.51906],[117.264115,40.517271],[117.263133,40.513145],[117.255562,40.514934],[117.246821,40.511968],[117.239543,40.516723],[117.230405,40.511162],[117.219969,40.514321],[117.215013,40.513273],[117.212504,40.507906],[117.214449,40.506922],[117.208572,40.501102],[117.208426,40.498071],[117.212065,40.494685],[117.21792,40.494589],[117.22846,40.481301],[117.225783,40.47585],[117.230907,40.470463],[117.237243,40.468785],[117.233207,40.463204],[117.236532,40.456558],[117.243308,40.455428],[117.252154,40.450459],[117.252635,40.446038],[117.263342,40.442375],[117.257654,40.435372],[117.246737,40.426883],[117.243872,40.422848],[117.234085,40.417149],[117.237515,40.407786],[117.236616,40.400844],[117.240484,40.39763],[117.240694,40.394417],[117.23695,40.394078],[117.235382,40.389556],[117.229045,40.386843],[117.226661,40.378558],[117.223901,40.375538],[117.218527,40.377718],[117.211124,40.373825],[117.204536,40.373082],[117.199747,40.375861],[117.185799,40.377767],[117.179943,40.375021],[117.170491,40.374342],[117.16796,40.371467],[117.157609,40.374859],[117.155329,40.371402],[117.147466,40.369965],[117.142385,40.362824],[117.128122,40.358866],[117.125362,40.35641],[117.117457,40.353744],[117.100915,40.360546],[117.0946,40.358285],[117.085231,40.350432],[117.072705,40.345584],[117.072286,40.342999],[117.066933,40.342983],[117.060931,40.337795],[117.052817,40.337649],[117.048279,40.341528],[117.039266,40.340057],[117.032762,40.33752],[117.026133,40.338458],[117.020842,40.336179],[117.012686,40.32674],[117.01024,40.320726],[117.006998,40.319255],[117.007563,40.314599],[117.011306,40.307113],[117.002,40.299675],[117.004091,40.293918],[116.99834,40.29083],[116.990833,40.290603],[116.991042,40.287724],[116.983765,40.287886],[116.971343,40.281724],[116.970527,40.276531],[116.961995,40.273442],[116.960468,40.2704],[116.950953,40.261081],[116.954341,40.25715],[116.961786,40.252635],[116.969293,40.253962],[116.975881,40.249463],[116.974082,40.24456],[116.959924,40.23268],[116.956286,40.232615],[116.953567,40.236079],[116.946896,40.236095],[116.945641,40.233441],[116.936837,40.232259],[116.935206,40.229847],[116.931065,40.230624],[116.92544,40.225768],[116.922031,40.220134],[116.915507,40.222271],[116.913917,40.220118],[116.908606,40.222401],[116.906598,40.228682],[116.900701,40.228763],[116.893946,40.233457],[116.901746,40.23684],[116.894343,40.240028],[116.892252,40.245709],[116.886585,40.251907],[116.886104,40.255256],[116.881273,40.259221],[116.879893,40.264139],[116.874247,40.268281],[116.876338,40.274348],[116.871737,40.281481],[116.871319,40.290943],[116.859462,40.290878],[116.857182,40.2929],[116.854547,40.303152],[116.848984,40.311204],[116.838382,40.310185],[116.828992,40.304413],[116.830101,40.299206],[116.827215,40.298333],[116.82458,40.290991],[116.825123,40.285347],[116.811823,40.282387],[116.809607,40.28601],[116.800572,40.289196],[116.794487,40.287417],[116.788025,40.289439],[116.787795,40.281449],[116.784073,40.279443],[116.782964,40.273248],[116.773512,40.269527],[116.771651,40.266501],[116.768597,40.270109],[116.762658,40.269058],[116.752788,40.275512],[116.74298,40.279087],[116.738337,40.278764],[116.741098,40.283001],[116.738965,40.284101],[116.754461,40.303686],[116.756845,40.302586],[116.762888,40.310428],[116.773324,40.315973],[116.768639,40.317816],[116.762846,40.326707],[116.759689,40.326853],[116.758559,40.333884],[116.751491,40.335742],[116.744653,40.333706],[116.744046,40.339136],[116.73129,40.335031],[116.731185,40.339023],[116.722967,40.339152],[116.723887,40.344033],[116.727484,40.346522],[116.729031,40.355619],[116.725769,40.355619],[116.726773,40.361193],[116.718094,40.361338],[116.719872,40.369044],[116.714079,40.368608],[116.706509,40.373809],[116.707115,40.377007],[116.716254,40.384114],[116.711716,40.386908],[116.713849,40.395806],[116.713242,40.40157],[116.718512,40.402055],[116.723427,40.405316],[116.724389,40.409191],[116.728801,40.40982],[116.741139,40.414631],[116.733235,40.418312],[116.73244,40.420604],[116.72556,40.418053],[116.722339,40.423832],[116.723552,40.435065],[116.716421,40.441714],[116.72098,40.440988],[116.725811,40.443085],[116.719265,40.448636],[116.7196,40.455735],[116.723594,40.458542],[116.719223,40.460397],[116.716902,40.457074],[116.706174,40.459929],[116.698667,40.468043],[116.695571,40.466721],[116.693397,40.476108],[116.69348,40.481704],[116.704334,40.479043],[116.694149,40.485462],[116.693376,40.490783],[116.698353,40.493266],[116.699106,40.50444],[116.701071,40.510549],[116.711402,40.516465],[116.712239,40.522058],[116.717216,40.524798],[116.712573,40.529955],[116.706948,40.532582],[116.701469,40.539913],[116.702138,40.545456],[116.690699,40.549468],[116.68225,40.548904],[116.67698,40.554462],[116.665771,40.552432],[116.66872,40.557507],[116.682397,40.556766],[116.679636,40.562001],[116.686349,40.564497],[116.699336,40.563563],[116.709855,40.565512],[116.710503,40.568685],[116.71456,40.570682],[116.714351,40.58028],[116.708955,40.590054],[116.711611,40.59189],[116.708495,40.595206],[116.711235,40.600213],[116.705609,40.60303],[116.707993,40.606507],[116.70655,40.610998],[116.702598,40.612785],[116.697955,40.618402],[116.701322,40.621379],[116.704689,40.620076],[116.705128,40.626947],[116.70195,40.628444],[116.70149,40.632917],[116.712197,40.641268],[116.711151,40.648218],[116.712636,40.653896],[116.709855,40.662598],[116.714309,40.666104],[116.713221,40.669867],[116.714915,40.680014],[116.725413,40.68466],[116.725581,40.689114],[116.735807,40.69167],[116.74252,40.69593],[116.747518,40.697072],[116.748668,40.700544],[116.754963,40.702891],[116.756155,40.705687],[116.762867,40.706427],[116.769246,40.70281],[116.783989,40.700496],[116.787105,40.704482],[116.786687,40.7103],[116.789091,40.712454],[116.790472,40.728973],[116.786352,40.736026],[116.782818,40.747817],[116.780727,40.751512],[116.783759,40.757631],[116.793629,40.748267],[116.802977,40.745986],[116.810527,40.749118],[116.818662,40.75042],[116.826211,40.749343],[116.831795,40.751303],[116.840076,40.760682],[116.834785,40.770221],[116.850448,40.775006],[116.851264,40.778924],[116.856806,40.77955],[116.858039,40.78305],[116.867471,40.784559],[116.862577,40.792858],[116.871277,40.794785],[116.873326,40.798781],[116.878575,40.797545],[116.886961,40.801076]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":110119,\"name\":\"延庆区\",\"center\":[115.985006,40.465325],\"centroid\":[116.16401,40.540016],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":110000},\"subFeatureIndex\":15,\"acroutes\":[100000,110000]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[115.967006,40.265612],[115.961611,40.269219],[115.960231,40.274914],[115.955212,40.276984],[115.951698,40.282015],[115.950088,40.289228],[115.946115,40.289034],[115.945885,40.296199],[115.939757,40.304397],[115.943814,40.310945],[115.937185,40.313047],[115.935721,40.316717],[115.929239,40.32105],[115.926792,40.319611],[115.922672,40.325899],[115.92721,40.329601],[115.922881,40.332898],[115.921417,40.338668],[115.924094,40.341059],[115.920581,40.346473],[115.918301,40.35389],[115.909539,40.357622],[115.892997,40.355554],[115.890927,40.357897],[115.88526,40.357024],[115.883169,40.359545],[115.878066,40.359367],[115.876226,40.362146],[115.872754,40.359593],[115.864452,40.359335],[115.861901,40.363422],[115.861859,40.373422],[115.855962,40.37712],[115.846865,40.375085],[115.840633,40.381094],[115.837454,40.381255],[115.836555,40.38568],[115.796445,40.426834],[115.796884,40.432531],[115.78992,40.432483],[115.786679,40.437066],[115.77043,40.444166],[115.773546,40.44812],[115.77248,40.452831],[115.77547,40.45204],[115.7734,40.457397],[115.779527,40.464075],[115.772856,40.462301],[115.770367,40.46493],[115.771559,40.47285],[115.776683,40.477511],[115.776202,40.482704],[115.782204,40.492073],[115.774529,40.493911],[115.768088,40.498345],[115.744039,40.498249],[115.743077,40.494959],[115.73605,40.503988],[115.743098,40.513854],[115.743788,40.518464],[115.748702,40.526087],[115.755624,40.531019],[115.752968,40.536288],[115.75506,40.540042],[115.759577,40.538914],[115.763885,40.540574],[115.770179,40.548002],[115.773902,40.548582],[115.776327,40.552158],[115.784713,40.558376],[115.7922,40.561292],[115.79908,40.5577],[115.804915,40.55865],[115.815036,40.55741],[115.819804,40.559343],[115.82154,40.563305],[115.820662,40.568234],[115.827374,40.587027],[115.846175,40.593049],[115.854895,40.590151],[115.86623,40.593371],[115.867777,40.595786],[115.885406,40.595223],[115.888146,40.597026],[115.894733,40.606878],[115.897849,40.608101],[115.907803,40.617291],[115.920372,40.616632],[115.928297,40.612753],[115.935031,40.613316],[115.944672,40.611095],[115.948331,40.608809],[115.955107,40.609534],[115.967404,40.605896],[115.965877,40.601002],[115.971983,40.60237],[115.97512,40.590779],[115.982147,40.579008],[115.995238,40.579862],[115.996116,40.58392],[116.005109,40.584097],[116.025268,40.60654],[116.028509,40.607328],[116.030036,40.597364],[116.032357,40.599875],[116.04457,40.602032],[116.050907,40.606121],[116.058289,40.607006],[116.062722,40.610322],[116.069811,40.610258],[116.073492,40.612125],[116.076691,40.619883],[116.08583,40.623825],[116.088507,40.626626],[116.098879,40.630584],[116.1044,40.626996],[116.118349,40.627961],[116.122071,40.629989],[116.120419,40.633287],[116.112744,40.640946],[116.111531,40.646287],[116.113225,40.648845],[116.125229,40.654089],[116.13694,40.667648],[116.142858,40.666972],[116.151432,40.663338],[116.162683,40.662437],[116.167597,40.672633],[116.168413,40.67892],[116.171487,40.68167],[116.173683,40.689034],[116.171341,40.695979],[116.176213,40.700544],[116.177907,40.707889],[116.181128,40.712438],[116.184913,40.713675],[116.192274,40.724779],[116.197753,40.7269],[116.2057,40.733038],[116.204717,40.739946],[116.210551,40.741713],[116.213249,40.740139],[116.220359,40.744669],[116.220485,40.749183],[116.223308,40.753793],[116.23366,40.759896],[116.229979,40.762417],[116.231757,40.77149],[116.235625,40.775135],[116.235019,40.78313],[116.245224,40.78838],[116.247943,40.791831],[116.257834,40.787898],[116.261013,40.782938],[116.269587,40.777158],[116.26988,40.770703],[116.274167,40.766335],[116.273456,40.762883],[116.277366,40.76163],[116.281402,40.763926],[116.290918,40.763814],[116.29786,40.756812],[116.304762,40.755656],[116.30794,40.752122],[116.311119,40.75511],[116.30794,40.763734],[116.313168,40.770205],[116.31756,40.77218],[116.330149,40.77377],[116.33314,40.772694],[116.342947,40.773096],[116.353111,40.770221],[116.361204,40.772646],[116.367687,40.77088],[116.37097,40.772453],[116.379837,40.772325],[116.392635,40.778394],[116.403217,40.778635],[116.407838,40.780417],[116.4143,40.777912],[116.416496,40.76937],[116.424861,40.767443],[116.431846,40.768246],[116.437722,40.766865],[116.444414,40.76921],[116.45395,40.76587],[116.465452,40.772742],[116.471517,40.771233],[116.4803,40.771586],[116.485193,40.765179],[116.491404,40.7633],[116.495482,40.759735],[116.50025,40.760811],[116.502906,40.756635],[116.501819,40.746581],[116.506461,40.743432],[116.513697,40.741456],[116.509493,40.73548],[116.510748,40.72645],[116.506858,40.720039],[116.504119,40.720135],[116.503115,40.715893],[116.506064,40.710879],[116.501923,40.706796],[116.501066,40.70228],[116.502676,40.697361],[116.496653,40.696879],[116.488811,40.69196],[116.483374,40.679403],[116.487138,40.674338],[116.492826,40.673984],[116.501568,40.671186],[116.505938,40.673067],[116.513488,40.672344],[116.517273,40.665734],[116.520096,40.66411],[116.518381,40.660925],[116.527039,40.6584],[116.529507,40.654588],[116.540046,40.656679],[116.544103,40.653767],[116.545023,40.650116],[116.550335,40.647606],[116.551151,40.642828],[116.55389,40.642877],[116.563886,40.636908],[116.573903,40.63628],[116.574092,40.631678],[116.568989,40.625483],[116.561231,40.628557],[116.551674,40.625209],[116.545003,40.627076],[116.539294,40.625612],[116.538938,40.619673],[116.535634,40.615698],[116.532915,40.606459],[116.535948,40.59944],[116.530929,40.595883],[116.531577,40.59131],[116.525136,40.583002],[116.517796,40.579749],[116.513153,40.572792],[116.509577,40.57276],[116.505144,40.562581],[116.499999,40.560921],[116.496277,40.555106],[116.484587,40.552867],[116.479651,40.541396],[116.470617,40.535418],[116.467125,40.530068],[116.460956,40.524363],[116.46587,40.518802],[116.470345,40.518963],[116.476306,40.514192],[116.488581,40.515853],[116.492073,40.518093],[116.497762,40.518093],[116.500459,40.510904],[116.506398,40.508212],[116.51194,40.501135],[116.519155,40.496604],[116.519092,40.491799],[116.511543,40.486929],[116.508322,40.483172],[116.492157,40.481027],[116.487347,40.481737],[116.483541,40.484994],[116.468212,40.48493],[116.465577,40.48701],[116.457903,40.488445],[116.455937,40.480914],[116.443201,40.481801],[116.433142,40.478189],[116.420971,40.480301],[116.416664,40.483011],[116.413673,40.481527],[116.4065,40.481995],[116.393702,40.47256],[116.38609,40.475802],[116.387344,40.482043],[116.376825,40.485736],[116.378603,40.491525],[116.377537,40.49683],[116.369632,40.500312],[116.365909,40.499635],[116.357042,40.501941],[116.348636,40.499071],[116.34232,40.500457],[116.336653,40.498636],[116.330567,40.500748],[116.323227,40.500151],[116.31321,40.491799],[116.31022,40.491702],[116.303779,40.485817],[116.29717,40.486768],[116.291691,40.485317],[116.294786,40.47535],[116.301646,40.468108],[116.306853,40.466092],[116.300955,40.458429],[116.293824,40.452831],[116.294368,40.449975],[116.289788,40.440907],[116.290667,40.435856],[116.294452,40.429304],[116.296648,40.420701],[116.291942,40.416617],[116.289433,40.418021],[116.288513,40.413437],[116.291608,40.408448],[116.287864,40.404719],[116.289746,40.402539],[116.286003,40.396032],[116.289872,40.391672],[116.290729,40.383177],[116.282845,40.375263],[116.270863,40.382693],[116.261264,40.380561],[116.258336,40.383193],[116.25338,40.381239],[116.252104,40.376297],[116.247796,40.374471],[116.24353,40.379818],[116.241962,40.377508],[116.23665,40.377427],[116.23184,40.374988],[116.226989,40.38111],[116.222221,40.382111],[116.211451,40.381756],[116.209129,40.376232],[116.192985,40.372775],[116.180354,40.367687],[116.177154,40.370934],[116.170713,40.369351],[116.168789,40.366718],[116.159295,40.366265],[116.148233,40.361807],[116.148651,40.35696],[116.145514,40.351046],[116.1507,40.349252],[116.155677,40.344906],[116.152603,40.337714],[116.144719,40.336631],[116.147543,40.340655],[116.144782,40.348541],[116.138404,40.345229],[116.140809,40.343047],[116.137567,40.340769],[116.137651,40.336534],[116.143904,40.336082],[116.13809,40.330974],[116.138383,40.324671],[116.141959,40.316879],[116.132737,40.31198],[116.122385,40.312805],[116.116237,40.321955],[116.116634,40.323668],[116.110381,40.330813],[116.102978,40.331524],[116.098649,40.330005],[116.086353,40.330813],[116.083342,40.33571],[116.077716,40.339346],[116.073429,40.339831],[116.06841,40.336971],[116.061802,40.336809],[116.053353,40.326853],[116.056971,40.322181],[116.051116,40.315812],[116.042479,40.316846],[116.040095,40.312724],[116.031144,40.312352],[116.026167,40.320484],[116.026481,40.324283],[116.01684,40.33466],[116.007597,40.33314],[115.999065,40.325463],[115.993398,40.328986],[115.982711,40.324202],[115.979658,40.320532],[115.973259,40.318997],[115.976417,40.311511],[115.975538,40.308698],[115.987919,40.303799],[115.990323,40.299498],[115.982732,40.297977],[115.978675,40.289633],[115.981227,40.28525],[115.978822,40.281627],[115.981812,40.276903],[115.976396,40.270983],[115.967006,40.265612]]]]}}]}', 'admin', '2020-12-10 10:26:00', NULL, '2020-12-10 10:26:00', '0', NULL); +INSERT INTO `jimu_report_map` VALUES ('1338695077400154114', '无锡市', 'wuxi', '{\"type\":\"FeatureCollection\",\"features\":[{\"type\":\"Feature\",\"properties\":{\"adcode\":320205,\"name\":\"锡山区\",\"center\":[120.357298,31.585559],\"centroid\":[120.482864,31.624824],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":0,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.581713,31.727632],[120.582451,31.721169],[120.58458,31.71792],[120.58509,31.714432],[120.589848,31.714115],[120.590836,31.712997],[120.596788,31.710822],[120.599079,31.710716],[120.600806,31.708849],[120.600231,31.706876],[120.595734,31.705608],[120.592802,31.700817],[120.587024,31.696166],[120.584917,31.69281],[120.578118,31.6937],[120.578367,31.689947],[120.575587,31.691824],[120.576836,31.689463],[120.572405,31.689692],[120.570059,31.688908],[120.568049,31.685199],[120.566235,31.685393],[120.566094,31.683112],[120.562858,31.680513],[120.564161,31.67891],[120.566626,31.678672],[120.566377,31.676143],[120.568766,31.668593],[120.568625,31.665174],[120.566789,31.659931],[120.558589,31.658504],[120.561066,31.655693],[120.571731,31.655781],[120.583429,31.651957],[120.586643,31.651816],[120.592128,31.650282],[120.595854,31.643761],[120.589587,31.636525],[120.595571,31.631395],[120.592107,31.62504],[120.6006,31.617115],[120.596266,31.613298],[120.591488,31.611499],[120.584482,31.613439],[120.577086,31.614162],[120.570026,31.609445],[120.567126,31.609172],[120.568343,31.606183],[120.566464,31.601933],[120.557058,31.600302],[120.553104,31.60561],[120.546251,31.604693],[120.54309,31.601739],[120.545078,31.585717],[120.547782,31.583283],[120.546848,31.579685],[120.548,31.576599],[120.550215,31.575011],[120.553072,31.575082],[120.563629,31.579597],[120.568256,31.576299],[120.573035,31.577472],[120.567419,31.583998],[120.570428,31.585665],[120.573838,31.585947],[120.584254,31.585144],[120.587045,31.583389],[120.594572,31.576008],[120.595962,31.571492],[120.597548,31.563862],[120.599264,31.54846],[120.60502,31.546078],[120.602805,31.541182],[120.602913,31.53827],[120.605118,31.535685],[120.60426,31.530867],[120.605759,31.525247],[120.602349,31.51899],[120.600035,31.51861],[120.598569,31.516166],[120.595636,31.517145],[120.593986,31.525502],[120.592758,31.52755],[120.589826,31.526967],[120.585775,31.524532],[120.576923,31.517498],[120.568549,31.512371],[120.559849,31.508964],[120.555201,31.507579],[120.551616,31.500632],[120.548499,31.497402],[120.548043,31.495089],[120.549086,31.489175],[120.553007,31.486738],[120.555244,31.480294],[120.555233,31.477866],[120.553441,31.477027],[120.551236,31.48213],[120.552062,31.483825],[120.547793,31.486244],[120.546197,31.487912],[120.542971,31.487612],[120.534999,31.487921],[120.533055,31.490675],[120.531024,31.495327],[120.528613,31.497887],[120.5253,31.499229],[120.525267,31.502583],[120.522389,31.504631],[120.519804,31.500888],[120.518295,31.501718],[120.519598,31.504604],[120.521118,31.504507],[120.521129,31.507402],[120.519196,31.508929],[120.518251,31.512759],[120.521542,31.512609],[120.523519,31.514524],[120.521455,31.515672],[120.52265,31.517869],[120.522606,31.521452],[120.528786,31.526588],[120.523888,31.529244],[120.518914,31.527453],[120.516959,31.529817],[120.513016,31.531547],[120.508096,31.534926],[120.506782,31.537476],[120.504544,31.538791],[120.505967,31.542099],[120.502774,31.544552],[120.504523,31.549493],[120.503295,31.552686],[120.498647,31.554697],[120.490707,31.557414],[120.486971,31.555941],[120.481334,31.554883],[120.481693,31.55954],[120.477033,31.558905],[120.47623,31.560511],[120.472819,31.561066],[120.473112,31.563986],[120.46614,31.564674],[120.466715,31.566791],[120.46085,31.565838],[120.457831,31.564171],[120.455116,31.568061],[120.45176,31.5665],[120.451477,31.568255],[120.448545,31.569631],[120.448968,31.571095],[120.444178,31.576475],[120.439237,31.574676],[120.434099,31.576466],[120.429288,31.577286],[120.422543,31.580823],[120.419404,31.581026],[120.415733,31.583425],[120.414267,31.580691],[120.399615,31.580197],[120.394522,31.57674],[120.394804,31.573635],[120.39374,31.573538],[120.39677,31.569516],[120.392588,31.567408],[120.388646,31.570919],[120.387321,31.573441],[120.385051,31.573776],[120.380435,31.575875],[120.37811,31.576025],[120.372028,31.573679],[120.369367,31.573397],[120.366913,31.57009],[120.362753,31.569031],[120.351881,31.568035],[120.348905,31.565847],[120.346135,31.569516],[120.348394,31.570857],[120.349557,31.574455],[120.345886,31.575858],[120.347135,31.581326],[120.34581,31.590876],[120.342334,31.598274],[120.340792,31.599958],[120.341096,31.60308],[120.349231,31.602762],[120.352848,31.603847],[120.352587,31.607479],[120.350013,31.610838],[120.340042,31.610486],[120.321741,31.613562],[120.31794,31.613792],[120.314432,31.612989],[120.314606,31.619072],[120.315779,31.632012],[120.317723,31.634551],[120.323903,31.636146],[120.329985,31.638737],[120.334123,31.637821],[120.334905,31.636199],[120.340683,31.635485],[120.343257,31.63664],[120.346668,31.636128],[120.345266,31.646017],[120.345288,31.65245],[120.357811,31.652714],[120.360461,31.655323],[120.362644,31.655349],[120.366326,31.653419],[120.368075,31.653499],[120.368716,31.655781],[120.374765,31.660962],[120.378751,31.665685],[120.382629,31.667377],[120.391176,31.674478],[120.390981,31.676689],[120.389373,31.677932],[120.383204,31.679491],[120.379349,31.682037],[120.378056,31.684407],[120.376981,31.690978],[120.3776,31.693383],[120.382857,31.694202],[120.384909,31.695171],[120.390307,31.699513],[120.394174,31.699231],[120.398106,31.697408],[120.399398,31.699998],[120.402982,31.699522],[120.411041,31.703538],[120.415375,31.704604],[120.41986,31.704498],[120.427376,31.70249],[120.430309,31.704604],[120.432948,31.705309],[120.44685,31.706084],[120.451173,31.707255],[120.452824,31.711456],[120.456701,31.710725],[120.458309,31.7132],[120.461339,31.714503],[120.46261,31.716132],[120.471907,31.712513],[120.485125,31.713728],[120.487297,31.715445],[120.491272,31.713719],[120.492163,31.711905],[120.491022,31.70965],[120.496312,31.710417],[120.498288,31.713402],[120.504827,31.713825],[120.507336,31.724119],[120.50853,31.724762],[120.518284,31.734896],[120.528504,31.725818],[120.535129,31.721653],[120.541755,31.723397],[120.546968,31.725977],[120.551953,31.726734],[120.562412,31.723062],[120.56806,31.722957],[120.576,31.726153],[120.580257,31.726329],[120.581713,31.727632]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320206,\"name\":\"惠山区\",\"center\":[120.303543,31.681019],\"centroid\":[120.210639,31.65177],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":1,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.074955,31.554424],[120.071827,31.554371],[120.069188,31.552492],[120.063899,31.555571],[120.058208,31.559523],[120.056155,31.563404],[120.05937,31.56904],[120.059457,31.57263],[120.055775,31.576669],[120.057067,31.5804],[120.061814,31.583072],[120.064692,31.586961],[120.068526,31.590127],[120.070622,31.590956],[120.07489,31.595364],[120.075585,31.607118],[120.084242,31.611808],[120.093962,31.618085],[120.10238,31.625877],[120.104476,31.628769],[120.116423,31.62995],[120.119486,31.630893],[120.121115,31.638147],[120.124482,31.648238],[120.125883,31.657843],[120.126024,31.673844],[120.126709,31.678725],[120.128533,31.684636],[120.143272,31.676073],[120.151037,31.682398],[120.151027,31.684829],[120.149365,31.686221],[120.143,31.688327],[120.143858,31.689965],[120.14527,31.697065],[120.147703,31.69821],[120.15359,31.699143],[120.153166,31.70212],[120.156837,31.703829],[120.155979,31.712601],[120.158912,31.713948],[120.159477,31.717206],[120.16141,31.718069],[120.158075,31.722393],[120.158108,31.725924],[120.155176,31.727086],[120.155979,31.729569],[120.157684,31.730696],[120.156131,31.737942],[120.154752,31.741429],[120.155968,31.742045],[120.156077,31.751509],[120.155241,31.752283],[120.155621,31.756843],[120.159998,31.759079],[120.169023,31.760962],[120.17239,31.75804],[120.178657,31.758401],[120.183121,31.753296],[120.183947,31.749915],[120.197056,31.752706],[120.201161,31.753269],[120.203779,31.740381],[120.202921,31.735372],[120.203942,31.728891],[120.206451,31.726065],[120.215357,31.724321],[120.220494,31.723969],[120.224991,31.724779],[120.228857,31.727306],[120.237361,31.728363],[120.248646,31.726928],[120.254446,31.724365],[120.256933,31.72013],[120.261104,31.721002],[120.264384,31.722692],[120.273714,31.724603],[120.276157,31.723168],[120.282435,31.70338],[120.283662,31.7019],[120.292558,31.69909],[120.298423,31.698932],[120.311336,31.700253],[120.319395,31.700746],[120.333862,31.698192],[120.336013,31.694396],[120.346624,31.691145],[120.349209,31.689128],[120.360135,31.687481],[120.366619,31.689137],[120.371322,31.691612],[120.3776,31.693383],[120.376981,31.690978],[120.378056,31.684407],[120.379349,31.682037],[120.383204,31.679491],[120.389373,31.677932],[120.390981,31.676689],[120.391176,31.674478],[120.382629,31.667377],[120.378751,31.665685],[120.374765,31.660962],[120.368716,31.655781],[120.368075,31.653499],[120.366326,31.653419],[120.362644,31.655349],[120.360461,31.655323],[120.357811,31.652714],[120.345288,31.65245],[120.345266,31.646017],[120.346668,31.636128],[120.343257,31.63664],[120.340683,31.635485],[120.334905,31.636199],[120.334123,31.637821],[120.329985,31.638737],[120.323903,31.636146],[120.317723,31.634551],[120.315779,31.632012],[120.314606,31.619072],[120.312553,31.618825],[120.305287,31.62288],[120.300258,31.624881],[120.290168,31.626538],[120.282935,31.626521],[120.283108,31.6292],[120.269728,31.630778],[120.266491,31.625578],[120.265481,31.621567],[120.262331,31.619583],[120.253012,31.626741],[120.248233,31.626627],[120.243878,31.625384],[120.246289,31.6208],[120.24516,31.618102],[120.241565,31.615969],[120.244106,31.608846],[120.246105,31.600523],[120.242531,31.59249],[120.240576,31.592331],[120.234787,31.594359],[120.228358,31.594553],[120.222156,31.592666],[120.215476,31.592578],[120.214043,31.590832],[120.220983,31.579562],[120.220266,31.576528],[120.217084,31.57681],[120.213684,31.574605],[120.197914,31.568634],[120.196947,31.566738],[120.199054,31.564974],[120.197371,31.561551],[120.194482,31.561269],[120.186336,31.565935],[120.184435,31.564991],[120.183697,31.560458],[120.181611,31.556991],[120.179157,31.555474],[120.176735,31.556585],[120.175323,31.561631],[120.173346,31.564118],[120.168144,31.5647],[120.165189,31.566844],[120.163061,31.573662],[120.16255,31.576987],[120.161551,31.59413],[120.153927,31.589501],[120.14956,31.587384],[120.135995,31.582146],[120.134018,31.582225],[120.132063,31.579227],[120.128913,31.577533],[120.122408,31.577128],[120.119301,31.575381],[120.118661,31.572859],[120.113762,31.572083],[120.111514,31.570733],[120.112882,31.568864],[120.102054,31.563545],[120.091562,31.559258],[120.085143,31.557194],[120.074955,31.554424]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320211,\"name\":\"滨湖区\",\"center\":[120.266053,31.550228],\"centroid\":[120.196866,31.446924],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":2,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.100153,31.335332],[120.100436,31.33939],[120.096145,31.352493],[120.093658,31.353138],[120.057252,31.356126],[120.044859,31.358805],[120.041905,31.361024],[120.040157,31.364498],[120.039711,31.378127],[120.044566,31.406228],[120.054786,31.434286],[120.060966,31.440424],[120.078757,31.450007],[120.087793,31.453416],[120.089987,31.45474],[120.091356,31.453186],[120.110069,31.461531],[120.105682,31.470493],[120.108733,31.480991],[120.111188,31.48514],[120.117607,31.493235],[120.123581,31.499202],[120.127501,31.501471],[120.129739,31.504701],[120.12319,31.511338],[120.12206,31.508479],[120.121984,31.505354],[120.118834,31.505504],[120.118378,31.51193],[120.120257,31.514983],[120.11626,31.516228],[120.117542,31.518037],[120.115771,31.519105],[120.111025,31.514039],[120.10743,31.511983],[120.102738,31.513545],[120.100501,31.516828],[120.103412,31.518557],[120.103955,31.521011],[120.10238,31.523146],[120.102358,31.527391],[120.103857,31.52815],[120.101587,31.529959],[120.102054,31.533523],[120.100729,31.533797],[120.10112,31.536841],[120.103151,31.538782],[120.101717,31.542002],[120.09948,31.542338],[120.096786,31.541138],[120.094169,31.541932],[120.095038,31.544173],[120.096732,31.543573],[120.099056,31.546299],[120.096949,31.547252],[120.097329,31.548743],[120.085339,31.550904],[120.082319,31.550286],[120.080191,31.55146],[120.081537,31.553418],[120.079561,31.555033],[120.074955,31.554424],[120.085143,31.557194],[120.091562,31.559258],[120.102054,31.563545],[120.112882,31.568864],[120.111514,31.570733],[120.113762,31.572083],[120.118661,31.572859],[120.119301,31.575381],[120.122408,31.577128],[120.128913,31.577533],[120.132063,31.579227],[120.134018,31.582225],[120.135995,31.582146],[120.14956,31.587384],[120.153927,31.589501],[120.161551,31.59413],[120.16255,31.576987],[120.163061,31.573662],[120.165189,31.566844],[120.168144,31.5647],[120.173346,31.564118],[120.175323,31.561631],[120.176735,31.556585],[120.179157,31.555474],[120.181611,31.556991],[120.183697,31.560458],[120.184435,31.564991],[120.186336,31.565935],[120.194482,31.561269],[120.197371,31.561551],[120.199054,31.564974],[120.196947,31.566738],[120.197914,31.568634],[120.213684,31.574605],[120.217084,31.57681],[120.220266,31.576528],[120.220983,31.579562],[120.214043,31.590832],[120.215476,31.592578],[120.222156,31.592666],[120.228358,31.594553],[120.234787,31.594359],[120.240576,31.592331],[120.242531,31.59249],[120.244454,31.587657],[120.250102,31.583045],[120.255489,31.580603],[120.25904,31.580259],[120.263189,31.578495],[120.269065,31.578856],[120.268011,31.580338],[120.271009,31.581229],[120.271954,31.579915],[120.27707,31.580497],[120.280643,31.577904],[120.279524,31.574755],[120.27985,31.570195],[120.283,31.565512],[120.289907,31.558191],[120.288267,31.554936],[120.285368,31.551451],[120.285096,31.549828],[120.287637,31.537626],[120.287855,31.535306],[120.291971,31.535262],[120.293046,31.532332],[120.297076,31.531432],[120.29675,31.528291],[120.295316,31.525847],[120.298227,31.523596],[120.303842,31.525114],[120.307937,31.524946],[120.310294,31.526605],[120.311532,31.521699],[120.310087,31.520269],[120.308241,31.520737],[120.307329,31.517401],[120.31126,31.514013],[120.313639,31.513227],[120.322121,31.513836],[120.323533,31.513077],[120.325695,31.516898],[120.330495,31.518805],[120.331679,31.522511],[120.334612,31.52657],[120.338055,31.529138],[120.347135,31.527338],[120.357453,31.518399],[120.362579,31.513439],[120.356269,31.509379],[120.351718,31.507879],[120.354031,31.500765],[120.354792,31.500879],[120.360429,31.491408],[120.359755,31.489907],[120.354998,31.488539],[120.357083,31.47384],[120.361221,31.471853],[120.359169,31.46795],[120.353293,31.461496],[120.355823,31.416459],[120.335546,31.407359],[120.308143,31.393266],[120.253121,31.366098],[120.209611,31.345668],[120.173715,31.30881],[120.110232,31.264001],[120.100153,31.335332]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320213,\"name\":\"梁溪区\",\"center\":[120.296595,31.575706],\"centroid\":[120.299797,31.580629],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":3,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.345886,31.575858],[120.342844,31.576228],[120.340346,31.575038],[120.336784,31.575187],[120.336762,31.573706],[120.334253,31.573812],[120.334156,31.576493],[120.332005,31.577992],[120.330593,31.576819],[120.332516,31.573873],[120.329844,31.574014],[120.330202,31.572427],[120.333015,31.571527],[120.333167,31.569746],[120.331332,31.568343],[120.326346,31.569349],[120.326879,31.570866],[120.329518,31.569657],[120.32967,31.574041],[120.327052,31.5742],[120.32702,31.575778],[120.323631,31.575461],[120.325673,31.573679],[120.323805,31.572321],[120.319189,31.578953],[120.321046,31.579553],[120.319015,31.581326],[120.317506,31.579624],[120.319091,31.577551],[120.316843,31.576475],[120.316571,31.578415],[120.315094,31.575919],[120.317017,31.574438],[120.313954,31.573891],[120.317332,31.572912],[120.317614,31.574755],[120.319656,31.573723],[120.31958,31.569993],[120.323718,31.569869],[120.320405,31.568687],[120.322491,31.567946],[120.323077,31.562248],[120.32122,31.559558],[120.323642,31.559911],[120.324391,31.556762],[120.334514,31.55677],[120.343073,31.545408],[120.33799,31.543652],[120.335502,31.538967],[120.346505,31.528573],[120.347135,31.527338],[120.338055,31.529138],[120.334612,31.52657],[120.331679,31.522511],[120.330495,31.518805],[120.325695,31.516898],[120.323533,31.513077],[120.322121,31.513836],[120.313639,31.513227],[120.31126,31.514013],[120.307329,31.517401],[120.308241,31.520737],[120.310087,31.520269],[120.311532,31.521699],[120.310294,31.526605],[120.307937,31.524946],[120.303842,31.525114],[120.298227,31.523596],[120.295316,31.525847],[120.29675,31.528291],[120.297076,31.531432],[120.293046,31.532332],[120.291971,31.535262],[120.287855,31.535306],[120.287637,31.537626],[120.285096,31.549828],[120.285368,31.551451],[120.288267,31.554936],[120.289907,31.558191],[120.283,31.565512],[120.27985,31.570195],[120.279524,31.574755],[120.280643,31.577904],[120.27707,31.580497],[120.271954,31.579915],[120.271009,31.581229],[120.268011,31.580338],[120.269065,31.578856],[120.263189,31.578495],[120.25904,31.580259],[120.255489,31.580603],[120.250102,31.583045],[120.244454,31.587657],[120.242531,31.59249],[120.246105,31.600523],[120.244106,31.608846],[120.241565,31.615969],[120.24516,31.618102],[120.246289,31.6208],[120.243878,31.625384],[120.248233,31.626627],[120.253012,31.626741],[120.262331,31.619583],[120.265481,31.621567],[120.266491,31.625578],[120.269728,31.630778],[120.283108,31.6292],[120.282935,31.626521],[120.290168,31.626538],[120.300258,31.624881],[120.305287,31.62288],[120.312553,31.618825],[120.314606,31.619072],[120.314432,31.612989],[120.31794,31.613792],[120.321741,31.613562],[120.340042,31.610486],[120.350013,31.610838],[120.352587,31.607479],[120.352848,31.603847],[120.349231,31.602762],[120.341096,31.60308],[120.340792,31.599958],[120.342334,31.598274],[120.34581,31.590876],[120.347135,31.581326],[120.345886,31.575858]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320214,\"name\":\"新吴区\",\"center\":[120.352782,31.550966],\"centroid\":[120.429487,31.506686],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":4,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.347135,31.527338],[120.346505,31.528573],[120.335502,31.538967],[120.33799,31.543652],[120.343073,31.545408],[120.334514,31.55677],[120.324391,31.556762],[120.323642,31.559911],[120.32122,31.559558],[120.323077,31.562248],[120.322491,31.567946],[120.320405,31.568687],[120.323718,31.569869],[120.31958,31.569993],[120.319656,31.573723],[120.317614,31.574755],[120.317332,31.572912],[120.313954,31.573891],[120.317017,31.574438],[120.315094,31.575919],[120.316571,31.578415],[120.316843,31.576475],[120.319091,31.577551],[120.317506,31.579624],[120.319015,31.581326],[120.321046,31.579553],[120.319189,31.578953],[120.323805,31.572321],[120.325673,31.573679],[120.323631,31.575461],[120.32702,31.575778],[120.327052,31.5742],[120.32967,31.574041],[120.329518,31.569657],[120.326879,31.570866],[120.326346,31.569349],[120.331332,31.568343],[120.333167,31.569746],[120.333015,31.571527],[120.330202,31.572427],[120.329844,31.574014],[120.332516,31.573873],[120.330593,31.576819],[120.332005,31.577992],[120.334156,31.576493],[120.334253,31.573812],[120.336762,31.573706],[120.336784,31.575187],[120.340346,31.575038],[120.342844,31.576228],[120.345886,31.575858],[120.349557,31.574455],[120.348394,31.570857],[120.346135,31.569516],[120.348905,31.565847],[120.351881,31.568035],[120.362753,31.569031],[120.366913,31.57009],[120.369367,31.573397],[120.372028,31.573679],[120.37811,31.576025],[120.380435,31.575875],[120.385051,31.573776],[120.387321,31.573441],[120.388646,31.570919],[120.392588,31.567408],[120.39677,31.569516],[120.39374,31.573538],[120.394804,31.573635],[120.394522,31.57674],[120.399615,31.580197],[120.414267,31.580691],[120.415733,31.583425],[120.419404,31.581026],[120.422543,31.580823],[120.429288,31.577286],[120.434099,31.576466],[120.439237,31.574676],[120.444178,31.576475],[120.448968,31.571095],[120.448545,31.569631],[120.451477,31.568255],[120.45176,31.5665],[120.455116,31.568061],[120.457831,31.564171],[120.46085,31.565838],[120.466715,31.566791],[120.46614,31.564674],[120.473112,31.563986],[120.472819,31.561066],[120.47623,31.560511],[120.477033,31.558905],[120.481693,31.55954],[120.481334,31.554883],[120.486971,31.555941],[120.490707,31.557414],[120.498647,31.554697],[120.503295,31.552686],[120.504523,31.549493],[120.502774,31.544552],[120.505967,31.542099],[120.504544,31.538791],[120.506782,31.537476],[120.508096,31.534926],[120.513016,31.531547],[120.516959,31.529817],[120.518914,31.527453],[120.523888,31.529244],[120.528786,31.526588],[120.522606,31.521452],[120.52265,31.517869],[120.521455,31.515672],[120.523519,31.514524],[120.521542,31.512609],[120.518251,31.512759],[120.519196,31.508929],[120.521129,31.507402],[120.521118,31.504507],[120.519598,31.504604],[120.518295,31.501718],[120.519804,31.500888],[120.522389,31.504631],[120.525267,31.502583],[120.5253,31.499229],[120.528613,31.497887],[120.531024,31.495327],[120.533055,31.490675],[120.534999,31.487921],[120.542971,31.487612],[120.546197,31.487912],[120.547793,31.486244],[120.552062,31.483825],[120.551236,31.48213],[120.553441,31.477027],[120.54636,31.473133],[120.543568,31.470264],[120.537312,31.468365],[120.53615,31.467094],[120.5311,31.466608],[120.526017,31.46833],[120.523845,31.468357],[120.516003,31.464427],[120.515981,31.460233],[120.517361,31.457831],[120.513852,31.456189],[120.512364,31.45708],[120.50853,31.45565],[120.505044,31.457964],[120.501406,31.457557],[120.495421,31.451093],[120.495758,31.447931],[120.487026,31.44862],[120.484799,31.447481],[120.485418,31.449901],[120.480552,31.449132],[120.474437,31.446571],[120.460177,31.445485],[120.438172,31.44877],[120.431721,31.448647],[120.437477,31.443047],[120.435001,31.442606],[120.430537,31.446395],[120.426584,31.445441],[120.422641,31.448991],[120.418818,31.448382],[120.355823,31.416459],[120.353293,31.461496],[120.359169,31.46795],[120.361221,31.471853],[120.357083,31.47384],[120.354998,31.488539],[120.359755,31.489907],[120.360429,31.491408],[120.354792,31.500879],[120.354031,31.500765],[120.351718,31.507879],[120.356269,31.509379],[120.362579,31.513439],[120.357453,31.518399],[120.347135,31.527338]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320281,\"name\":\"江阴市\",\"center\":[120.275891,31.910984],\"centroid\":[120.303787,31.832204],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":5,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.581713,31.727632],[120.580257,31.726329],[120.576,31.726153],[120.56806,31.722957],[120.562412,31.723062],[120.551953,31.726734],[120.546968,31.725977],[120.541755,31.723397],[120.535129,31.721653],[120.528504,31.725818],[120.518284,31.734896],[120.50853,31.724762],[120.507336,31.724119],[120.504827,31.713825],[120.498288,31.713402],[120.496312,31.710417],[120.491022,31.70965],[120.492163,31.711905],[120.491272,31.713719],[120.487297,31.715445],[120.485125,31.713728],[120.471907,31.712513],[120.46261,31.716132],[120.461339,31.714503],[120.458309,31.7132],[120.456701,31.710725],[120.452824,31.711456],[120.451173,31.707255],[120.44685,31.706084],[120.432948,31.705309],[120.430309,31.704604],[120.427376,31.70249],[120.41986,31.704498],[120.415375,31.704604],[120.411041,31.703538],[120.402982,31.699522],[120.399398,31.699998],[120.398106,31.697408],[120.394174,31.699231],[120.390307,31.699513],[120.384909,31.695171],[120.382857,31.694202],[120.3776,31.693383],[120.371322,31.691612],[120.366619,31.689137],[120.360135,31.687481],[120.349209,31.689128],[120.346624,31.691145],[120.336013,31.694396],[120.333862,31.698192],[120.319395,31.700746],[120.311336,31.700253],[120.298423,31.698932],[120.292558,31.69909],[120.283662,31.7019],[120.282435,31.70338],[120.276157,31.723168],[120.273714,31.724603],[120.264384,31.722692],[120.261104,31.721002],[120.256933,31.72013],[120.254446,31.724365],[120.248646,31.726928],[120.237361,31.728363],[120.228857,31.727306],[120.224991,31.724779],[120.220494,31.723969],[120.215357,31.724321],[120.206451,31.726065],[120.203942,31.728891],[120.202921,31.735372],[120.203779,31.740381],[120.201161,31.753269],[120.200043,31.757767],[120.196556,31.764774],[120.192527,31.767352],[120.186108,31.783633],[120.185098,31.787681],[120.181242,31.79399],[120.174248,31.801029],[120.176192,31.807267],[120.179244,31.812853],[120.177886,31.814137],[120.172217,31.814947],[120.17049,31.817251],[120.172043,31.823004],[120.165494,31.825564],[120.163919,31.830287],[120.164093,31.832697],[120.167079,31.835485],[120.16999,31.836065],[120.173194,31.838774],[120.172521,31.840867],[120.1768,31.844499],[120.180493,31.849002],[120.184251,31.856124],[120.185185,31.860415],[120.182719,31.864855],[120.175888,31.870209],[120.168795,31.870165],[120.158119,31.867835],[120.151657,31.864187],[120.146161,31.862481],[120.144228,31.858929],[120.122809,31.859342],[120.117401,31.855007],[120.114088,31.855342],[120.098665,31.855553],[120.085469,31.853055],[120.080299,31.84748],[120.060489,31.834517],[120.056405,31.833348],[120.056698,31.831976],[120.051887,31.829152],[120.047966,31.825713],[120.044979,31.821755],[120.032011,31.826074],[120.030251,31.831272],[120.028763,31.832116],[120.025277,31.831677],[120.02279,31.828669],[120.022225,31.826654],[120.019292,31.822802],[120.014557,31.824948],[120.011331,31.823849],[120.009811,31.826989],[120.006292,31.825317],[120.003359,31.828246],[120.003685,31.838598],[120.000709,31.837859],[120.001187,31.840559],[120.000459,31.845616],[119.997342,31.845941],[119.99681,31.848984],[119.992911,31.84945],[119.990152,31.852809],[119.990217,31.854867],[119.995029,31.855939],[120.003272,31.859158],[120.005097,31.862543],[120.007997,31.8638],[120.007997,31.866886],[120.010506,31.867809],[120.013199,31.871686],[120.010223,31.873814],[120.01069,31.875546],[120.014774,31.881787],[120.009018,31.882868],[120.008518,31.885496],[120.006324,31.889127],[120.002555,31.8891],[120.000188,31.892537],[119.997831,31.894348],[120.001915,31.901484],[120.000894,31.905571],[120.005477,31.911889],[120.014991,31.914754],[120.022409,31.919692],[120.014405,31.927073],[120.011342,31.929331],[120.007399,31.935929],[120.008192,31.94033],[120.007649,31.947999],[120.008779,31.951293],[120.010832,31.953805],[120.01485,31.955149],[120.022399,31.967752],[120.064909,31.955465],[120.134811,31.939381],[120.175247,31.933829],[120.205875,31.931519],[120.236601,31.932907],[120.262994,31.941841],[120.294165,31.954886],[120.353054,31.980635],[120.370703,31.99082],[120.368878,31.961086],[120.371594,31.954956],[120.373527,31.946435],[120.375341,31.941727],[120.385996,31.935621],[120.390307,31.932195],[120.391252,31.928602],[120.390481,31.925852],[120.381065,31.918884],[120.379349,31.914148],[120.379761,31.912188],[120.38265,31.910949],[120.385214,31.911722],[120.385138,31.909534],[120.38857,31.909218],[120.390905,31.907926],[120.392067,31.905307],[120.396411,31.908181],[120.39791,31.90616],[120.40131,31.90536],[120.402385,31.907381],[120.40774,31.905518],[120.424998,31.898399],[120.436847,31.895604],[120.449544,31.891948],[120.466498,31.889979],[120.466574,31.887791],[120.468822,31.879616],[120.471299,31.879203],[120.484593,31.87442],[120.490881,31.871335],[120.492261,31.86547],[120.496073,31.860881],[120.502057,31.85215],[120.503274,31.841711],[120.508292,31.84369],[120.514428,31.841527],[120.517393,31.837947],[120.521977,31.834183],[120.528808,31.831351],[120.531306,31.827851],[120.529319,31.821324],[120.530839,31.81704],[120.529959,31.814674],[120.523693,31.810531],[120.522541,31.80629],[120.523942,31.801293],[120.526516,31.795548],[120.531154,31.793207],[120.531556,31.787796],[120.544394,31.787136],[120.544502,31.789468],[120.546229,31.791922],[120.548923,31.792054],[120.555483,31.794069],[120.555852,31.786872],[120.558383,31.78571],[120.57071,31.793779],[120.580735,31.784795],[120.584243,31.782146],[120.58874,31.771603],[120.589402,31.766182],[120.588533,31.762556],[120.594833,31.760434],[120.597668,31.75503],[120.600024,31.744625],[120.598754,31.742802],[120.594822,31.741138],[120.593323,31.738171],[120.589435,31.73494],[120.585601,31.735407],[120.584352,31.734465],[120.581713,31.727632]]]]}},{\"type\":\"Feature\",\"properties\":{\"adcode\":320282,\"name\":\"宜兴市\",\"center\":[119.820538,31.364384],\"centroid\":[119.787423,31.352315],\"childrenNum\":0,\"level\":\"district\",\"parent\":{\"adcode\":320200},\"subFeatureIndex\":6,\"acroutes\":[100000,320000,320200]},\"geometry\":{\"type\":\"MultiPolygon\",\"coordinates\":[[[[120.100153,31.335332],[120.110232,31.264001],[119.920011,31.170918],[119.913103,31.169572],[119.900211,31.169182],[119.891305,31.16431],[119.885245,31.162875],[119.883463,31.161538],[119.878359,31.16082],[119.875242,31.162353],[119.86664,31.168314],[119.859406,31.168828],[119.856267,31.170121],[119.851304,31.167827],[119.8476,31.167579],[119.842148,31.168757],[119.837575,31.173673],[119.831808,31.172451],[119.82817,31.17447],[119.826464,31.173204],[119.823782,31.168226],[119.823445,31.165825],[119.82792,31.163363],[119.829744,31.161387],[119.829375,31.158269],[119.823304,31.154132],[119.813583,31.149614],[119.809858,31.148524],[119.806599,31.149392],[119.800995,31.156338],[119.798019,31.157436],[119.794066,31.156205],[119.791274,31.156612],[119.789233,31.159686],[119.789352,31.162158],[119.793392,31.168057],[119.792513,31.171459],[119.790492,31.173204],[119.786626,31.173762],[119.784606,31.176011],[119.779327,31.178784],[119.773039,31.178049],[119.765653,31.173779],[119.762286,31.173363],[119.755357,31.170777],[119.753163,31.171406],[119.747754,31.169661],[119.74467,31.169882],[119.74051,31.173416],[119.738609,31.173585],[119.732864,31.171494],[119.723708,31.169758],[119.715888,31.169572],[119.713107,31.167614],[119.710316,31.158862],[119.707937,31.154025],[119.703875,31.151899],[119.698727,31.153069],[119.693297,31.156958],[119.68275,31.160501],[119.679275,31.167118],[119.678048,31.16819],[119.672606,31.167995],[119.663733,31.165958],[119.66294,31.164798],[119.662516,31.159855],[119.660072,31.15896],[119.656401,31.155283],[119.649374,31.154105],[119.645768,31.150464],[119.641554,31.148116],[119.637775,31.140488],[119.638122,31.135526],[119.63078,31.131255],[119.621972,31.130032],[119.616052,31.130094],[119.613728,31.129181],[119.609775,31.123811],[119.602802,31.112139],[119.599782,31.10917],[119.592115,31.110056],[119.581992,31.108647],[119.576507,31.110269],[119.574096,31.113991],[119.571326,31.129013],[119.564039,31.135871],[119.560259,31.140718],[119.554188,31.143996],[119.545835,31.14785],[119.541382,31.152333],[119.534518,31.158109],[119.532596,31.159093],[119.536625,31.167889],[119.543022,31.17548],[119.546378,31.176038],[119.548963,31.177942],[119.552374,31.177969],[119.553579,31.179156],[119.553188,31.183168],[119.554296,31.191678],[119.552765,31.201083],[119.552971,31.208635],[119.552558,31.212389],[119.550745,31.21617],[119.553851,31.221048],[119.551233,31.224952],[119.544152,31.226864],[119.536115,31.233494],[119.534475,31.236761],[119.530793,31.237283],[119.529066,31.23931],[119.522593,31.242169],[119.528588,31.247506],[119.527122,31.25232],[119.531553,31.2564],[119.532183,31.258586],[119.530478,31.268965],[119.535669,31.272505],[119.535528,31.275964],[119.530956,31.277663],[119.530912,31.279946],[119.533041,31.285404],[119.531401,31.287864],[119.535094,31.290907],[119.533671,31.294269],[119.527187,31.29794],[119.523679,31.301142],[119.522929,31.310924],[119.51966,31.313418],[119.520029,31.318247],[119.52672,31.327152],[119.53051,31.330875],[119.530728,31.339293],[119.528523,31.344969],[119.527589,31.360334],[119.528164,31.36524],[119.530434,31.370826],[119.534833,31.378039],[119.535702,31.381733],[119.540687,31.390155],[119.541741,31.394715],[119.541111,31.398585],[119.539666,31.400732],[119.537364,31.40143],[119.535974,31.406078],[119.536484,31.408216],[119.546639,31.413243],[119.553351,31.411724],[119.553797,31.415399],[119.556034,31.415143],[119.553905,31.417263],[119.553004,31.421981],[119.554383,31.422051],[119.554818,31.426141],[119.554557,31.433888],[119.556914,31.433897],[119.567514,31.432369],[119.576703,31.430726],[119.578256,31.432228],[119.578343,31.434551],[119.582524,31.437501],[119.582589,31.444823],[119.583317,31.446059],[119.587868,31.445803],[119.589595,31.447658],[119.590029,31.45225],[119.588433,31.454873],[119.589519,31.458352],[119.59143,31.460878],[119.591745,31.463059],[119.588357,31.464577],[119.588335,31.466688],[119.58411,31.465822],[119.565146,31.464339],[119.563572,31.468507],[119.565179,31.471385],[119.571891,31.471103],[119.57301,31.472039],[119.57515,31.480797],[119.573118,31.482624],[119.571652,31.488566],[119.567981,31.490419],[119.566406,31.492812],[119.567025,31.494798],[119.567015,31.504719],[119.568883,31.506775],[119.574259,31.505805],[119.579266,31.503148],[119.583621,31.504542],[119.584783,31.507314],[119.58613,31.514171],[119.58852,31.520111],[119.59307,31.529279],[119.593603,31.532209],[119.595883,31.535306],[119.601227,31.539029],[119.605278,31.549219],[119.607863,31.55318],[119.613315,31.557899],[119.61779,31.559364],[119.627934,31.55992],[119.63078,31.563677],[119.637655,31.568211],[119.640653,31.569084],[119.644443,31.572956],[119.646789,31.577683],[119.642684,31.582357],[119.642488,31.588672],[119.640055,31.590797],[119.641131,31.592851],[119.641239,31.596176],[119.639382,31.600258],[119.644128,31.604711],[119.64982,31.60516],[119.657944,31.609304],[119.661148,31.610186],[119.666774,31.6106],[119.67303,31.609322],[119.674985,31.604226],[119.677885,31.603318],[119.684955,31.604023],[119.690342,31.595241],[119.694122,31.587966],[119.694567,31.584192],[119.698021,31.581414],[119.699791,31.576554],[119.707318,31.577472],[119.709968,31.575999],[119.710044,31.568555],[119.712694,31.560325],[119.712901,31.558305],[119.715247,31.555985],[119.721199,31.556867],[119.725619,31.561031],[119.727759,31.562125],[119.733265,31.563157],[119.737251,31.561481],[119.746114,31.560272],[119.74795,31.558773],[119.755976,31.557026],[119.763905,31.554442],[119.768553,31.553789],[119.778904,31.554689],[119.792176,31.553383],[119.804101,31.54989],[119.807403,31.548504],[119.820697,31.537247],[119.832351,31.529191],[119.84192,31.528467],[119.847796,31.5298],[119.852955,31.534282],[119.856202,31.538835],[119.860069,31.543052],[119.861882,31.546264],[119.864,31.546017],[119.87762,31.546925],[119.890121,31.546546],[119.897594,31.546749],[119.90247,31.547746],[119.911062,31.548257],[119.921369,31.549863],[119.935629,31.552712],[119.94157,31.547684],[119.942483,31.546325],[119.948359,31.543379],[119.958796,31.540264],[119.966171,31.537194],[119.971721,31.535967],[119.973795,31.528361],[119.973567,31.515857],[119.981539,31.511471],[119.989924,31.50373],[119.996115,31.497499],[119.996919,31.501338],[119.997157,31.508117],[120.005553,31.503316],[120.009083,31.504454],[120.015795,31.505443],[120.018489,31.50464],[120.022084,31.501736],[120.030979,31.500209],[120.036203,31.497878],[120.037626,31.494754],[120.045489,31.490252],[120.043361,31.486094],[120.046195,31.479782],[120.044251,31.46969],[120.037604,31.425894],[120.03453,31.418597],[120.027851,31.409047],[120.021074,31.383006],[120.020943,31.374203],[120.023702,31.364948],[120.032076,31.353377],[120.041764,31.34588],[120.060662,31.339143],[120.068743,31.336879],[120.089585,31.332449],[120.100153,31.335332]]]]}}]}', 'admin', '2020-12-15 11:59:13', NULL, '2020-12-15 11:59:13', '0', NULL); + +-- ---------------------------- +-- Table structure for rep_demo_dadong +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_dadong`; +CREATE TABLE `rep_demo_dadong` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `hnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品编码', + `hname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品名称', + `danwei` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '单位', + `num` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数量', + `danjia` int(11) NOT NULL COMMENT '单价', + `fanli` int(11) NOT NULL COMMENT '返利', + `beizhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_dadong +-- ---------------------------- +INSERT INTO `rep_demo_dadong` VALUES (1, '5896', '冰箱', '件', '10', 1520, 300, '1'); +INSERT INTO `rep_demo_dadong` VALUES (2, '4596', '空调', '件', '8', 2000, 800, '2'); +INSERT INTO `rep_demo_dadong` VALUES (3, '3695', '洗衣机', '件', '7', 456, 500, '3'); +INSERT INTO `rep_demo_dadong` VALUES (4, '1258', '微波炉', '件', '1', 560, 400, '4'); +INSERT INTO `rep_demo_dadong` VALUES (5, '1258', '烤箱', '件', '5', 100, 800, '5'); +INSERT INTO `rep_demo_dadong` VALUES (6, '5623', '电饼铛', '件', '6', 80, 300, '6'); +INSERT INTO `rep_demo_dadong` VALUES (7, '5894', '早餐机', '件', '2', 145, 300, '7'); +INSERT INTO `rep_demo_dadong` VALUES (8, '4578', '电饭锅', '件', '1', 256, 800, '8'); +INSERT INTO `rep_demo_dadong` VALUES (9, '2589', '豆浆机', '件', '2', 145, 400, '9'); +INSERT INTO `rep_demo_dadong` VALUES (10, '1456', '榨汁机', '件', '3', 56, 300, '10'); +INSERT INTO `rep_demo_dadong` VALUES (11, '2578', '热水壶', '件', '6', 12, 300, '11'); +INSERT INTO `rep_demo_dadong` VALUES (12, '1369', '热水器', '件', '9', 6356, 800, '12'); +INSERT INTO `rep_demo_dadong` VALUES (13, '5642', '吸尘器', '件', '45', 100, 400, '13'); +INSERT INTO `rep_demo_dadong` VALUES (14, '1356', '挂烫机', '件', '2', 20, 400, '14'); +INSERT INTO `rep_demo_dadong` VALUES (15, '2587', '破壁机', '件', '7', 500, 400, '15'); + +-- ---------------------------- +-- Table structure for rep_demo_daibu +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_daibu`; +CREATE TABLE `rep_demo_daibu` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '法院名称', + `shiyou` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '什么罪', + `fname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '犯罪人姓名', + `fsex` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '犯罪人性别', + `fdata` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '出生日期', + `fadress` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '住址', + `riqi` date NULL DEFAULT NULL COMMENT '待遇', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_daibu +-- ---------------------------- +INSERT INTO `rep_demo_daibu` VALUES (1, '兰州市人民检查院检察院', '盗窃罪', '张三', '男', '315504000', '兰州市东城区单枫家园3号楼102', '2020-07-17'); +INSERT INTO `rep_demo_daibu` VALUES (8, '兰州市人民检查院检察院', '故意伤人罪', '赵六', '男', '473356800', '兰州市东城区单枫家园3号楼102', '2020-07-17'); + +-- ---------------------------- +-- Table structure for rep_demo_deliveryorder +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_deliveryorder`; +CREATE TABLE `rep_demo_deliveryorder` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品名称', + `specifications` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '单位', + `num` int(11) NOT NULL COMMENT '返利', + `price` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注', + `total` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `remarks` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_deliveryorder +-- ---------------------------- +INSERT INTO `rep_demo_deliveryorder` VALUES (1, '冰箱', 'H2563', 300, '1', '1000', '1'); +INSERT INTO `rep_demo_deliveryorder` VALUES (2, '空调', 'M79', 800, '2', '2560', '2'); +INSERT INTO `rep_demo_deliveryorder` VALUES (3, '洗衣机', 'H90', 500, '3', '259', '3'); +INSERT INTO `rep_demo_deliveryorder` VALUES (4, '微波炉', 'J89', 400, '4', '259', '4'); +INSERT INTO `rep_demo_deliveryorder` VALUES (5, '烤箱', 'K56', 800, '5', '368', '5'); +INSERT INTO `rep_demo_deliveryorder` VALUES (6, '电饼铛', 'H56', 300, '6', '456', '6'); +INSERT INTO `rep_demo_deliveryorder` VALUES (7, '早餐机', 'K67', 300, '7', '147', '7'); +INSERT INTO `rep_demo_deliveryorder` VALUES (8, '电饭锅', 'M45', 800, '8', '148', '8'); +INSERT INTO `rep_demo_deliveryorder` VALUES (9, '豆浆机', 'H56', 400, '9', '258', '9'); +INSERT INTO `rep_demo_deliveryorder` VALUES (10, '榨汁机', 'H45', 300, '10', '456', '10'); +INSERT INTO `rep_demo_deliveryorder` VALUES (11, '热水壶', 'U78', 300, '11', '258', '11'); +INSERT INTO `rep_demo_deliveryorder` VALUES (12, '热水器', 'J78', 800, '12', '158', '12'); +INSERT INTO `rep_demo_deliveryorder` VALUES (13, '吸尘器', 'R45', 400, '13', '125', '13'); +INSERT INTO `rep_demo_deliveryorder` VALUES (14, '挂烫机', 'U67', 400, '14', '120', '14'); +INSERT INTO `rep_demo_deliveryorder` VALUES (15, '破壁机', 'H56', 400, '15', '258', '15'); + +-- ---------------------------- +-- Table structure for rep_demo_employee +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_employee`; +CREATE TABLE `rep_demo_employee` ( + `id` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键', + `num` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '编号', + `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名', + `sex` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '性别', + `birthday` datetime(0) NULL DEFAULT NULL COMMENT '出生日期', + `nation` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '民族', + `political` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '政治面貌', + `native_place` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '籍贯', + `height` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身高', + `weight` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '体重', + `health` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '健康状况', + `id_card` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '身份证号', + `education` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学历', + `school` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '毕业学校', + `major` varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '专业', + `address` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '联系地址', + `zip_code` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮编', + `email` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'Email', + `phone` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '手机号', + `foreign_language` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '外语语种', + `foreign_language_level` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '外语水平', + `computer_level` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '计算机水平', + `graduation_time` datetime(0) NULL DEFAULT NULL COMMENT '毕业时间', + `arrival_time` datetime(0) NULL DEFAULT NULL COMMENT '到职时间', + `positional_titles` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '职称', + `education_experience` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '教育经历', + `work_experience` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '工作经历', + `create_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_by` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `del_flag` tinyint(1) NULL DEFAULT NULL COMMENT '删除标识0-正常,1-已删除', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_employee +-- ---------------------------- +INSERT INTO `rep_demo_employee` VALUES ('1', '001', '张三', '男', '2000-02-04 13:36:19', '汉族', '团员', '北京', '170', '65', '良好', '110101200002044853', '大专', '北京科技', '计算机', '北京朝阳区', '1001', 'zhang@163.com', '18011111111', '英语', '三级', '三级', '2019-02-04 13:41:17', '2020-02-04 13:41:31', '项目经理', '2018年9月—2019年7月:北京语言文化大学比较文学研究所攻读博士学位,获得比较文学博士学位', '2019年5月---至今 XX公司     网络系统工程师  \n2019年5月---至今 XX公司     网络系统工程师', NULL, '2020-02-04 15:18:03', NULL, NULL, NULL); +INSERT INTO `rep_demo_employee` VALUES ('2', '002', '王红', '女', '2000-02-04 13:36:19', '汉族', '团员', '北京', '170', '65', '良好', '110101200002044853', '大专', '北京科技', '计算机', '北京朝阳区', '1001', 'zhang@163.com', '18011111111', '英语', '三级', '三级', '2019-02-04 13:41:17', '2020-02-04 13:41:31', '项目经理', '2018年9月—2019年7月:北京语言文化大学比较文学研究所攻读博士学位,获得比较文学博士学位', '2019年5月---至今 XX公司     网络系统工程师  \n2019年5月---至今 XX公司     网络系统工程师', NULL, '2020-02-04 18:39:27', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for rep_demo_gongsi +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_gongsi`; +CREATE TABLE `rep_demo_gongsi` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `gname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品名称', + `gdata` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '返利', + `tdata` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注', + `didian` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `zhaiyao` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_gongsi +-- ---------------------------- +INSERT INTO `rep_demo_gongsi` VALUES (1, '北京天山海世界', '2020-02-30 11:12:25', '2020-02-25', '天山大厦', '1', '2399845661'); +INSERT INTO `rep_demo_gongsi` VALUES (2, 'dd天山海世界', '2020-02-30 11:12:25', '2020-02-25', '天山大厦', '1', '2399845661'); + +-- ---------------------------- +-- Table structure for rep_demo_huizong +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_huizong`; +CREATE TABLE `rep_demo_huizong` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `cname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '村(社区)名称', + `hname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '户主名称', + `num` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '保障编号', + `Jtotal` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '家庭人口', + `Jaddress` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '家庭住址', + `snum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '身份证号码', + `hushu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '户数', + `renkou` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '人口', + `money` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '金额', + `shouru` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '核减后月人均收入', + `bkey` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '保障类型', + `brenkou` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `cbuzhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '差额补助', + `qbuzhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '全额补助', + `zbuzhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '增发补助', + `hbuzhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '合计补助', + `sxinzeng` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '是否新增对象', + `schaobiao` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '收入超标', + `jchaobiao` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '机动车超标', + `die` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '死亡', + `qita` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '其他', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_huizong +-- ---------------------------- +INSERT INTO `rep_demo_huizong` VALUES (1, '李家村', '张三', '2563933', '2', '北京市朝阳区李家村201号', '18034596978', '2', '20', '1000', '1', '1', '2', '1000', '1000', '1000', '1000', '是', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (2, '李家村', '赵四', '2563934', '3', '北京市朝阳区李家村202号', '18034596978', '3', '10', '2560', '2', '1', '3', '1000', '1000', '1000', '1000', '是', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (3, '李家村', '王五', '2563935', '4', '北京市朝阳区李家村203号', '18034596978', '4', '50', '259', '3', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (4, '李家村', '丽丽', '2563936', '4', '北京市朝阳区李家村204号', '18034596978', '4', '20', '259', '4', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (5, '李家村', '张三枫', '2563937', '4', '北京市朝阳区李家村101号', '18034596978', '4', '50', '368', '5', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (6, '赵家村', '李易峰', '2563938', '4', '北京市朝阳区赵家村101号', '18034596978', '4', '40', '456', '6', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (7, '赵家村', '踩踩', '2563939', '4', '北京市朝阳区赵家村102号', '18034596978', '4', '30', '147', '7', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (8, '赵家村', '赵丽颖', '2563940', '4', '北京市朝阳区赵家村103号', '18034596978', '4', '50', '148', '8', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (9, '赵家村', '韩泽', '2563941', '4', '北京市朝阳区赵家村104号', '18034596978', '4', '20', '258', '9', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (10, '葛家村', '杨兵', '2563942', '4', '北京市朝阳区葛家村101号', '18034596978', '4', '10', '456', '10', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (11, '葛家村', '杨玉', '2563943', '4', '北京市朝阳区葛家村102号', '18034596978', '4', '50', '258', '11', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (12, '葛家村', '杨杰', '2563944', '4', '北京市朝阳区葛家村103号', '18034596978', '4', '80', '158', '12', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (13, '葛家村', '杨清', '2563945', '4', '北京市朝阳区葛家村104号', '18034596978', '4', '90', '125', '13', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (14, '葛家村', '王一', '2563946', '4', '北京市朝阳区葛家村105号', '18034596978', '4', '50', '120', '14', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); +INSERT INTO `rep_demo_huizong` VALUES (15, '葛家村', '王二', '2563947', '4', '北京市朝阳区葛家村106号', '18034596978', '4', '15', '258', '15', '1', '4', '1000', '1000', '1000', '1000', '否', '', '', '', ''); + +-- ---------------------------- +-- Table structure for rep_demo_income +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_income`; +CREATE TABLE `rep_demo_income` ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `month` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '月份', + `main_operating_income` decimal(10, 2) NULL DEFAULT NULL COMMENT '佣金/主营业收入', + `cumulative` decimal(10, 2) NULL DEFAULT NULL COMMENT '累计', + `lowest_level_in_history` decimal(10, 2) NULL DEFAULT NULL COMMENT '历史最低水平', + `historical_average` decimal(10, 2) NULL DEFAULT NULL COMMENT '历史平均水平', + `record_high` decimal(10, 2) NULL DEFAULT NULL COMMENT '历史最高水平', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_income +-- ---------------------------- +INSERT INTO `rep_demo_income` VALUES (1, '1', 483835.11, 483835.00, 57570.00, 216798.00, 483835.00); +INSERT INTO `rep_demo_income` VALUES (2, '2', 11666579.00, 12150413.00, 22140.00, 4985362.00, 11666579.00); +INSERT INTO `rep_demo_income` VALUES (3, '3', 27080982.00, 17428381.00, 73106.00, 16192642.00, 27080982.00); +INSERT INTO `rep_demo_income` VALUES (4, '4', 0.11, 39231395.00, 73106.00, 8513415.00, 17428381.00); + +-- ---------------------------- +-- Table structure for rep_demo_jianpiao +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_jianpiao`; +CREATE TABLE `rep_demo_jianpiao` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ftime` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `sfkong` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `kaishi` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jieshu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `hezairen` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jpnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `shihelv` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `s_id` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 87 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_jianpiao +-- ---------------------------- +INSERT INTO `rep_demo_jianpiao` VALUES (1, 'K7725', '21:13', '否', '秦皇岛', '邯郸', '300', '258', '86', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (2, 'k99', '16:55', '否', '包头', '广州', '800', '700', '88', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (3, 'G6737', '05:34', '否', '北京西', '邯郸东', '500', '256', '51', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (4, 'K7705', '07:03', '否', '北京', '邯郸', '400', '200', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (5, 'G437', '06:27', '否', '北京西', '兰州西', '800', '586', '73', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (6, 'G673', '06:32', '否', '北京西', '邯郸东', '300', '289', '87', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (7, 'G507', '06:43', '否', '北京西', '邯郸东', '300', '200', '67', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (8, 'G89', '06:53', '否', '北京西', '成都东', '800', '500', '62', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (9, 'K7712', '09:43', '否', '北京西', '西安北', '400', '200', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (10, 'G405', '10:05', '否', '北京西', '昆明南', '300', '200', '67', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (11, 'G6701', '10:38', '否', '北京西', '石家庄', '300', '200', '67', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (12, 'G487', '10:52', '否', '北京西', '南昌西', '800', '700', '88', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (13, 'G607', '11:14', '否', '北京西', '太原南', '400', '200', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (14, 'G667', '11:19', '否', '北京西', '西安北', '400', '200', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (15, 'Z49', '11:28', '否', '北京西', '成都', '400', '200', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (16, 'Z49', '11:28', '否', '北京西', '上海', '300', '200', '80', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (17, 'Z49', '11:56', '否', '北京西', '上海', '200', '180', '95', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (18, 'Z49', '11:36', '否', '北京南', '大晒', '200', '180', '96', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (19, 'Z123', '12:00', '否', '北京南', '重庆', '1000', '1000', '100', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (20, 'G78', '13:56', '否', '北京东', '厦门北', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (21, 'G56', '18:36', '否', '上海西', '深圳', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (22, 'H78', '12:00', '否', '上海', '北京西', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (23, 'H78', '12:00', '否', '上海', '北京西', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (24, 'H78', '12:00', '否', '上海', '北京西', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (25, 'H78', '12:00', '否', '北京西', '南昌', '800', '700', '90', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (26, 'G70', '7:23', '是', '北京西', '厦门', '500', '450', '95', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (27, 'G14', '9:50', '是', '北京西', '上海', '800', '700', '95', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (28, 'G90', '8:30', '是', '北京南', '武昌', '1000', '1000', '100', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (29, 'G25', '7:56', '是', '厦门北', '福州', '500', '100', '20', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (30, 'G50', '14:23', '否', '北京西', '深圳', '500', '100', '20', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (31, 'G10', '13:00', '否', '北京西', '深圳', '500', '100', '20', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (32, 'G10', '13:00', '否', '北京西', '深圳', '500', '100', '20', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (33, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (34, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (35, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (36, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (37, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (38, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (39, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (40, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (41, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (42, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (43, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (44, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (45, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (46, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (47, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (48, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (49, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (50, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (51, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (52, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (53, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (54, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (55, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (56, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (57, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (58, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (59, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (60, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (61, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (62, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (63, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (64, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (65, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (66, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (67, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (68, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (69, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (70, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (71, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (72, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (73, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (74, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (75, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (76, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (77, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (78, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (79, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (80, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (81, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (82, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (83, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (84, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (85, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); +INSERT INTO `rep_demo_jianpiao` VALUES (86, 'G10', '13:00', '否', '北京西', '深圳', '200', '100', '50', 1); + +-- ---------------------------- +-- Table structure for rep_demo_jiehsao +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_jiehsao`; +CREATE TABLE `rep_demo_jiehsao` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `tname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '到的公司', + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '去的人', + `num` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '几个人', + `yaunyin` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '去的目的', + `data` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '时间', + `kdata` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '开始时间', + `jdata` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '结束时间', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_jiehsao +-- ---------------------------- +INSERT INTO `rep_demo_jiehsao` VALUES (1, '北京文化局', '张科和赵四', '2', '去调查钱多多的问题', '2020年5月6日', '2020年5月6日', '2020年6月6日'); +INSERT INTO `rep_demo_jiehsao` VALUES (2, '北京市旅游局', '赵武和张九龄', '2', '去调查贪污问题', '2020年4月1日', '2020年4月7日', '2020年4月7日'); + +-- ---------------------------- +-- Table structure for rep_demo_kaoqin +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_kaoqin`; +CREATE TABLE `rep_demo_kaoqin` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `day` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `zcdaka` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `cdday` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ztday` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `kgday` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `bcnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `wqday` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `ccday` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `qjnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `qknum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_kaoqin +-- ---------------------------- +INSERT INTO `rep_demo_kaoqin` VALUES (1, '王小丽', '20', '20', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (2, '张三丰', '20', '14', '3', '0', '0', '3', '0', '0', '3', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (3, '李嘉怡', '20', '20', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (4, '杨子轩', '20', '10', '2', '0', '0', '2', '1', '1', '1', '1'); +INSERT INTO `rep_demo_kaoqin` VALUES (5, '赵四', '20', '12', '2', '0', '0', '0', '2', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (6, '王安石', '20', '20', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (7, '高圆圆', '20', '19', '0', '0', '0', '1', '1', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (8, '刘能', '20', '20', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (9, '宋小宝', '20', '20', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (10, '宋祖儿', '20', '15', '0', '0', '0', '10', '0', '5', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (11, '黄渤', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (12, '章成', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (13, '李易峰', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (14, '赵丽颖', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0'); +INSERT INTO `rep_demo_kaoqin` VALUES (15, '范冰冰', '20', '0', '0', '0', '0', '0', '0', '0', '0', '0'); + +-- ---------------------------- +-- Table structure for rep_demo_salesrate +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_salesrate`; +CREATE TABLE `rep_demo_salesrate` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `bname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品名称', + `stotal` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '单位', + `starget` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `srate` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注', + `jtotal` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jtarget` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `jrate` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_salesrate +-- ---------------------------- +INSERT INTO `rep_demo_salesrate` VALUES (1, '营销部', '235.25', '352.12', '66.99%', '452.20', '485.00', '93.24%'); +INSERT INTO `rep_demo_salesrate` VALUES (2, '广告部', '914.20', '687.20', '130.04%', '380.21', '875.20', '77.59%'); +INSERT INTO `rep_demo_salesrate` VALUES (3, '技术部', '1985.24', '2589.63', '125.36%', '3695.12', '2856.34', '82.35%'); + +-- ---------------------------- +-- Table structure for rep_demo_xiaoshou +-- ---------------------------- +DROP TABLE IF EXISTS `rep_demo_xiaoshou`; +CREATE TABLE `rep_demo_xiaoshou` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `hnum` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品编码', + `hname` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '货品名称', + `xinghao` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '单位', + `fahuocangku` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '数量', + `danwei` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '单价', + `num` int(11) NOT NULL COMMENT '返利', + `danjia` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '备注', + `zhekoulv` int(11) NOT NULL, + `xiaoshoujine` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `beizhu` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `s_id` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of rep_demo_xiaoshou +-- ---------------------------- +INSERT INTO `rep_demo_xiaoshou` VALUES (1, '5896', '冰箱', 'H2563', '上海', '件', 300, '1', 20, '1000', '晚上送', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (2, '4596', '空调', 'M79', '上海', '件', 800, '2', 10, '2560', '上门安装', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (3, '3695', '洗衣机', 'H90', '杭州', '件', 500, '3', 50, '259', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (4, '1258', '微波炉', 'J89', '广州', '件', 400, '4', 20, '259', '多个排水管', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (5, '1258', '烤箱', 'K56', '广州', '件', 800, '5', 50, '368', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (6, '5623', '电饼铛', 'H56', '上海', '件', 300, '6', 40, '456', '中午送', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (7, '5894', '早餐机', 'K67', '杭州', '件', 300, '7', 30, '147', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (8, '4578', '电饭锅', 'M45', '广州', '件', 800, '8', 50, '148', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (9, '2589', '豆浆机', 'H56', '上海', '件', 400, '9', 20, '258', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (10, '1456', '榨汁机', 'H45', '杭州', '件', 300, '10', 10, '456', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (11, '2578', '热水壶', 'U78', '广州', '件', 300, '11', 50, '258', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (12, '1369', '热水器', 'J78', '上海', '件', 800, '12', 80, '158', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (13, '5642', '吸尘器', 'R45', '上海', '件', 400, '13', 90, '125', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (14, '1356', '挂烫机', 'U67', '上海', '件', 400, '14', 50, '120', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (15, '2587', '破壁机', 'H56', '杭州', '件', 400, '15', 15, '258', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (16, '2578', '热水壶11', 'U78', '广州', '件', 300, '11', 50, '258', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (17, '2578', '热水壶22', 'U78', '广州', '件', 300, '11', 50, '258', '', '1'); +INSERT INTO `rep_demo_xiaoshou` VALUES (18, '2589', '电脑', 'XXP', '北京', '台', 56, '1220', 20, '1000', '', '1'); + + +-- ---------------------------- +-- Table structure for xianlu_wxtl +-- ---------------------------- +DROP TABLE IF EXISTS `xianlu_wxtl`; +CREATE TABLE `xianlu_wxtl` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', + `value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of xianlu_wxtl +-- ---------------------------- +INSERT INTO `xianlu_wxtl` VALUES ('1338685051105185794', '江苏', '500', '1'); +INSERT INTO `xianlu_wxtl` VALUES ('1338685110702051329', '广东', '300', '2'); +INSERT INTO `xianlu_wxtl` VALUES ('1338685208198647810', '浙江', '100', '1'); +INSERT INTO `xianlu_wxtl` VALUES ('1338685268005228546', '湖北', '1000', '1'); +INSERT INTO `xianlu_wxtl` VALUES ('1338685322132721666', '湖南', '888', '1'); + +-- ---------------------------- +-- Table structure for xianlu1_wxtl +-- ---------------------------- +DROP TABLE IF EXISTS `xianlu1_wxtl`; +CREATE TABLE `xianlu1_wxtl` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `from_name` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '从哪里', + `to_name` varchar(152) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '到哪里', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of xianlu1_wxtl +-- ---------------------------- +INSERT INTO `xianlu1_wxtl` VALUES ('1338686722493386754', '江苏', '广东'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338686814369615874', '广东', '湖北'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338686866899079169', '湖南', '江苏'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338686931281645569', '广东', '浙江'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338686989267898370', '浙江', '广东'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338687041906413570', '浙江', '湖北'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338687079105695746', '浙江', '湖南'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338687103751426050', '湖南', '浙江'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338694238950395905', '湖南', '湖北'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338694293467959297', '湖南', '广东'); +INSERT INTO `xianlu1_wxtl` VALUES ('1338694536653705218', '湖北', '江苏'); + +-- ---------------------------- +-- Table structure for yanshi_duozu +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_duozu`; +CREATE TABLE `yanshi_duozu` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `value` int(10) NULL DEFAULT NULL COMMENT '值', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_duozu +-- ---------------------------- +INSERT INTO `yanshi_duozu` VALUES ('1340965548325879812', '一月', 1000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548325879815', '一月', 1500, '小米'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548325879818', '二月', 2000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074114', '二月', 2500, '小米'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074117', '三月', 3000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074120', '三月', 3500, '小米'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074123', '四月', 4000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074126', '四月', 4500, '小米'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074129', '五月', 5000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074132', '五月', 5500, '小米'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074135', '六月', 6000, '三星'); +INSERT INTO `yanshi_duozu` VALUES ('1340965548330074138', '六月', 6500, '小米'); + +-- ---------------------------- +-- Table structure for yanshi_dxtj +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_dxtj`; +CREATE TABLE `yanshi_dxtj` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', + `gtime` datetime(0) NULL DEFAULT NULL COMMENT '雇佣日期', + `update_by` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '职务', + `jphone` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '家庭电话', + `birth` datetime(0) NULL DEFAULT NULL COMMENT '出生日期', + `hukou` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '户口所在地', + `laddress` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '联系地址', + `jperson` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '紧急联系人', + `sex` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT 'xingbie', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_dxtj +-- ---------------------------- +INSERT INTO `yanshi_dxtj` VALUES ('1338808084247613441', '张三', '2019-11-06 00:00:00', '1', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809169074982920', '张小哲', '2019-11-06 00:00:00', '2', '18034596971', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809448658898952', '闫妮', '2019-11-06 00:00:00', '2', '18034596972', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809620973490184', '陌生', '2019-11-06 00:00:00', '2', '18034596973', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809652606930952', '贺江', '2019-11-06 00:00:00', '2', '18034596974', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '2'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809685200867336', '村子明', '2019-11-06 00:00:00', '3', '18034596975', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '2'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809710203113481', '尚德', '2019-11-06 00:00:00', '4', '18034596977', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809749470187528', '郑恺', '2019-11-06 00:00:00', '4', '18034596978', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809774971555849', '未名园', '2019-11-06 00:00:00', '4', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809805199904777', '韩寒', '2019-11-06 00:00:00', '5', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809830017601544', '迪丽热拉', '2019-11-06 00:00:00', '6', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1338809864356368393', '张一山', '2019-11-06 00:00:00', '6', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157602480137', '张三', '2019-11-06 00:00:00', '1', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157602480146', '张大大', '2019-11-06 00:00:00', '2', '18034596971', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674439', '郭美美', '2019-11-06 00:00:00', '2', '18034596972', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674448', '莫愁', '2019-11-06 00:00:00', '2', '18034596973', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674457', '鲁与', '2019-11-06 00:00:00', '2', '18034596974', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '2'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674466', '高尚', '2019-11-06 00:00:00', '3', '18034596975', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '2'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674475', '尚北京', '2019-11-06 00:00:00', '4', '18034596977', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674484', '杨颖花', '2019-11-06 00:00:00', '4', '18034596978', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674493', '李丽', '2019-11-06 00:00:00', '4', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674502', '韩露露', '2019-11-06 00:00:00', '5', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674511', '李凯泽', '2019-11-06 00:00:00', '6', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); +INSERT INTO `yanshi_dxtj` VALUES ('1339160157606674520', '王明阳', '2019-11-06 00:00:00', '6', '18034596970', '1988-12-15 00:00:00', '北京市朝阳区奥运村街道亚运村小区', '18034596972', '王亮', '1'); + +-- ---------------------------- +-- Table structure for yanshi_jdcx +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_jdcx`; +CREATE TABLE `yanshi_jdcx` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `region` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货地区', + `city` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货城市', + `company` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发货公司', + `freight` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '运费', + `ftime` datetime(0) NULL DEFAULT NULL COMMENT '发货日期', + `customer` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户ID', + `address` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '客户地址', + `dtime` datetime(0) NULL DEFAULT NULL COMMENT '订购日期', + `ttime` datetime(0) NULL DEFAULT NULL COMMENT '到货日期', + `code1` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮政编码', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_jdcx +-- ---------------------------- +INSERT INTO `yanshi_jdcx` VALUES ('1338749873113010177', '华南', '上海', '上海海鲜批发有限公司', '50', '2020-12-14 00:00:00', '001', '北京市朝阳区奥林佳泰大厦', '2020-12-14 00:00:00', '2020-12-15 00:00:00', '050000'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945546', '华南', '上海', '上海海鲜批发有限公司', '50', '2020-11-11 00:00:00', '001', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-15 00:00:00', '050000'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945556', '华南', '杭州', '杭州嘻嘻服装', '0', '2020-11-11 00:00:00', '002', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-16 00:00:00', '050001'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945566', '华北', '北京', '北京极品公司', '52', '2020-11-11 00:00:00', '003', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-17 00:00:00', '050002'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945576', '华北', '河北', '河北包包', '53', '2020-11-11 00:00:00', '004', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-18 00:00:00', '050003'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945586', '华北', '山西', '山西刀削面有限公司', '54', '2020-11-11 00:00:00', '005', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-19 00:00:00', '050004'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945596', '华北', '内蒙古', '内蒙古牛肉有限公司', '55', '2020-11-11 00:00:00', '006', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-20 00:00:00', '050005'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945606', '华北', '河北', '河北牛奶加工厂', '53', '2020-11-11 00:00:00', '007', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-18 00:00:00', '050003'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945616', '华北', '山西', '陕西米粉有限公司', '54', '2020-11-11 00:00:00', '008', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-19 00:00:00', '050004'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945626', '华北', '内蒙古', '内蒙古牛奶有限公司', '55', '2020-11-11 00:00:00', '009', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-20 00:00:00', '050005'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945636', '华中', '湖北', '湖北老干妈有限公司', '56', '2020-11-11 00:00:00', '010', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-21 00:00:00', '050006'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945646', '华中', '湖南', '湖南面面有限公司', '57', '2020-11-11 00:00:00', '011', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-22 00:00:00', '050007'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202170945656', '华中', '河南', '河南面面有限公司', '58', '2020-11-11 00:00:00', '012', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-23 00:00:00', '050008'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139843', '西北', '宁夏', '宁夏枸杞有限公司', '59', '2020-11-11 00:00:00', '013', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-24 00:00:00', '050009'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139853', '西北', '新疆', '新疆奶酪片有限公司', '60', '2020-11-11 00:00:00', '014', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-25 00:00:00', '050010'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139863', '西北', '青海', '青海云石有限公司', '61', '2020-11-11 00:00:00', '015', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-26 00:00:00', '050011'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139873', '西北', '陕西', '陕西牛肉有限公司', '62', '2020-11-11 00:00:00', '016', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-27 00:00:00', '050012'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139883', '西北', '甘肃', '甘肃素衣有限公司', '63', '2020-11-11 00:00:00', '017', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-28 00:00:00', '050013'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139893', '西北', '陕西', '陕西刀具有限公司', '62', '2020-11-11 00:00:00', '018', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-27 00:00:00', '050012'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139903', '西北', '甘肃', '甘肃水果有限公司', '63', '2020-11-11 00:00:00', '019', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-28 00:00:00', '050013'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139913', '西北', '甘肃', '甘肃水果有限公司', '63', '2020-11-11 00:00:00', '020', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-28 00:00:00', '050013'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139923', '东北', '辽宁', '辽宁饮用水有限公司', '64', '2020-11-11 00:00:00', '021', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-29 00:00:00', '050014'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139933', '东北', '吉林', '吉林饮用水有限公司', '65', '2020-11-11 00:00:00', '022', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-30 00:00:00', '050015'); +INSERT INTO `yanshi_jdcx` VALUES ('1338756202175139943', '东北', '黑龙江', '黑龙江饮用水有限公司', '66', '2020-11-11 00:00:00', '023', '北京市朝阳区奥林佳泰大厦', '2020-11-11 00:00:00', '2020-12-31 00:00:00', '050016'); + +-- ---------------------------- +-- Table structure for yanshi_qipaosandian +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_qipaosandian`; +CREATE TABLE `yanshi_qipaosandian` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值', + `type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '类型', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_qipaosandian +-- ---------------------------- +INSERT INTO `yanshi_qipaosandian` VALUES ('1348516823330459650', NULL, NULL, NULL); + +-- ---------------------------- +-- Table structure for yanshi_sandian +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_sandian`; +CREATE TABLE `yanshi_sandian` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_sandian +-- ---------------------------- +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599363', '100', '80.4'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599365', '80', '69.5'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599367', '130', '75.8'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599369', '90', '88.1'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599371', '110', '83.3'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599373', '140', '99.6'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599375', '60', '72.4'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599377', '40', '42.6'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599379', '120', '108.4'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599381', '70', '48.2'); +INSERT INTO `yanshi_sandian` VALUES ('1340970999507599383', '50', '56.8'); + +-- ---------------------------- +-- Table structure for yanshi_tima +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_tima`; +CREATE TABLE `yanshi_tima` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键', + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名', + `sex` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '性别', + `nation` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '汉', + `birth` datetime(0) NULL DEFAULT NULL COMMENT '出生日期', + `address` varchar(125) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '地址', + `card` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '公民身份证', + `date` datetime(0) NULL DEFAULT NULL COMMENT '有效日期', + `orga` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '签发机关', + `reason` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申领原因', + `time` datetime(0) NULL DEFAULT NULL COMMENT '受理时间', + `num` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '受理号', + `undertaker` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '承办人', + `leader` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '受理单位领导', + `autograph` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申请(监护)人签名', + `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申请(监护)人联系电话', + `qianming` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '领证人签名', + `ltime` datetime(0) NULL DEFAULT NULL COMMENT '领证时间', + `os` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否通过邮政特快专递方式领取二代', + `taddress` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '投递地址', + `addressee` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '收件人', + `code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '邮政编码', + `remarks` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_tima +-- ---------------------------- +INSERT INTO `yanshi_tima` VALUES ('1', '张三丰', '1', '汉', '2020-12-16 19:06:30', '北京市朝阳区奥林佳泰大厦', '130631199508151236', '2020-12-15 00:00:00', '北京市朝阳区亚运村办事处', '签证', '2020-12-15 00:00:00', '56963', '张三', '李四', '李四', '18034596985', '张三', '2020-12-15 00:00:00', '是', '北京市朝阳区', '张三', '0500000', '113'); + +-- ---------------------------- +-- Table structure for yanshi_wxtl +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_wxtl`; +CREATE TABLE `yanshi_wxtl` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_wxtl +-- ---------------------------- +INSERT INTO `yanshi_wxtl` VALUES ('1338669173307346946', '宾馆', '4.5'); +INSERT INTO `yanshi_wxtl` VALUES ('1338669288306774017', '景区', '4.4'); +INSERT INTO `yanshi_wxtl` VALUES ('1338669340353892353', '餐饮', '3.2'); +INSERT INTO `yanshi_wxtl` VALUES ('1338669402618335233', '商城', '2.3'); +INSERT INTO `yanshi_wxtl` VALUES ('1338669463217639426', '商业街', '2'); +INSERT INTO `yanshi_wxtl` VALUES ('1338669516091035650', '其他', '1.8'); + +-- ---------------------------- +-- Table structure for yanshi_yipan +-- ---------------------------- +DROP TABLE IF EXISTS `yanshi_yipan`; +CREATE TABLE `yanshi_yipan` ( + `id` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '名称', + `value` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '值', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yanshi_yipan +-- ---------------------------- +INSERT INTO `yanshi_yipan` VALUES ('1340968006737477634', '出勤率', '60'); +INSERT INTO `yanshi_yipan` VALUES ('1340968084172718082', '迟到率', '5'); +INSERT INTO `yanshi_yipan` VALUES ('1340968147338936322', '满勤率', '10'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/db/增量SQL/版本升级说明.txt b/db/增量SQL/版本升级说明.txt new file mode 100644 index 00000000..771e46b4 --- /dev/null +++ b/db/增量SQL/版本升级说明.txt @@ -0,0 +1,10 @@ +版本升级方法? + + JeroBoot属于平台级产品,每次升级改动内容较多,目前做不到平滑升级。 + + 这里给用户的升级建议是这样的: + 1.代码升级 => 本地版本通过svn或者git做好主干,在分支上做业务开发,jeecg每次版本发布,可以手工覆盖主干的代码,对比代码进行提交; + 2.数据库升级 => 针对数据库我们每次发布会提供增量升级SQL,可以通过增量SQL实现数据库的升级。 + 3.兼容问题 => 每次版本发布会针对不兼容地方标注说明,需要手工修改不兼容的代码。 + + 注意: 升级sql目前只提供mysql版本,执行完脚步后,新菜单需要手工进行角色授权,刷新首页才会出现。 \ No newline at end of file diff --git a/docker-compose-server.yml b/docker-compose-server.yml new file mode 100644 index 00000000..2a179e29 --- /dev/null +++ b/docker-compose-server.yml @@ -0,0 +1,51 @@ +#### 镜像上传 +# 仓库私服: 81.70.17.111:5000 +# 第一步:上传镜像到docker仓库 +#docker tag jero-boot-mysql 81.70.17.111:5000/jero-boot-mysql:1.1 +#docker tag jero-boot-system 81.70.17.111:5000/jero-boot-system:1.0 +#docker tag nginxhtml:jeroboot 81.70.17.111:5000/nginxhtml:1.2 + +#docker push 81.70.17.111:5000/jero-boot-mysql:1.1 +#docker push 81.70.17.111:5000/jero-boot-system:1.0 +#docker push 81.70.17.111:5000/nginxhtml:1.2 + +# 第二步:将此yml文件上传服务器,执行启动命令 docker-compose -f ./docker-compose-server.yml up +version: '2' +services: + jero-boot-mysql: + image: 81.70.17.111:5000/jero-boot-mysql:1.0 + environment: + MYSQL_ROOT_PASSWORD: root + restart: always + container_name: jero-boot-mysql + command: + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + --max_allowed_packet=128M + ports: + - 3306:3306 + + jero-boot-redis: + image: redis:5.0 + ports: + - 6379:6379 + restart: always + container_name: jero-boot-redis + + jero-boot-system: + image: 81.70.17.111:5000/jero-boot-system:1.0 + restart: always + container_name: jero-boot-system + volumes: + - /data/config:/jero-boot/config + ports: + - 8080:8080 + + jero-boot-nginx: + image: 81.70.17.111:5000/nginxhtml + restart: always + container_name: jero-boot-nginx + ports: + - 80:80 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..0c1dfbee --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,35 @@ +version: '2' +services: + jero-boot-mysql: + build: + context: ./db + environment: + MYSQL_ROOT_PASSWORD: root + restart: always + container_name: jero-boot-mysql + image: jero-boot-mysql + command: + --character-set-server=utf8mb4 + --collation-server=utf8mb4_general_ci + --explicit_defaults_for_timestamp=true + --lower_case_table_names=1 + --max_allowed_packet=128M + ports: + - 3306:3306 + + jero-boot-redis: + image: redis:5.0 + ports: + - 6379:6379 + restart: always + container_name: jero-boot-redis + + + jero-boot-system: + build: + context: ./jero-boot-module-system + restart: always + container_name: jero-boot-system + image: jero-boot-system + ports: + - 8080:8080 \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-api/pom.xml b/jero-boot-base/jero-boot-base-api/pom.xml new file mode 100644 index 00000000..938cf1e9 --- /dev/null +++ b/jero-boot-base/jero-boot-base-api/pom.xml @@ -0,0 +1,20 @@ + + + + jero-boot-base + com.jero.boot + 2.4.2 + + 4.0.0 + + jero-boot-base-api + + + + com.jero.boot + jero-boot-base-core + + + \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java b/jero-boot-base/jero-boot-base-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java new file mode 100644 index 00000000..cd6aa1ee --- /dev/null +++ b/jero-boot-base/jero-boot-base-api/src/main/java/com/jero/common/system/api/ISysBaseAPI.java @@ -0,0 +1,302 @@ +package com.jero.common.system.api; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.CommonAPI; +import com.jero.common.api.dto.OnlineAuthDTO; +import com.jero.common.api.dto.message.*; +import com.jero.common.system.vo.*; + +import java.util.List; +import java.util.Set; + +/** + * @Description 底层共通业务API,提供其他独立模块调用 + * @Author scott + * @Date 2019-4-20 + * @Version V1.0 + */ +public interface ISysBaseAPI extends CommonAPI { + + + /** + * 1发送系统消息 + * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息 + */ + void sendSysAnnouncement(MessageDTO message); + + /** + * 2发送消息 附带业务参数 + * @param message 使用构造器赋值参数 + */ + void sendBusAnnouncement(BusMessageDTO message); + + /** + * 3通过模板发送消息 + * @param message 使用构造器赋值参数 + */ + void sendTemplateAnnouncement(TemplateMessageDTO message); + + /** + * 4通过模板发送消息 附带业务参数 + * @param message 使用构造器赋值参数 + */ + void sendBusTemplateAnnouncement(BusTemplateMessageDTO message); + + /** + * 5通过消息中心模板,生成推送内容 + * @param templateDTO 使用构造器赋值参数 + * @return + */ + String parseTemplateByCode(TemplateDTO templateDTO); + + /** + * 6根据用户id查询用户信息 + * @param id + * @return + */ + LoginUser getUserById(String id); + + /** + * 7通过用户账号查询角色集合 + * @param username + * @return + */ + List getRolesByUsername(String username); + + /** + * 8通过用户账号查询部门集合 + * @param username + * @return 部门 id + */ + List getDepartIdsByUsername(String username); + + /** + * 9通过用户账号查询部门 name + * @param username + * @return 部门 name + */ + List getDepartNamesByUsername(String username); + + + + /** 11查询所有的父级字典,按照create_time排序 */ + public List queryAllDict(); + + /** + * 12查询所有分类字典 + * @return + */ + public List queryAllDSysCategory(); + + + /** + * 14查询所有部门 作为字典信息 id -->value,departName -->text + * @return + */ + public List queryAllDepartBackDictModel(); + + /** + * 15根据业务类型及业务id修改消息已读 + * @param busType + * @param busId + */ + public void updateSysAnnounReadFlag(String busType, String busId); + + /** + * 16查询表字典 支持过滤数据 + * @param table + * @param text + * @param code + * @param filterSql + * @return + */ + public List queryFilterTableDictInfo(String table, String text, String code, String filterSql); + + /** + * 17查询指定table的 text code 获取字典,包含text和value + * @param table + * @param text + * @param code + * @param keyArray + * @return + */ + @Deprecated + public List queryTableDictByKeys(String table, String text, String code, String[] keyArray); + + /** + * 18查询所有用户 返回ComboModel + * @return + */ + public List queryAllUserBackCombo(); + + /** + * 19分页查询用户 返回JSONObject + * @return + */ + public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize); + + /** + * 20获取所有角色 + * @return + */ + public List queryAllRole(); + + /** + * 21获取所有角色 带参 + * roleIds 默认选中角色 + * @return + */ + public List queryAllRole(String[] roleIds ); + + /** + * 22通过用户账号查询角色Id集合 + * @param username + * @return + */ + public List getRoleIdsByUsername(String username); + + /** + * 23通过部门编号查询部门id + * @param orgCode + * @return + */ + public String getDepartIdsByOrgCode(String orgCode); + + /** + * 24查询所有部门 + * @return + */ + public List getAllSysDepart(); + + /** + * 25查找父级部门 + * @param departId + * @return + */ + DictModel getParentDepartId(String departId); + + /** + * 26根据部门Id获取部门负责人 + * @param deptId + * @return + */ + public List getDeptHeadByDepId(String deptId); + + /** + * 27给指定用户发消息 + * @param userIds + * @param cmd + */ + public void sendWebSocketMsg(String[] userIds, String cmd); + + /** + * 28根据id获取所有参与用户 + * userIds + * @return + */ + public List queryAllUserByIds(String[] userIds); + + /** + * 29将会议签到信息推动到预览 + * userIds + * @return + * @param userId + */ + void meetingSignWebsocket(String userId); + + /** + * 30根据name获取所有参与用户 + * userNames + * @return + */ + List queryUserByNames(String[] userNames); + + + /** + * 31获取用户的角色集合 + * @param username + * @return + */ + Set getUserRoleSet(String username); + + /** + * 32获取用户的权限集合 + * @param username + * @return + */ + Set getUserPermissionSet(String username); + + /** + * 33判断是否有online访问的权限 + * @param onlineAuthDTO + * @return + */ + boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO); + + /** + * 34通过部门id获取部门全部信息 + */ + SysDepartModel selectAllById(String id); + + /** + * 35根据用户id查询用户所属公司下所有用户ids + * @param userId + * @return + */ + List queryDeptUsersByUserId(String userId); + + /** + * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * @param usernames + * @return + */ + List queryUsersByUsernames(String usernames); + + /** + * 37根据多个用户ID(逗号分隔),查询返回多个用户信息 + * @param ids + * @return + */ + List queryUsersByIds(String ids); + + /** + * 38根据多个部门编码(逗号分隔),查询返回多个部门信息 + * @param orgCodes + * @return + */ + List queryDepartsByOrgcodes(String orgCodes); + + /** + * 39根据多个部门id(逗号分隔),查询返回多个部门信息 + * @param ids + * @return + */ + List queryDepartsByIds(String ids); + + /** + * 40发送邮件消息 + * @param email + * @param title + * @param content + */ + void sendEmailMsg(String email,String title,String content); + + /** + * 41根据部门id查询部门所有的父级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:50 + * @param departId 部门id + * @return JSONObject + */ + List listParentDepartsByDepId(String departId); + + /** + * 42根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:54 + * @param departId 部门id + * @return JSONObject + */ + List listSonDepartsByDepId(String departId); + +} diff --git a/jero-boot-base/jero-boot-base-core/pom.xml b/jero-boot-base/jero-boot-base-core/pom.xml new file mode 100644 index 00000000..65a97511 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/pom.xml @@ -0,0 +1,244 @@ + + + com.jero.boot + jero-boot-base + 2.4.2 + + 4.0.0 + + jero-boot-base-core + + + + aliyun + aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + false + + + + jeecg + jeecg Repository + http://maven.jeecg.org/nexus/content/repositories/jeecg + + false + + + + + + + + + com.jero.boot + jero-boot-base-tools + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-websocket + + + org.springframework.boot + spring-boot-starter-mail + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-validation + + + + + commons-io + commons-io + ${commons.version} + + + commons-lang + commons-lang + ${commons.version} + + + + org.springframework.boot + spring-boot-starter-freemarker + + + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.version} + + + + + com.alibaba + druid-spring-boot-starter + ${druid.version} + + + + + com.baomidou + dynamic-datasource-spring-boot-starter + ${dynamic-datasource-spring-boot-starter.version} + + + + + mysql + mysql-connector-java + ${mysql-connector-java.version} + runtime + + + + com.microsoft.sqlserver + sqljdbc4 + ${sqljdbc4.version} + runtime + + + + com.oracle + ojdbc6 + ${ojdbc6.version} + runtime + + + + org.postgresql + postgresql + ${postgresql.version} + runtime + + + + + org.springframework.boot + spring-boot-starter-quartz + + + + + com.auth0 + java-jwt + ${java-jwt.version} + + + + + org.apache.shiro + shiro-spring-boot-starter + ${shiro.version} + + + org.hibernate + hibernate-core + + + commons-collections + commons-collections + + + + + + org.crazycake + shiro-redis + ${shiro-redis.version} + + + org.apache.shiro + shiro-core + + + + + + + com.github.xiaoymin + knife4j-spring-boot-starter + ${knife4j-spring-boot-starter.version} + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.apache.commons + commons-pool2 + + + + + org.jeecgframework + autopoi-web + ${autopoi-web.version} + + + commons-codec + commons-codec + + + + + + + io.minio + minio + + + com.google.guava + guava + ${guava.version} + + + + + com.aliyun + aliyun-java-sdk-dysmsapi + ${aliyun-java-sdk-dysmsapi.version} + + + + com.aliyun.oss + aliyun-sdk-oss + ${aliyun.oss.version} + + + + com.xkcoding.justauth + justauth-spring-boot-starter + + + com.squareup.okhttp3 + okhttp + + + p6spy + p6spy + + + + \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/CommonAPI.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/CommonAPI.java new file mode 100644 index 00000000..e76148d0 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/CommonAPI.java @@ -0,0 +1,97 @@ +package com.jero.common.api; + +import com.jero.common.system.vo.*; + +import java.util.List; +import java.util.Set; + +public interface CommonAPI { + + /** + * 1查询用户角色信息 + * @param username + * @return + */ + Set queryUserRoles(String username); + + + /** + * 2查询用户权限信息 + * @param username + * @return + */ + Set queryUserAuths(String username); + + /** + * 3根据 id 查询数据库中存储的 DynamicDataSourceModel + * + * @param dbSourceId + * @return + */ + DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId); + + /** + * 4根据 code 查询数据库中存储的 DynamicDataSourceModel + * + * @param dbSourceCode + * @return + */ + DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode); + + /** + * 5根据用户账号查询用户信息 + * @param username + * @return + */ + public LoginUser getUserByName(String username); + + + /** + * 6字典表的 翻译 + * @param table + * @param text + * @param code + * @param key + * @return + */ + String translateDictFromTable(String table, String text, String code, String key); + + /** + * 7普通字典的翻译 + * @param code + * @param key + * @return + */ + String translateDict(String code, String key); + + /** + * 8查询数据权限 + * @return + */ + List queryPermissionDataRule(String component, String requestPath, String username); + + + /** + * 9查询用户信息 + * @param username + * @return + */ + SysUserCacheInfo getCacheUser(String username); + + /** + * 10获取数据字典 + * @param code + * @return + */ + public List queryDictItemsByCode(String code); + + /** + * 13获取表数据字典 + * @param table + * @param text + * @param code + * @return + */ + List queryTableDictItemsByCode(String table, String text, String code); + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/IWpsBaseAPI.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/IWpsBaseAPI.java new file mode 100644 index 00000000..c81a9412 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/IWpsBaseAPI.java @@ -0,0 +1,24 @@ +package com.jero.common.api; + +import com.jero.common.api.vo.OaWpsModel; + +/** + * @Description: WPS通用接口 + * @Author: wangshuai + * @Date:20200709 + * @Version:V1.0 + */ +public interface IWpsBaseAPI { + + /*根据模板id获取模板信息*/ + OaWpsModel getById(String id); + + /*根据文件路径下载文件*/ + void downloadOosFiles(String objectName, String basePath,String fileName); + + /*WPS 设置数据存储,用于逻辑判断*/ + void context(String type,String text); + + /*删除WPS模板相关信息*/ + void deleteById(String id); +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java new file mode 100644 index 00000000..470020f6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileDownDTO.java @@ -0,0 +1,30 @@ +package com.jero.common.api.dto; + +import lombok.Data; + +import javax.servlet.http.HttpServletResponse; +import java.io.Serializable; + +/** + * 文件下载 + * cloud api 用到的接口传输对象 + */ +@Data +public class FileDownDTO implements Serializable { + + private static final long serialVersionUID = 6749126258686446019L; + + private String filePath; + private String uploadpath; + private String uploadType; + private HttpServletResponse response; + + public FileDownDTO(){} + + public FileDownDTO(String filePath, String uploadpath, String uploadType,HttpServletResponse response){ + this.filePath = filePath; + this.uploadpath = uploadpath; + this.uploadType = uploadType; + this.response = response; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java new file mode 100644 index 00000000..b5afc12a --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/FileUploadDTO.java @@ -0,0 +1,55 @@ +package com.jero.common.api.dto; + +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import java.io.Serializable; + +/** + * 文件上传 + * cloud api 用到的接口传输对象 + */ +@Data +public class FileUploadDTO implements Serializable { + + private static final long serialVersionUID = -4111953058578954386L; + + private MultipartFile file; + + private String bizPath; + + private String uploadType; + + private String customBucket; + + public FileUploadDTO(){ + + } + + /** + * 简单上传 构造器1 + * @param file + * @param bizPath + * @param uploadType + */ + public FileUploadDTO(MultipartFile file,String bizPath,String uploadType){ + this.file = file; + this.bizPath = bizPath; + this.uploadType = uploadType; + } + + /** + * 申明桶 文件上传 构造器2 + * @param file + * @param bizPath + * @param uploadType + * @param customBucket + */ + public FileUploadDTO(MultipartFile file,String bizPath,String uploadType,String customBucket){ + this.file = file; + this.bizPath = bizPath; + this.uploadType = uploadType; + this.customBucket = customBucket; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java new file mode 100644 index 00000000..b3250617 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/LogDTO.java @@ -0,0 +1,68 @@ +package com.jero.common.api.dto; +import lombok.Data; +import com.jero.common.system.vo.LoginUser; +import java.io.Serializable; +import java.util.Date; + +/** + * 日志对象 + * cloud api 用到的接口传输对象 + */ +@Data +public class LogDTO implements Serializable { + + private static final long serialVersionUID = 8482720462943906924L; + + /**内容*/ + private String logContent; + + /**日志类型(0:操作日志;1:登录日志;2:定时任务) */ + private Integer logType; + + /**操作类型(1:添加;2:修改;3:删除;) */ + private Integer operateType; + + /**登录用户 */ + private LoginUser loginUser; + + private String id; + private String createBy; + private Date createTime; + private Long costTime; + private String ip; + + /**请求参数 */ + private String requestParam; + + /**请求类型*/ + private String requestType; + + /**请求路径*/ + private String requestUrl; + + /**请求方法 */ + private String method; + + /**操作人用户名称*/ + private String username; + + /**操作人用户账户*/ + private String userid; + + public LogDTO(){ + + } + + public LogDTO(String logContent, Integer logType, Integer operatetype){ + this.logContent = logContent; + this.logType = logType; + this.operateType = operatetype; + } + + public LogDTO(String logContent, Integer logType, Integer operatetype, LoginUser loginUser){ + this.logContent = logContent; + this.logType = logType; + this.operateType = operatetype; + this.loginUser = loginUser; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/OnlineAuthDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/OnlineAuthDTO.java new file mode 100644 index 00000000..a5fa8f19 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/OnlineAuthDTO.java @@ -0,0 +1,41 @@ +package com.jero.common.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * online 拦截器权限判断 + * cloud api 用到的接口传输对象 + */ +@Data +public class OnlineAuthDTO implements Serializable { + private static final long serialVersionUID = 1771827545416418203L; + + + /** + * 用户名 + */ + private String username; + + /** + * 可能的请求地址 + */ + private List possibleUrl; + + /** + * online开发的菜单地址 + */ + private String onlineFormUrl; + + public OnlineAuthDTO(){ + + } + + public OnlineAuthDTO(String username, List possibleUrl, String onlineFormUrl){ + this.username = username; + this.possibleUrl = possibleUrl; + this.onlineFormUrl = onlineFormUrl; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusMessageDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusMessageDTO.java new file mode 100644 index 00000000..1a77d2ba --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusMessageDTO.java @@ -0,0 +1,43 @@ +package com.jero.common.api.dto.message; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 带业务参数的消息 + */ +@Data +public class BusMessageDTO extends MessageDTO implements Serializable { + + private static final long serialVersionUID = 9104793287983367669L; + /** + * 业务类型 + */ + private String busType; + + /** + * 业务id + */ + private String busId; + + public BusMessageDTO(){ + + } + + /** + * 构造 带业务参数的消息 + * @param fromUser + * @param toUser + * @param title + * @param msgContent + * @param msgCategory + * @param busType + * @param busId + */ + public BusMessageDTO(String fromUser, String toUser, String title, String msgContent, String msgCategory, String busType, String busId){ + super(fromUser, toUser, title, msgContent, msgCategory); + this.busId = busId; + this.busType = busType; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusTemplateMessageDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusTemplateMessageDTO.java new file mode 100644 index 00000000..90114376 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/BusTemplateMessageDTO.java @@ -0,0 +1,45 @@ +package com.jero.common.api.dto.message; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Map; + +/** + * 带业务参数的模板消息 + */ +@Data +public class BusTemplateMessageDTO extends TemplateMessageDTO implements Serializable { + + private static final long serialVersionUID = -4277810906346929459L; + + /** + * 业务类型 + */ + private String busType; + + /** + * 业务id + */ + private String busId; + + public BusTemplateMessageDTO(){ + + } + + /** + * 构造 带业务参数的模板消息 + * @param fromUser + * @param toUser + * @param title + * @param templateParam + * @param templateCode + * @param busType + * @param busId + */ + public BusTemplateMessageDTO(String fromUser, String toUser, String title, Map templateParam, String templateCode, String busType, String busId){ + super(fromUser, toUser, title, templateParam, templateCode); + this.busId = busId; + this.busType = busType; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/MessageDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/MessageDTO.java new file mode 100644 index 00000000..5b6bd389 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/MessageDTO.java @@ -0,0 +1,69 @@ +package com.jero.common.api.dto.message; + +import lombok.Data; +import com.jero.common.constant.CommonConstant; + +import java.io.Serializable; + +/** + * 普通消息 + */ +@Data +public class MessageDTO implements Serializable { + + private static final long serialVersionUID = -5690444483968058442L; + + /** + * 发送人(用户登录账户) + */ + protected String fromUser; + + /** + * 发送给(用户登录账户) + */ + protected String toUser; + + /** + * 消息主题 + */ + protected String title; + + /** + * 消息内容 + */ + protected String content; + + /** + * 消息类型 1:消息 2:系统消息 + */ + protected String category; + + + public MessageDTO(){ + + } + + /** + * 构造器1 系统消息 + */ + public MessageDTO(String fromUser,String toUser,String title, String content){ + this.fromUser = fromUser; + this.toUser = toUser; + this.title = title; + this.content = content; + //默认 都是2系统消息 + this.category = CommonConstant.MSG_CATEGORY_2; + } + + /** + * 构造器2 支持设置category 1:消息 2:系统消息 + */ + public MessageDTO(String fromUser,String toUser,String title, String content, String category){ + this.fromUser = fromUser; + this.toUser = toUser; + this.title = title; + this.content = content; + this.category = category; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java new file mode 100644 index 00000000..f2999de3 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateDTO.java @@ -0,0 +1,37 @@ +package com.jero.common.api.dto.message; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Map; + +/** + * 消息模板dto + */ +@Data +public class TemplateDTO implements Serializable { + + private static final long serialVersionUID = 5848247133907528650L; + + /** + * 模板编码 + */ + protected String templateCode; + + /** + * 模板参数 + */ + protected Map templateParam; + + /** + * 构造器 通过设置模板参数和模板编码 作为参数获取消息内容 + */ + public TemplateDTO(String templateCode, Map templateParam){ + this.templateCode = templateCode; + this.templateParam = templateParam; + } + + public TemplateDTO(){ + + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateMessageDTO.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateMessageDTO.java new file mode 100644 index 00000000..e0944a0b --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/dto/message/TemplateMessageDTO.java @@ -0,0 +1,48 @@ +package com.jero.common.api.dto.message; + +import lombok.Data; +import java.io.Serializable; +import java.util.Map; + +/** + * 模板消息 + */ +@Data +public class TemplateMessageDTO extends TemplateDTO implements Serializable { + + private static final long serialVersionUID = 411137565170647585L; + + + /** + * 发送人(用户登录账户) + */ + protected String fromUser; + + /** + * 发送给(用户登录账户) + */ + protected String toUser; + + /** + * 消息主题 + */ + protected String title; + + + public TemplateMessageDTO(){ + + } + + /** + * 构造器1 发模板消息用 + */ + public TemplateMessageDTO(String fromUser, String toUser,String title, Map templateParam, String templateCode){ + super(templateCode, templateParam); + this.fromUser = fromUser; + this.toUser = toUser; + this.title = title; + } + + + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/OaWpsModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/OaWpsModel.java new file mode 100644 index 00000000..f970c269 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/OaWpsModel.java @@ -0,0 +1,107 @@ +package com.jero.common.api.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: 文档 + * @Author: jero-boot + * @Date: 2020-06-09 + * @Version: V1.0 + */ +@Data +@TableName("oa_wps_file") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "oa_wps_file对象", description = "文档") +public class OaWpsModel implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private String id; + /** + * name + */ + @Excel(name = "name", width = 15) + @ApiModelProperty(value = "name") + private String name; + /** + * version + */ + @Excel(name = "version", width = 15) + @ApiModelProperty(value = "version") + private Integer version; + /** + * size + */ + @Excel(name = "size", width = 15) + @ApiModelProperty(value = "size") + private Integer size; + /** + * downloadUrl + */ + @Excel(name = "downloadUrl", width = 15) + @ApiModelProperty(value = "downloadUrl") + private String downloadUrl; + /** + * deleted + */ + @Excel(name = "deleted", width = 15) + @ApiModelProperty(value = "deleted") + private String deleted; + /** + * canDelete + */ + @Excel(name = "canDelete", width = 15) + @ApiModelProperty(value = "canDelete") + private String canDelete; + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private String createBy; + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "创建时间") + private Date createTime; + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private String updateBy; + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + /** + * 组织机构编码 + */ + @ApiModelProperty(value = "组织机构编码") + private String sysOrgCode; + + @TableField(exist = false) + private String userId; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java new file mode 100644 index 00000000..2bb004d0 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/api/vo/Result.java @@ -0,0 +1,143 @@ +package com.jero.common.api.vo; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import com.jero.common.constant.CommonConstant; +import lombok.Data; + +/** + * 接口返回数据格式 + * @author scott + * @date 2019年1月19日 + */ +@Data +@ApiModel(value="接口返回对象", description="接口返回对象") +public class Result implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 成功标志 + */ + @ApiModelProperty(value = "成功标志") + private boolean success = true; + + /** + * 返回处理消息 + */ + @ApiModelProperty(value = "返回处理消息") + private String message = "操作成功!"; + + /** + * 返回代码 + */ + @ApiModelProperty(value = "返回代码") + private Integer code = 0; + + /** + * 返回数据对象 data + */ + @ApiModelProperty(value = "返回数据对象") + private T result; + + /** + * 时间戳 + */ + @ApiModelProperty(value = "时间戳") + private long timestamp = System.currentTimeMillis(); + + public Result() { + + } + + public Result success(String message) { + this.message = message; + this.code = CommonConstant.SC_OK_200; + this.success = true; + return this; + } + + @Deprecated + public static Result ok() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage("成功"); + return r; + } + + @Deprecated + public static Result ok(String msg) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage(msg); + return r; + } + + @Deprecated + public static Result ok(Object data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setResult(data); + return r; + } + + public static Result OK() { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage("成功"); + return r; + } + + public static Result OK(T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setResult(data); + return r; + } + + public static Result OK(String msg, T data) { + Result r = new Result(); + r.setSuccess(true); + r.setCode(CommonConstant.SC_OK_200); + r.setMessage(msg); + r.setResult(data); + return r; + } + + public static Result error(String msg) { + return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg); + } + + public static Result error(int code, String msg) { + Result r = new Result(); + r.setCode(code); + r.setMessage(msg); + r.setSuccess(false); + return r; + } + + public Result error500(String message) { + this.message = message; + this.code = CommonConstant.SC_INTERNAL_SERVER_ERROR_500; + this.success = false; + return this; + } + /** + * 无权限访问返回结果 + */ + public static Result noauth(String msg) { + return error(CommonConstant.SC_JERO_NO_AUTHZ, msg); + } + + @JsonIgnore + private String onlTable; + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java new file mode 100644 index 00000000..866e6227 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/AutoLogAspect.java @@ -0,0 +1,268 @@ +package com.jero.common.aspect; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.PropertyFilter; +import org.apache.shiro.SecurityUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import com.jero.common.api.dto.LogDTO; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.ModuleType; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.IPUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import org.springframework.core.LocalVariableTableParameterNameDiscoverer; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; +import javax.annotation.Resource; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.Date; + + +/** + * 系统日志,切面处理类 + * + * @Author scott + * @Date 2018年1月14日 + */ +@Aspect +@Component +public class AutoLogAspect { + + @Resource + private BaseCommonService baseCommonService; + + @Pointcut("@annotation(com.jero.common.aspect.annotation.AutoLog)") + public void logPointCut() { + + } + + @Around("logPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + long beginTime = System.currentTimeMillis(); + //执行方法 + Object result = point.proceed(); + //执行时长(毫秒) + long time = System.currentTimeMillis() - beginTime; + + //保存日志 + saveSysLog(point, time, result); + + return result; + } + + private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + LogDTO dto = new LogDTO(); + AutoLog syslog = method.getAnnotation(AutoLog.class); + if(syslog != null){ + //update-begin-author:taoyan date: + String content = syslog.value(); + if(syslog.module()== ModuleType.ONLINE){ + content = getOnlineLogContent(obj, content); + } + //注解上的描述,操作日志内容 + dto.setLogType(syslog.logType()); + dto.setLogContent(content); + } + + //请求的方法名 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = signature.getName(); + dto.setMethod(className + "." + methodName + "()"); + + + //设置操作类型 + if (dto.getLogType() == CommonConstant.LOG_TYPE_2) { + dto.setOperateType(getOperateType(methodName, syslog.operateType())); + } + + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //请求的参数 + dto.setRequestParam(getReqestParams(request,joinPoint)); + //设置IP地址 + dto.setIp(IPUtils.getIpAddr(request)); + //获取登录用户信息 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if(sysUser!=null){ + dto.setUserid(sysUser.getUsername()); + dto.setUsername(sysUser.getRealname()); + + } + //耗时 + dto.setCostTime(time); + dto.setCreateTime(new Date()); + //保存系统日志 + baseCommonService.addLog(dto); + } + + + /** + * 获取操作类型 + */ + private int getOperateType(String methodName,int operateType) { + if (operateType > 0) { + return operateType; + } + if (methodName.startsWith("list")) { + return CommonConstant.OPERATE_TYPE_1; + } + if (methodName.startsWith("add")) { + return CommonConstant.OPERATE_TYPE_2; + } + if (methodName.startsWith("edit")) { + return CommonConstant.OPERATE_TYPE_3; + } + if (methodName.startsWith("delete")) { + return CommonConstant.OPERATE_TYPE_4; + } + if (methodName.startsWith("import")) { + return CommonConstant.OPERATE_TYPE_5; + } + if (methodName.startsWith("export")) { + return CommonConstant.OPERATE_TYPE_6; + } + return CommonConstant.OPERATE_TYPE_1; + } + + /** + * @Description: 获取请求参数 + * @author: scott + * @date: 2020/4/16 0:10 + * @param request: request + * @param joinPoint: joinPoint + * @Return: java.lang.String + */ + private String getReqestParams(HttpServletRequest request, JoinPoint joinPoint) { + String httpMethod = request.getMethod(); + String params = ""; + if ("POST".equals(httpMethod) || "PUT".equals(httpMethod) || "PATCH".equals(httpMethod)) { + Object[] paramsArray = joinPoint.getArgs(); + // java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) + // https://my.oschina.net/mengzhang6/blog/2395893 + Object[] arguments = new Object[paramsArray.length]; + for (int i = 0; i < paramsArray.length; i++) { + if (paramsArray[i] instanceof ServletRequest || paramsArray[i] instanceof ServletResponse || paramsArray[i] instanceof MultipartFile) { + //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) + //ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this response + continue; + } + arguments[i] = paramsArray[i]; + } + //update-begin-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 + PropertyFilter profilter = new PropertyFilter() { + @Override + public boolean apply(Object o, String name, Object value) { + if(value!=null && value.toString().length()>500){ + return false; + } + return true; + } + }; + params = JSONObject.toJSONString(arguments, profilter); + //update-end-author:taoyan date:20200724 for:日志数据太长的直接过滤掉 + } else { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + // 请求的方法参数值 + Object[] args = joinPoint.getArgs(); + // 请求的方法参数名称 + LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer(); + String[] paramNames = u.getParameterNames(method); + if (args != null && paramNames != null) { + for (int i = 0; i < args.length; i++) { + params += " " + paramNames[i] + ": " + args[i]; + } + } + } + return params; + } + + /** + * online日志内容拼接 + * @param obj + * @param content + * @return + */ + private String getOnlineLogContent(Object obj, String content){ + if (Result.class.isInstance(obj)){ + Result res = (Result)obj; + String msg = res.getMessage(); + String tableName = res.getOnlTable(); + if(oConvertUtils.isNotEmpty(tableName)){ + content+=",表名:"+tableName; + } + if(res.isSuccess()){ + content+= ","+(oConvertUtils.isEmpty(msg)?"操作成功":msg); + }else{ + content+= ","+(oConvertUtils.isEmpty(msg)?"操作失败":msg); + } + } + return content; + } + + + /* private void saveSysLog(ProceedingJoinPoint joinPoint, long time, Object obj) { + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + + SysLog sysLog = new SysLog(); + AutoLog syslog = method.getAnnotation(AutoLog.class); + if(syslog != null){ + //update-begin-author:taoyan date: + String content = syslog.value(); + if(syslog.module()== ModuleType.ONLINE){ + content = getOnlineLogContent(obj, content); + } + //注解上的描述,操作日志内容 + sysLog.setLogContent(content); + sysLog.setLogType(syslog.logType()); + } + + //请求的方法名 + String className = joinPoint.getTarget().getClass().getName(); + String methodName = signature.getName(); + sysLog.setMethod(className + "." + methodName + "()"); + + + //设置操作类型 + if (sysLog.getLogType() == CommonConstant.LOG_TYPE_2) { + sysLog.setOperateType(getOperateType(methodName, syslog.operateType())); + } + + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //请求的参数 + sysLog.setRequestParam(getReqestParams(request,joinPoint)); + + //设置IP地址 + sysLog.setIp(IPUtils.getIpAddr(request)); + + //获取登录用户信息 + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + if(sysUser!=null){ + sysLog.setUserid(sysUser.getUsername()); + sysLog.setUsername(sysUser.getRealname()); + + } + //耗时 + sysLog.setCostTime(time); + sysLog.setCreateTime(new Date()); + //保存系统日志 + sysLogService.save(sysLog); + }*/ +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java new file mode 100644 index 00000000..938942c4 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/DictAspect.java @@ -0,0 +1,212 @@ +package com.jero.common.aspect; + +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import com.jero.common.api.CommonAPI; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.Dict; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.oConvertUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.lang.reflect.Field; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Description: 字典aop类 + * @Author: dangzhenghui + * @Date: 2019-3-17 21:50 + * @Version: 1.0 + */ +@Aspect +@Component +@Slf4j +public class DictAspect { + + @Autowired + private CommonAPI commonAPI; + + // 定义切点Pointcut + @Pointcut("execution(public * com.jero.modules..*.*Controller.*(..))") + public void excudeService() { + } + + @Pointcut("@annotation(com.jero.common.aspect.annotation.DictPoint)") + public void dictPointCut() { + } + + @Around("excudeService()") + public Object doAround(ProceedingJoinPoint pjp) throws Throwable { + long time1 = System.currentTimeMillis(); + Object result = pjp.proceed(); + long time2 = System.currentTimeMillis(); + log.debug("获取JSON数据 耗时:" + (time2 - time1) + "ms"); + long start = System.currentTimeMillis(); + this.parseDictText(result); + long end = System.currentTimeMillis(); + log.debug("解析注入JSON数据 耗时" + (end - start) + "ms"); + return result; + } + + @Around("dictPointCut()") + public Object arround(ProceedingJoinPoint point) throws Throwable { + long time1 = System.currentTimeMillis(); + Object result = point.proceed(); + long time2 = System.currentTimeMillis(); + log.debug("获取JSON数据 耗时:" + (time2 - time1) + "ms"); + long start = System.currentTimeMillis(); + this.parseMethodDictText(result); + long end = System.currentTimeMillis(); + log.debug("解析注入JSON数据 耗时" + (end - start) + "ms"); + return result; + } + + /** + * 本方法针对返回对象为Result 的IPage的分页列表数据进行动态字典注入 + * 字典注入实现 通过对实体类添加注解@dict 来标识需要的字典内容,字典分为单字典code即可 ,table字典 code table text配合使用与原来jero的用法相同 + * 示例为SysUser 字段为sex 添加了注解@Dict(dicCode = "sex") 会在字典服务立马查出来对应的text 然后在请求list的时候将这个字典text,已字段名称加_dictText形式返回到前端 + * 例输入当前返回值的就会多出一个sex_dictText字段 + * { + * sex:1, + * sex_dictText:"男" + * } + * 前端直接取值sext_dictText在table里面无需再进行前端的字典转换了 + * customRender:function (text) { + * if(text==1){ + * return "男"; + * }else if(text==2){ + * return "女"; + * }else{ + * return text; + * } + * } + * 目前vue是这么进行字典渲染到table上的多了就很麻烦了 这个直接在服务端渲染完成前端可以直接用 + * @param result + */ + private void parseDictText(Object result) { + if (result instanceof Result) { + if (((Result) result).getResult() instanceof IPage) { + List items = new ArrayList<>(); + for (Object record : ((IPage) ((Result) result).getResult()).getRecords()) { + JSONObject item = translate(record); + items.add(item); + } + ((IPage) ((Result) result).getResult()).setRecords(items); + } + } + } + + /** + * @param result + */ + private void parseMethodDictText(Object result) { + if (result instanceof Result) { + Object result1 = ((Result) result).getResult(); + String jsonStr = JSONUtil.toJsonStr(result1); + if (JSONUtil.isJsonObj(jsonStr)) { + JSONObject translate = translate(result1); + ((Result) result).setResult(translate); + } else { + List items = new ArrayList<>(); + for (Object o : (List) result1) { + JSONObject translate = translate(o); + items.add(translate); + } + ((Result) result).setResult(items); + } + } + } + + /** + * @param record + * @return + */ + private JSONObject translate(Object record) { + ObjectMapper mapper = new ObjectMapper(); + String json = "{}"; + try { + //解决@JsonFormat注解解析不了的问题详见SysAnnouncement类的@JsonFormat + json = mapper.writeValueAsString(record); + } catch (JsonProcessingException e) { + log.error("json解析失败" + e.getMessage(), e); + } + JSONObject item = JSONObject.parseObject(json); + //update-begin--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + //for (Field field : record.getClass().getDeclaredFields()) { + for (Field field : oConvertUtils.getAllFields(record)) { + //update-end--Author:scott -- Date:20190603 ----for:解决继承实体字段无法翻译问题------ + if (field.getAnnotation(Dict.class) != null) { + String code = field.getAnnotation(Dict.class).dicCode(); + String text = field.getAnnotation(Dict.class).dicText(); + String table = field.getAnnotation(Dict.class).dictTable(); + String key = String.valueOf(item.get(field.getName())); + + //翻译字典值对应的txt + String textValue = translateDictValue(code, text, table, key); + + log.debug(" 字典Val : " + textValue); + log.debug(" __翻译字典字段__ " + field.getName() + CommonConstant.DICT_TEXT_SUFFIX + ": " + textValue); + item.put(field.getName() + CommonConstant.DICT_TEXT_SUFFIX, textValue); + } + //date类型默认转换string格式化日期 + if (field.getType().getName().equals("java.util.Date") && field.getAnnotation(JsonFormat.class) == null && item.get(field.getName()) != null) { + SimpleDateFormat aDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + item.put(field.getName(), aDate.format(new Date((Long) item.get(field.getName())))); + } + } + return item; + } + + /** + * 翻译字典文本 + * + * @param code + * @param text + * @param table + * @param key + * @return + */ + private String translateDictValue(String code, String text, String table, String key) { + if (oConvertUtils.isEmpty(key)) { + return null; + } + StringBuffer textValue = new StringBuffer(); + String[] keys = key.split(","); + for (String k : keys) { + String tmpValue = null; + log.debug(" 字典 key : " + k); + if (k.trim().length() == 0) { + continue; //跳过循环 + } + if (!StringUtils.isEmpty(table)) { + log.debug("--DictAspect------dicTable=" + table + " ,dicText= " + text + " ,dicCode=" + code); + tmpValue = commonAPI.translateDictFromTable(table, text, code, k.trim()); + } else { + tmpValue = commonAPI.translateDict(code, k.trim()); + } + if (tmpValue != null) { + if (!"".equals(textValue.toString())) { + textValue.append(","); + } + textValue.append(tmpValue); + } + + } + return textValue.toString(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java new file mode 100644 index 00000000..3781aac4 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/PermissionDataAspect.java @@ -0,0 +1,119 @@ +package com.jero.common.aspect; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import com.jero.common.api.CommonAPI; +import com.jero.common.aspect.annotation.PermissionData; +import com.jero.common.system.util.JeroDataAutorUtils; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.util.List; + +/** + * 数据权限切面处理类 + * 当被请求的方法有注解PermissionData时,会在往当前request中写入数据权限信息 + * @Date 2019年4月10日 + * @Version: 1.0 + */ +@Aspect +@Component +@Slf4j +public class PermissionDataAspect { + + @Autowired + private CommonAPI commonAPI; + + @Pointcut("@annotation(com.jero.common.aspect.annotation.PermissionData)") + public void pointCut() { + + } + + @Around("pointCut()") + public Object arround(ProceedingJoinPoint point) throws Throwable{ + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + PermissionData pd = method.getAnnotation(PermissionData.class); + String component = pd.pageComponent(); + + String requestMethod = request.getMethod(); + String requestPath = request.getRequestURI().substring(request.getContextPath().length()); + requestPath = filterUrl(requestPath); + log.debug("拦截请求 >> "+requestPath+";请求类型 >> "+requestMethod); + String username = JwtUtil.getUserNameByToken(request); + //查询数据权限信息 + //TODO 微服务情况下也得支持缓存机制 + List dataRules = commonAPI.queryPermissionDataRule(component, requestPath, username); + if(dataRules!=null && dataRules.size()>0) { + //临时存储 + JeroDataAutorUtils.installDataSearchConditon(request, dataRules); + //TODO 微服务情况下也得支持缓存机制 + SysUserCacheInfo userinfo = commonAPI.getCacheUser(username); + JeroDataAutorUtils.installUserInfo(request, userinfo); + } + return point.proceed(); + } + + private String filterUrl(String requestPath){ + String url = ""; + if(oConvertUtils.isNotEmpty(requestPath)){ + url = requestPath.replace("\\", "/"); + url = requestPath.replace("//", "/"); + if(url.indexOf("//")>=0){ + url = filterUrl(url); + } + /*if(url.startsWith("/")){ + url=url.substring(1); + }*/ + } + return url; + } + + /** + * 获取请求地址 + * @param request + * @return + */ + private String getJgAuthRequsetPath(HttpServletRequest request) { + String queryString = request.getQueryString(); + String requestPath = request.getRequestURI(); + if(oConvertUtils.isNotEmpty(queryString)){ + requestPath += "?" + queryString; + } + if (requestPath.indexOf("&") > -1) {// 去掉其他参数(保留一个参数) 例如:loginController.do?login + requestPath = requestPath.substring(0, requestPath.indexOf("&")); + } + if(requestPath.indexOf("=")!=-1){ + if(requestPath.indexOf(".do")!=-1){ + requestPath = requestPath.substring(0,requestPath.indexOf(".do")+3); + }else{ + requestPath = requestPath.substring(0,requestPath.indexOf("?")); + } + } + requestPath = requestPath.substring(request.getContextPath().length() + 1);// 去掉项目路径 + return filterUrl(requestPath); + } + + private boolean moHuContain(List list,String key){ + for(String str : list){ + if(key.contains(str)){ + return true; + } + } + return false; + } + + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java new file mode 100644 index 00000000..03cb3d6f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/UrlMatchEnum.java @@ -0,0 +1,58 @@ +package com.jero.common.aspect; + +/** + * @Author scott + * @Date 2020/1/14 13:36 + * @Description: 请求URL与菜单路由URL转换规则(方便于采用菜单路由URL来配置数据权限规则) + */ +public enum UrlMatchEnum { + CGFORM_DATA("/online/cgform/api/getData/", "/online/cgformList/"), + CGFORM_EXCEL_DATA("/online/cgform/api/exportXls/", "/online/cgformList/"), + CGFORM_TREE_DATA("/online/cgform/api/getTreeData/", "/online/cgformList/"), + CGREPORT_DATA("/online/cgreport/api/getColumnsAndData/", "/online/cgreport/"), + CGREPORT_EXCEL_DATA("/online/cgreport/api/exportXls/", "/online/cgreport/"); + + + UrlMatchEnum(String url, String match_url) { + this.url = url; + this.match_url = match_url; + } + + /** + * Request 请求 URL前缀 + */ + private String url; + /** + * 菜单路由 URL前缀 (对应菜单路径) + */ + private String match_url; + + /** + * 根据req url 获取到菜单配置路径(前端页面路由URL) + * + * @param url + * @return + */ + public static String getMatchResultByUrl(String url) { + //获取到枚举 + UrlMatchEnum[] values = UrlMatchEnum.values(); + //加强for循环进行遍历操作 + for (UrlMatchEnum lr : values) { + //如果遍历获取的type和参数type一致 + if (url.indexOf(lr.url) != -1) { + //返回type对象的desc + return url.replace(lr.url, lr.match_url); + } + } + return null; + } + + +// public static void main(String[] args) { +// /** +// * 比如request真实请求URL: /online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a +// * 转换匹配路由URL后(对应配置的菜单路径):/online/cgformList/81fcf7d8922d45069b0d5ba983612d3a +// */ +// System.out.println(UrlMatchEnum.getMatchResultByUrl("/online/cgform/api/getData/81fcf7d8922d45069b0d5ba983612d3a")); +// } +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/AutoLog.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/AutoLog.java new file mode 100644 index 00000000..1acaeb39 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/AutoLog.java @@ -0,0 +1,45 @@ +package com.jero.common.aspect.annotation; + +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.enums.ModuleType; + +import java.lang.annotation.*; + +/** + * 系统日志注解 + * + * @Author scott + * @Date 2019年1月14日 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface AutoLog { + + /** + * 日志内容 + * + * @return + */ + String value() default ""; + + /** + * 日志类型 + * + * @return 0:操作日志;1:登录日志;2:定时任务; + */ + int logType() default CommonConstant.LOG_TYPE_2; + + /** + * 操作日志类型 + * + * @return (1查询,2添加,3修改,4删除) + */ + int operateType() default 0; + + /** + * 模块类型 默认为common + * @return + */ + ModuleType module() default ModuleType.COMMON; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/Dict.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/Dict.java new file mode 100644 index 00000000..c8adb142 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/Dict.java @@ -0,0 +1,42 @@ +package com.jero.common.aspect.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 类描述: 字典注解 + * 作 者: dangzhenghui + * 日 期: 2019年03月17日-下午9:37:16 + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Dict { + /** + * 方法描述: 数据code + * 作 者: dangzhenghui + * 日 期: 2019年03月17日-下午9:37:16 + * + * @return 返回类型: String + */ + String dicCode(); + + /** + * 方法描述: 数据Text + * 作 者: dangzhenghui + * 日 期: 2019年03月17日-下午9:37:16 + * + * @return 返回类型: String + */ + String dicText() default ""; + + /** + * 方法描述: 数据字典表 + * 作 者: dangzhenghui + * 日 期: 2019年03月17日-下午9:37:16 + * + * @return 返回类型: String + */ + String dictTable() default ""; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java new file mode 100644 index 00000000..75ff29fc --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/DictPoint.java @@ -0,0 +1,17 @@ +package com.jero.common.aspect.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 字典转换点注解 + * 加到方法上,返回值会返回字典数据 + * @author liJiaRao + * @date 2021-08-02 9:44 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface DictPoint { +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/OnlineAuth.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/OnlineAuth.java new file mode 100644 index 00000000..3fd6f169 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/OnlineAuth.java @@ -0,0 +1,18 @@ +package com.jero.common.aspect.annotation; + +import java.lang.annotation.*; + +/** + * online请求拦截专用注解 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE,ElementType.METHOD}) +@Documented +public @interface OnlineAuth { + + /** + * 请求关键字,在xxx/code之前的字符串 + * @return + */ + String value(); +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/PermissionData.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/PermissionData.java new file mode 100644 index 00000000..600cf144 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/aspect/annotation/PermissionData.java @@ -0,0 +1,29 @@ +package com.jero.common.aspect.annotation; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 数据权限注解 + * @Author taoyan + * @Date 2019年4月11日 + */ +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE,ElementType.METHOD}) +@Documented +public @interface PermissionData { + /** + * 暂时没用 + * @return + */ + String value() default ""; + + + /** + * 配置菜单的组件路径,用于数据权限 + */ + String pageComponent() default ""; +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CacheConstant.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CacheConstant.java new file mode 100644 index 00000000..8a456dc6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CacheConstant.java @@ -0,0 +1,73 @@ +package com.jero.common.constant; + +/** + * @author: huangxutao + * @date: 2019-06-14 + * @description: 缓存常量 + */ +public interface CacheConstant { + + /** + * 字典信息缓存 + */ + public static final String SYS_DICT_CACHE = "sys:cache:dict"; + /** + * 表字典信息缓存 + */ + public static final String SYS_DICT_TABLE_CACHE = "sys:cache:dictTable"; + public static final String SYS_DICT_TABLE_BY_KEYS_CACHE = SYS_DICT_TABLE_CACHE + "ByKeys"; + + /** + * 数据权限配置缓存 + */ + public static final String SYS_DATA_PERMISSIONS_CACHE = "sys:cache:permission:datarules"; + + /** + * 缓存用户信息 + */ + public static final String SYS_USERS_CACHE = "sys:cache:user"; + + /** + * 全部部门信息缓存 + */ + public static final String SYS_DEPARTS_CACHE = "sys:cache:depart:alldata"; + + + /** + * 全部部门ids缓存 + */ + public static final String SYS_DEPART_IDS_CACHE = "sys:cache:depart:allids"; + + + /** + * 测试缓存key + */ + public static final String TEST_DEMO_CACHE = "test:demo"; + + /** + * 字典信息缓存 + */ + public static final String SYS_DYNAMICDB_CACHE = "sys:cache:dbconnect:dynamic:"; + + /** + * gateway路由缓存 + */ + public static final String GATEWAY_ROUTES = "gateway_routes"; + + + /** + * gateway路由 reload key + */ + public static final String ROUTE_JVM_RELOAD_TOPIC = "gateway_jvm_route_reload_topic"; + + /** + * TODO 冗余代码 待删除 + *插件商城排行榜 + */ + public static final String PLUGIN_MALL_RANKING = "pluginMall::rankingList"; + /** + * TODO 冗余代码 待删除 + *插件商城排行榜 + */ + public static final String PLUGIN_MALL_PAGE_LIST = "pluginMall::queryPageList"; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java new file mode 100644 index 00000000..dd256592 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonConstant.java @@ -0,0 +1,308 @@ +package com.jero.common.constant; + +public interface CommonConstant { + + /** + * 正常状态 + */ + public static final Integer STATUS_NORMAL = 0; + + /** + * 禁用状态 + */ + public static final Integer STATUS_DISABLE = -1; + + /** + * 删除标志 + */ + public static final Integer DEL_FLAG_1 = 1; + + /** + * 未删除 + */ + public static final Integer DEL_FLAG_0 = 0; + + /** + * 系统日志类型: 登录 + */ + public static final int LOG_TYPE_1 = 1; + + /** + * 系统日志类型: 操作 + */ + public static final int LOG_TYPE_2 = 2; + + /** + * 操作日志类型: 查询 + */ + public static final int OPERATE_TYPE_1 = 1; + + /** + * 操作日志类型: 添加 + */ + public static final int OPERATE_TYPE_2 = 2; + + /** + * 操作日志类型: 更新 + */ + public static final int OPERATE_TYPE_3 = 3; + + /** + * 操作日志类型: 删除 + */ + public static final int OPERATE_TYPE_4 = 4; + + /** + * 操作日志类型: 倒入 + */ + public static final int OPERATE_TYPE_5 = 5; + + /** + * 操作日志类型: 导出 + */ + public static final int OPERATE_TYPE_6 = 6; + + + /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ + public static final Integer SC_INTERNAL_SERVER_ERROR_500 = 500; + /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */ + public static final Integer SC_OK_200 = 200; + + /**访问权限认证未通过 510*/ + public static final Integer SC_JERO_NO_AUTHZ=510; + + /** 登录用户Shiro权限缓存KEY前缀 */ + public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:com.jero.config.shiro.ShiroRealm.authorizationCache:"; + /** 登录用户Token令牌缓存KEY前缀 */ + public static final String PREFIX_USER_TOKEN = "prefix_user_token_"; + /** Token缓存时间:3600秒即一小时 */ + public static final int TOKEN_EXPIRE_TIME = 3600; + + + /** + * 0:一级菜单 + */ + public static final Integer MENU_TYPE_0 = 0; + /** + * 1:子菜单 + */ + public static final Integer MENU_TYPE_1 = 1; + /** + * 2:按钮权限 + */ + public static final Integer MENU_TYPE_2 = 2; + + /**通告对象类型(USER:指定用户,ALL:全体用户)*/ + public static final String MSG_TYPE_UESR = "USER"; + public static final String MSG_TYPE_ALL = "ALL"; + + /**发布状态(0未发布,1已发布,2已撤销)*/ + public static final String NO_SEND = "0"; + public static final String HAS_SEND = "1"; + public static final String HAS_CANCLE = "2"; + + /**阅读状态(0未读,1已读)*/ + public static final String HAS_READ_FLAG = "1"; + public static final String NO_READ_FLAG = "0"; + + /**优先级(L低,M中,H高)*/ + public static final String PRIORITY_L = "L"; + public static final String PRIORITY_M = "M"; + public static final String PRIORITY_H = "H"; + + /** + * 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 + */ + public static final String SMS_TPL_TYPE_0 = "0"; + public static final String SMS_TPL_TYPE_1 = "1"; + public static final String SMS_TPL_TYPE_2 = "2"; + + /** + * 状态(0无效1有效) + */ + public static final String STATUS_0 = "0"; + public static final String STATUS_1 = "1"; + + /** + * 同步工作流引擎1同步0不同步 + */ + public static final Integer ACT_SYNC_1 = 1; + public static final Integer ACT_SYNC_0 = 0; + + /** + * 消息类型1:通知公告2:系统消息 + */ + public static final String MSG_CATEGORY_1 = "1"; + public static final String MSG_CATEGORY_2 = "2"; + + /** + * 是否配置菜单的数据权限 1是0否 + */ + public static final Integer RULE_FLAG_0 = 0; + public static final Integer RULE_FLAG_1 = 1; + + /** + * 是否用户已被冻结 1正常(解冻) 2冻结 + */ + public static final Integer USER_UNFREEZE = 1; + public static final Integer USER_FREEZE = 2; + + /**字典翻译文本后缀*/ + public static final String DICT_TEXT_SUFFIX = "_dictText"; + + /** + * 表单设计器主表类型 + */ + public static final Integer DESIGN_FORM_TYPE_MAIN = 1; + + /** + * 表单设计器子表表类型 + */ + public static final Integer DESIGN_FORM_TYPE_SUB = 2; + + /** + * 表单设计器URL授权通过 + */ + public static final Integer DESIGN_FORM_URL_STATUS_PASSED = 1; + + /** + * 表单设计器URL授权未通过 + */ + public static final Integer DESIGN_FORM_URL_STATUS_NOT_PASSED = 2; + + /** + * 表单设计器新增 Flag + */ + public static final String DESIGN_FORM_URL_TYPE_ADD = "add"; + /** + * 表单设计器修改 Flag + */ + public static final String DESIGN_FORM_URL_TYPE_EDIT = "edit"; + /** + * 表单设计器详情 Flag + */ + public static final String DESIGN_FORM_URL_TYPE_DETAIL = "detail"; + /** + * 表单设计器复用数据 Flag + */ + public static final String DESIGN_FORM_URL_TYPE_REUSE = "reuse"; + /** + * 表单设计器编辑 Flag (已弃用) + */ + public static final String DESIGN_FORM_URL_TYPE_VIEW = "view"; + + /** + * online参数值设置(是:Y, 否:N) + */ + public static final String ONLINE_PARAM_VAL_IS_TURE = "Y"; + public static final String ONLINE_PARAM_VAL_IS_FALSE = "N"; + + /** + * 文件上传类型(本地:local,Minio:minio,阿里云:alioss) + */ + public static final String UPLOAD_TYPE_LOCAL = "local"; + public static final String UPLOAD_TYPE_MINIO = "minio"; + public static final String UPLOAD_TYPE_OSS = "alioss"; + + /** + * 文档上传自定义桶名称 + */ + public static final String UPLOAD_CUSTOM_BUCKET = "eoafile"; + /** + * 文档上传自定义路径 + */ + public static final String UPLOAD_CUSTOM_PATH = "eoafile"; + /** + * 文件外链接有效天数 + */ + public static final Integer UPLOAD_EFFECTIVE_DAYS = 1; + + /** + * 员工身份 (1:普通员工 2:上级) + */ + public static final Integer USER_IDENTITY_1 = 1; + public static final Integer USER_IDENTITY_2 = 2; + + /** sys_user 表 username 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username"; + /** sys_user 表 work_no 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no"; + /** sys_user 表 phone 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone"; + /** sys_user 表 email 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email"; + /** sys_quartz_job 表 job_class_name 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name"; + /** sys_position 表 code 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_CODE = "uniq_code"; + /** sys_role 表 code 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code"; + /** sys_depart 表 code 唯一键索引 */ + public static final String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code"; + /** + * 在线聊天 是否为默认分组 + */ + public static final String IM_DEFAULT_GROUP = "1"; + /** + * 在线聊天 图片文件保存路径 + */ + public static final String IM_UPLOAD_CUSTOM_PATH = "imfile"; + /** + * 在线聊天 用户状态 + */ + public static final String IM_STATUS_ONLINE = "online"; + + /** + * 在线聊天 SOCKET消息类型 + */ + public static final String IM_SOCKET_TYPE = "chatMessage"; + + /** + * 在线聊天 是否开启默认添加好友 1是 0否 + */ + public static final String IM_DEFAULT_ADD_FRIEND = "1"; + + /** + * 在线聊天 用户好友缓存前缀 + */ + public static final String IM_PREFIX_USER_FRIEND_CACHE = "im_prefix_user_friend_"; + + /** + * 考勤补卡业务状态 (1:同意 2:不同意) + */ + public static final String SIGN_PATCH_BIZ_STATUS_1 = "1"; + public static final String SIGN_PATCH_BIZ_STATUS_2 = "2"; + + /** + * 公文文档上传自定义路径 + */ + public static final String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc"; + /** + * 公文文档下载自定义路径 + */ + public static final String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown"; + + /** + * WPS存储值类别(1 code文号 2 text(WPS模板还是公文发文模板)) + */ + public static final String WPS_TYPE_1="1"; + public static final String WPS_TYPE_2="2"; + + + public final static String X_ACCESS_TOKEN = "X-Access-Token"; + + /** + * 多租户 请求头 + */ + public final static String TENANT_ID = "tenant_id"; + + /** + * 微服务读取配置文件属性 服务地址 + */ + public final static String CLOUD_SERVER_KEY = "spring.cloud.nacos.discovery.server-addr"; + + /** + * 第三方登录 验证密码/创建用户 都需要设置一个操作码 防止被恶意调用 + */ + public final static String THIRD_LOGIN_CODE = "third_login_code"; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java new file mode 100644 index 00000000..34479da6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/CommonSendStatus.java @@ -0,0 +1,24 @@ +package com.jero.common.constant; + +/** + * 系统通告 - 发布状态 + * @Author LeeShaoQing + * + */ +public interface CommonSendStatus { + + public static final String UNPUBLISHED_STATUS_0 = "0"; //未发布 + + public static final String PUBLISHED_STATUS_1 = "1"; //已发布 + + public static final String REVOKE_STATUS_2 = "2"; //撤销 + + + + /**流程催办——系统通知消息模板*/ + public static final String TZMB_BPM_CUIBAN = "bpm_cuiban"; + /**标准模板—系统消息通知*/ + public static final String TZMB_SYS_TS_NOTE = "sys_ts_note"; + /**流程超时提醒——系统通知消息模板*/ + public static final String TZMB_BPM_CHAOSHI_TIP = "bpm_chaoshi_tip"; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java new file mode 100644 index 00000000..37a34f25 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/DataBaseConstant.java @@ -0,0 +1,113 @@ +package com.jero.common.constant; +/** + * 数据库上下文常量 + */ +public interface DataBaseConstant { + //*********数据库类型**************************************** + public static final String DB_TYPE_MYSQL = "MYSQL"; + public static final String DB_TYPE_ORACLE = "ORACLE"; + public static final String DB_TYPE_POSTGRESQL = "POSTGRESQL"; + public static final String DB_TYPE_SQLSERVER = "SQLSERVER"; + + // 数据库类型,对应 database_type 字典 + public static final String DB_TYPE_MYSQL_NUM = "1"; + public static final String DB_TYPE_ORACLE_NUM = "2"; + public static final String DB_TYPE_SQLSERVER_NUM = "3"; + public static final String DB_TYPE_POSTGRESQL_NUM = "4"; + //*********系统上下文变量**************************************** + /** + * 数据-所属机构编码 + */ + public static final String SYS_ORG_CODE = "sysOrgCode"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_ORG_CODE_TABLE = "sys_org_code"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_MULTI_ORG_CODE = "sysMultiOrgCode"; + /** + * 数据-所属机构编码 + */ + public static final String SYS_MULTI_ORG_CODE_TABLE = "sys_multi_org_code"; + /** + * 数据-系统用户编码(对应登录用户账号) + */ + public static final String SYS_USER_CODE = "sysUserCode"; + /** + * 数据-系统用户编码(对应登录用户账号) + */ + public static final String SYS_USER_CODE_TABLE = "sys_user_code"; + + /** + * 登录用户真实姓名 + */ + public static final String SYS_USER_NAME = "sysUserName"; + /** + * 登录用户真实姓名 + */ + public static final String SYS_USER_NAME_TABLE = "sys_user_name"; + /** + * 系统日期"yyyy-MM-dd" + */ + public static final String SYS_DATE = "sysDate"; + /** + * 系统日期"yyyy-MM-dd" + */ + public static final String SYS_DATE_TABLE = "sys_date"; + /** + * 系统时间"yyyy-MM-dd HH:mm" + */ + public static final String SYS_TIME = "sysTime"; + /** + * 系统时间"yyyy-MM-dd HH:mm" + */ + public static final String SYS_TIME_TABLE = "sys_time"; + //*********系统上下文变量**************************************** + + + //*********系统建表标准字段**************************************** + /** + * 创建者登录名称 + */ + public static final String CREATE_BY_TABLE = "create_by"; + /** + * 创建者登录名称 + */ + public static final String CREATE_BY = "createBy"; + /** + * 创建日期时间 + */ + public static final String CREATE_TIME_TABLE = "create_time"; + /** + * 创建日期时间 + */ + public static final String CREATE_TIME = "createTime"; + /** + * 更新用户登录名称 + */ + public static final String UPDATE_BY_TABLE = "update_by"; + /** + * 更新用户登录名称 + */ + public static final String UPDATE_BY = "updateBy"; + /** + * 更新日期时间 + */ + public static final String UPDATE_TIME = "updateTime"; + /** + * 更新日期时间 + */ + public static final String UPDATE_TIME_TABLE = "update_time"; + + /** + * 业务流程状态 + */ + public static final String BPM_STATUS = "bpmStatus"; + /** + * 业务流程状态 + */ + public static final String BPM_STATUS_TABLE = "bpm_status"; + //*********系统建表标准字段**************************************** +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java new file mode 100644 index 00000000..6a319129 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/FillRuleConstant.java @@ -0,0 +1,25 @@ +package com.jero.common.constant; + +/** + * 规则值生成 编码常量类 + * @author: taoyan + * @date: 2020年04月02日 + */ +public class FillRuleConstant { + + /** + * 公文发文编码 + */ + public static final String DOC_SEND = "doc_send_code"; + + /** + * 部门编码 + */ + public static final String DEPART = "org_num_role"; + + /** + * 分类字典编码 + */ + public static final String CATEGORY = "category_code_rule"; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java new file mode 100644 index 00000000..04350b12 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ProvinceCityArea.java @@ -0,0 +1,131 @@ +package com.jero.common.constant; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.util.oConvertUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.Resource; +import org.springframework.stereotype.Component; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Scanner; +import java.util.Set; +import java.util.List; + +@Component("pca") +public class ProvinceCityArea { + List areaList; + + public String getText(String code){ + this.initAreaList(); + if(this.areaList!=null || this.areaList.size()>0){ + List ls = new ArrayList(); + getAreaByCode(code,ls); + return String.join("/",ls); + } + return ""; + } + + public String getCode(String text){ + this.initAreaList(); + if(areaList!=null || areaList.size()>0){ + for(int i=areaList.size()-1;i>=0;i--){ + if(text.indexOf(areaList.get(i).getText())>=0){ + return areaList.get(i).getId(); + } + } + } + return null; + } + + public void getAreaByCode(String code,List ls){ + for(Area area: areaList){ + if(area.getId().equals(code)){ + String pid = area.getPid(); + ls.add(0,area.getText()); + getAreaByCode(pid,ls); + } + } + } + + private void initAreaList(){ + //System.out.println("====================="); + if(this.areaList==null || this.areaList.size()==0){ + this.areaList = new ArrayList(); + try { + String jsonData = oConvertUtils.readStatic("classpath:static/pca.json"); + JSONObject baseJson = JSONObject.parseObject(jsonData); + //第一层 省 + JSONObject provinceJson = baseJson.getJSONObject("86"); + for(String provinceKey: provinceJson.keySet()){ + //System.out.println("===="+provinceKey); + Area province = new Area(provinceKey,provinceJson.getString(provinceKey),"86"); + this.areaList.add(province); + //第二层 市 + JSONObject cityJson = baseJson.getJSONObject(provinceKey); + for(String cityKey:cityJson.keySet()){ + //System.out.println("-----"+cityKey); + Area city = new Area(cityKey,cityJson.getString(cityKey),provinceKey); + this.areaList.add(city); + //第三层 区 + JSONObject areaJson = baseJson.getJSONObject(cityKey); + if(areaJson!=null){ + for(String areaKey:areaJson.keySet()){ + //System.out.println("········"+areaKey); + Area area = new Area(areaKey,areaJson.getString(areaKey),cityKey); + this.areaList.add(area); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + } + + + private String jsonRead(File file){ + Scanner scanner = null; + StringBuilder buffer = new StringBuilder(); + try { + scanner = new Scanner(file, "utf-8"); + while (scanner.hasNextLine()) { + buffer.append(scanner.nextLine()); + } + } catch (Exception e) { + + } finally { + if (scanner != null) { + scanner.close(); + } + } + return buffer.toString(); + } + + class Area{ + String id; + String text; + String pid; + + public Area(String id,String text,String pid){ + this.id = id; + this.text = text; + this.pid = pid; + } + + public String getId() { + return id; + } + + public String getText() { + return text; + } + + public String getPid() { + return pid; + } + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java new file mode 100644 index 00000000..ba5dc076 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/ServiceNameConstants.java @@ -0,0 +1,38 @@ +/* + * + * * Copyright (c) 2019-2020, 冷冷 (wangiegie@gmail.com). + * *

+ * * Licensed under the GNU Lesser General Public License 3.0 (the "License"); + * * you may not use this file except in compliance with the License. + * * You may obtain a copy of the License at + * *

+ * * https://www.gnu.org/licenses/lgpl.html + * *

+ * * Unless required by applicable law or agreed to in writing, software + * * distributed under the License is distributed on an "AS IS" BASIS, + * * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * * See the License for the specific language governing permissions and + * * limitations under the License. + * + */ + +package com.jero.common.constant; + +/** + * @author scott + * @date 2019年05月18日 + * 服务名称 + */ +public interface ServiceNameConstants { + + /** + * 系统管理 admin + */ + String SYSTEM_SERVICE = "jero-system"; + + /** + * gateway通过header传递根路径 basePath + */ + String X_GATEWAY_BASE_PATH = "X_GATEWAY_BASE_PATH"; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java new file mode 100644 index 00000000..015a998b --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/VXESocketConst.java @@ -0,0 +1,30 @@ +package com.jero.common.constant; + +/** + * VXESocket 常量 + */ +public class VXESocketConst { + + /** + * 消息类型 + */ + public static final String TYPE = "type"; + /** + * 消息数据 + */ + public static final String DATA = "data"; + + /** + * 消息类型:心跳检测 + */ + public static final String TYPE_HB = "heart_beat"; + /** + * 消息类型:通用数据传递 + */ + public static final String TYPE_CSD = "common_send_date"; + /** + * 消息类型:更新vxe table数据 + */ + public static final String TYPE_UVT = "update_vxe_table"; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java new file mode 100644 index 00000000..d3f0c121 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/WebsocketConst.java @@ -0,0 +1,61 @@ +package com.jero.common.constant; + +/** + * @Description: Websocket常量类 + * @author: taoyan + * @date: 2020年03月23日 + */ +public class WebsocketConst { + + + /** + * 消息json key:cmd + */ + public static final String MSG_CMD = "cmd"; + + /** + * 消息json key:msgId + */ + public static final String MSG_ID = "msgId"; + + /** + * 消息json key:msgTxt + */ + public static final String MSG_TXT = "msgTxt"; + + /** + * 消息json key:userId + */ + public static final String MSG_USER_ID = "userId"; + + /** + * 消息类型 heartcheck + */ + public static final String CMD_CHECK = "heartcheck"; + + /** + * 消息类型 user 用户消息 + */ + public static final String CMD_USER = "user"; + + /** + * 消息类型 topic 系统通知 + */ + public static final String CMD_TOPIC = "topic"; + + /** + * 消息类型 email + */ + public static final String CMD_EMAIL = "email"; + + /** + * 消息类型 meetingsign 会议签到 + */ + public static final String CMD_SIGN = "sign"; + + /** + * 消息类型 新闻发布/取消 + */ + public static final String NEWS_PUBLISH = "publish"; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java new file mode 100644 index 00000000..ea85c8f8 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/CgformEnum.java @@ -0,0 +1,150 @@ +package com.jero.common.constant.enums; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * online表单枚举 代码生成器用到 + */ +public enum CgformEnum { + + /** + * 单表 + */ + ONE(1, "one", "/jero/code-template-online", "default.one", "经典风格"), + /** + * 多表 + */ + MANY(2, "many", "/jero/code-template-online", "default.onetomany", "经典风格"), + /** + * 多表 + */ + ERP(2, "erp", "/jero/code-template-online", "erp.onetomany", "ERP风格"), + /** + * 多表(jvxe风格) + * */ + JVXE_TABLE(2, "jvxe", "/jero/code-template-online", "jvxe.onetomany", "JVXE风格"), + /** + * 多表(内嵌子表风格) + */ + INNER_TABLE(2, "innerTable", "/jero/code-template-online", "inner-table.onetomany", "内嵌子表风格"), + /** + * 多表(tab风格) + * */ + TAB(2, "tab", "/jero/code-template-online", "tab.onetomany", "Tab风格"), + /** + * 树形列表 + */ + TREE(3, "tree", "/jero/code-template-online", "default.tree", "树形列表"); + + /** + * 类型 1/单表 2/一对多 3/树 + */ + int type; + /** + * 编码标识 + */ + String code; + /** + * 代码生成器模板路径 + */ + String templatePath; + /** + * 代码生成器模板路径 + */ + String stylePath; + /** + * 模板风格名称 + */ + String note; + + /** + * 构造器 + * + * @param type 类型 1/单表 2/一对多 3/树 + * @param code 模板编码 + * @param templatePath 模板路径 + * @param stylePath 模板子路径 + * @param note + */ + CgformEnum(int type, String code, String templatePath, String stylePath, String note) { + this.type = type; + this.code = code; + this.templatePath = templatePath; + this.stylePath = stylePath; + this.note = note; + } + + /** + * 根据code获取模板路径 + * + * @param code + * @return + */ + public static String getTemplatePathByConfig(String code) { + return getCgformEnumByConfig(code).templatePath; + } + + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getTemplatePath() { + return templatePath; + } + + public void setTemplatePath(String templatePath) { + this.templatePath = templatePath; + } + + public String getStylePath() { + return stylePath; + } + + public void setStylePath(String stylePath) { + this.stylePath = stylePath; + } + + /** + * 根据code找枚举 + * + * @param code + * @return + */ + public static CgformEnum getCgformEnumByConfig(String code) { + for (CgformEnum e : CgformEnum.values()) { + if (e.code.equals(code)) { + return e; + } + } + return null; + } + + /** + * 根据类型找所有 + * + * @param type + * @return + */ + public static List> getJspModelList(int type) { + List> ls = new ArrayList>(); + for (CgformEnum e : CgformEnum.values()) { + if (e.type == type) { + Map map = new HashMap(); + map.put("code", e.code); + map.put("note", e.note); + ls.add(map); + } + } + return ls; + } + + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/ModuleType.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/ModuleType.java new file mode 100644 index 00000000..280dd3c7 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/constant/enums/ModuleType.java @@ -0,0 +1,17 @@ +package com.jero.common.constant.enums; + +/** + * 日志按模块分类 + */ +public enum ModuleType { + + /** + * 普通 + */ + COMMON, + + /** + * online + */ + ONLINE; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java new file mode 100644 index 00000000..56798b08 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/JeroElasticsearchTemplate.java @@ -0,0 +1,515 @@ +package com.jero.common.es; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import com.jero.common.util.RestUtil; +import com.jero.common.util.oConvertUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Component; + +import java.util.*; + +/** + * 关于 ElasticSearch 的一些方法(创建索引、添加数据、查询等) + * + * @author sunjianlei + */ +@Slf4j +@Component +public class JeroElasticsearchTemplate { + /** es服务地址 */ + private String baseUrl; + private final String FORMAT_JSON = "format=json"; + + // ElasticSearch 最大可返回条目数 + public static final int ES_MAX_SIZE = 10000; + + public JeroElasticsearchTemplate(@Value("${jero.elasticsearch.cluster-nodes}") String baseUrl, @Value("${jero.elasticsearch.check-enabled}") boolean checkEnabled) { + log.debug("JeroElasticsearchTemplate BaseURL:" + baseUrl); + if (StringUtils.isNotEmpty(baseUrl)) { + this.baseUrl = baseUrl; + // 验证配置的ES地址是否有效 + if (checkEnabled) { + try { + RestUtil.get(this.getBaseUrl().toString()); + log.info("ElasticSearch 服务连接成功"); + } catch (Exception e) { + log.warn("ElasticSearch 服务连接失败,原因:配置未通过。可能是BaseURL未配置或配置有误,也可能是Elasticsearch服务未启动。接下来将会拒绝执行任何方法!"); + } + } + } + } + + public StringBuilder getBaseUrl(String indexName, String typeName) { + typeName = typeName.trim().toLowerCase(); + return this.getBaseUrl(indexName).append("/").append(typeName); + } + + public StringBuilder getBaseUrl(String indexName) { + indexName = indexName.trim().toLowerCase(); + return this.getBaseUrl().append("/").append(indexName); + } + + public StringBuilder getBaseUrl() { + return new StringBuilder("http://").append(this.baseUrl); + } + + /** + * cat 查询ElasticSearch系统数据,返回json + */ + public ResponseEntity _cat(String urlAfter, Class responseType) { + String url = this.getBaseUrl().append("/_cat").append(urlAfter).append("?").append(FORMAT_JSON).toString(); + return RestUtil.request(url, HttpMethod.GET, null, null, null, responseType); + } + + /** + * 查询所有索引 + *

+ * 查询地址:GET http://{baseUrl}/_cat/indices + */ + public JSONArray getIndices() { + return getIndices(null); + } + + + /** + * 查询单个索引 + *

+ * 查询地址:GET http://{baseUrl}/_cat/indices/{indexName} + */ + public JSONArray getIndices(String indexName) { + StringBuilder urlAfter = new StringBuilder("/indices"); + if (!StringUtils.isEmpty(indexName)) { + urlAfter.append("/").append(indexName.trim().toLowerCase()); + } + return _cat(urlAfter.toString(), JSONArray.class).getBody(); + } + + /** + * 索引是否存在 + */ + public boolean indexExists(String indexName) { + try { + JSONArray array = getIndices(indexName); + return array != null; + } catch (org.springframework.web.client.HttpClientErrorException ex) { + if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { + return false; + } else { + throw ex; + } + } + } + + /** + * 根据ID获取索引数据,未查询到返回null + *

+ * 查询地址:GET http://{baseUrl}/{indexName}/{typeName}/{dataId} + * + * @param indexName 索引名称 + * @param typeName type,一个任意字符串,用于分类 + * @param dataId 数据id + * @return + */ + public JSONObject getDataById(String indexName, String typeName, String dataId) { + String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).toString(); + log.info("url:" + url); + JSONObject result = RestUtil.get(url); + boolean found = result.getBoolean("found"); + if (found) { + return result.getJSONObject("_source"); + } else { + return null; + } + } + + /** + * 创建索引 + *

+ * 查询地址:PUT http://{baseUrl}/{indexName} + */ + public boolean createIndex(String indexName) { + String url = this.getBaseUrl(indexName).toString(); + + /* 返回结果 (仅供参考) + "createIndex": { + "shards_acknowledged": true, + "acknowledged": true, + "index": "hello_world" + } + */ + try { + return RestUtil.put(url).getBoolean("acknowledged"); + } catch (org.springframework.web.client.HttpClientErrorException ex) { + if (HttpStatus.BAD_REQUEST == ex.getStatusCode()) { + log.warn("索引创建失败:" + indexName + " 已存在,无需再创建"); + } else { + ex.printStackTrace(); + } + } + return false; + } + + /** + * 删除索引 + *

+ * 查询地址:DELETE http://{baseUrl}/{indexName} + */ + public boolean removeIndex(String indexName) { + String url = this.getBaseUrl(indexName).toString(); + try { + return RestUtil.delete(url).getBoolean("acknowledged"); + } catch (org.springframework.web.client.HttpClientErrorException ex) { + if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { + log.warn("索引删除失败:" + indexName + " 不存在,无需删除"); + } else { + ex.printStackTrace(); + } + } + return false; + } + + /** + * 获取索引字段映射(可获取字段类型) + *

+ * + * @param indexName 索引名称 + * @param typeName 分类名称 + * @return + */ + public JSONObject getIndexMapping(String indexName, String typeName) { + String url = this.getBaseUrl(indexName, typeName).append("/_mapping?").append(FORMAT_JSON).toString(); + log.info("getIndexMapping-url:" + url); + /* + * 参考返回JSON结构: + * + *{ + * // 索引名称 + * "[indexName]": { + * "mappings": { + * // 分类名称 + * "[typeName]": { + * "properties": { + * // 字段名 + * "input_number": { + * // 字段类型 + * "type": "long" + * }, + * "input_string": { + * "type": "text", + * "fields": { + * "keyword": { + * "type": "keyword", + * "ignore_above": 256 + * } + * } + * } + * } + * } + * } + * } + * } + */ + try { + return RestUtil.get(url); + } catch (org.springframework.web.client.HttpClientErrorException e) { + String message = e.getMessage(); + if (message != null && message.contains("404 Not Found")) { + return null; + } + throw e; + } + } + + /** + * 获取索引字段映射,返回Java实体类 + * + * @param indexName + * @param typeName + * @return + */ + public Map getIndexMappingFormat(String indexName, String typeName, Class clazz) { + JSONObject mapping = this.getIndexMapping(indexName, typeName); + Map map = new HashMap<>(); + if (mapping == null) { + return map; + } + // 获取字段属性 + JSONObject properties = mapping.getJSONObject(indexName) + .getJSONObject("mappings") + .getJSONObject(typeName) + .getJSONObject("properties"); + // 封装成 java类型 + for (String key : properties.keySet()) { + T entity = properties.getJSONObject(key).toJavaObject(clazz); + map.put(key, entity); + } + return map; + } + + /** + * 保存数据,详见:saveOrUpdate + */ + public boolean save(String indexName, String typeName, String dataId, JSONObject data) { + return this.saveOrUpdate(indexName, typeName, dataId, data); + } + + /** + * 更新数据,详见:saveOrUpdate + */ + public boolean update(String indexName, String typeName, String dataId, JSONObject data) { + return this.saveOrUpdate(indexName, typeName, dataId, data); + } + + /** + * 保存或修改索引数据 + *

+ * 查询地址:PUT http://{baseUrl}/{indexName}/{typeName}/{dataId} + * + * @param indexName 索引名称 + * @param typeName type,一个任意字符串,用于分类 + * @param dataId 数据id + * @param data 要存储的数据 + * @return + */ + public boolean saveOrUpdate(String indexName, String typeName, String dataId, JSONObject data) { + String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).append("?refresh=wait_for").toString(); + /* 返回结果(仅供参考) + "createIndexA2": { + "result": "created", + "_shards": { + "total": 2, + "successful": 1, + "failed": 0 + }, + "_seq_no": 0, + "_index": "test_index_1", + "_type": "test_type_1", + "_id": "a2", + "_version": 1, + "_primary_term": 1 + } + */ + + try { + // 去掉 data 中为空的值 + Set keys = data.keySet(); + List emptyKeys = new ArrayList<>(keys.size()); + for (String key : keys) { + String value = data.getString(key); + //1、剔除空值 + if (oConvertUtils.isEmpty(value) || "[]".equals(value)) { + emptyKeys.add(key); + } + //2、剔除上传控件值(会导致ES同步失败,报异常failed to parse field [ge_pic] of type [text] ) + if (oConvertUtils.isNotEmpty(value) && value.indexOf("[{")!=-1) { + emptyKeys.add(key); + log.info("-------剔除上传控件字段------------key: "+ key); + } + } + for (String key : emptyKeys) { + data.remove(key); + } + } catch (Exception e) { + e.printStackTrace(); + } + try { + String result = RestUtil.put(url, data).getString("result"); + return "created".equals(result) || "updated".equals(result); + } catch (Exception e) { + log.error(e.getMessage() + "\n-- url: " + url + "\n-- data: " + data.toJSONString()); + //TODO 打印接口返回异常json + return false; + } + } + + /** + * 批量保存数据 + * + * @param indexName 索引名称 + * @param typeName type,一个任意字符串,用于分类 + * @param dataList 要存储的数据数组,每行数据必须包含id + * @return + */ + public boolean saveBatch(String indexName, String typeName, JSONArray dataList) { + String url = this.getBaseUrl().append("/_bulk").append("?refresh=wait_for").toString(); + StringBuilder bodySB = new StringBuilder(); + for (int i = 0; i < dataList.size(); i++) { + JSONObject data = dataList.getJSONObject(i); + String id = data.getString("id"); + // 该行的操作 + // {"create": {"_id":"${id}", "_index": "${indexName}", "_type": "${typeName}"}} + JSONObject action = new JSONObject(); + JSONObject actionInfo = new JSONObject(); + actionInfo.put("_id", id); + actionInfo.put("_index", indexName); + actionInfo.put("_type", typeName); + action.put("create", actionInfo); + bodySB.append(action.toJSONString()).append("\n"); + // 该行的数据 + data.remove("id"); + bodySB.append(data.toJSONString()).append("\n"); + } + System.out.println("+-+-+-: bodySB.toString(): " + bodySB.toString()); + HttpHeaders headers = RestUtil.getHeaderApplicationJson(); + RestUtil.request(url, HttpMethod.PUT, headers, null, bodySB, JSONObject.class); + return true; + } + + /** + * 删除索引数据 + *

+ * 请求地址:DELETE http://{baseUrl}/{indexName}/{typeName}/{dataId} + */ + public boolean delete(String indexName, String typeName, String dataId) { + String url = this.getBaseUrl(indexName, typeName).append("/").append(dataId).toString(); + /* 返回结果(仅供参考) + { + "_index": "es_demo", + "_type": "docs", + "_id": "001", + "_version": 3, + "result": "deleted", + "_shards": { + "total": 1, + "successful": 1, + "failed": 0 + }, + "_seq_no": 28, + "_primary_term": 18 + } + */ + try { + return "deleted".equals(RestUtil.delete(url).getString("result")); + } catch (org.springframework.web.client.HttpClientErrorException ex) { + if (HttpStatus.NOT_FOUND == ex.getStatusCode()) { + return false; + } else { + throw ex; + } + } + } + + + /* = = = 以下关于查询和查询条件的方法 = = =*/ + + /** + * 查询数据 + *

+ * 请求地址:POST http://{baseUrl}/{indexName}/{typeName}/_search + */ + public JSONObject search(String indexName, String typeName, JSONObject queryObject) { + String url = this.getBaseUrl(indexName, typeName).append("/_search").toString(); + + log.info("url:" + url + " ,search: " + queryObject.toJSONString()); + JSONObject res = RestUtil.post(url, queryObject); + log.info("url:" + url + " ,return res: \n" + res.toJSONString()); + return res; + } + + /** + * @param _source (源滤波器)指定返回的字段,传null返回所有字段 + * @param query + * @param from 从第几条数据开始 + * @param size 返回条目数 + * @return { "query": query } + */ + public JSONObject buildQuery(List _source, JSONObject query, int from, int size) { + JSONObject json = new JSONObject(); + if (_source != null) { + json.put("_source", _source); + } + json.put("query", query); + json.put("from", from); + json.put("size", size); + return json; + } + + /** + * @return { "bool" : { "must": must, "must_not": mustNot, "should": should } } + */ + public JSONObject buildBoolQuery(JSONArray must, JSONArray mustNot, JSONArray should) { + JSONObject bool = new JSONObject(); + if (must != null) { + bool.put("must", must); + } + if (mustNot != null) { + bool.put("must_not", mustNot); + } + if (should != null) { + bool.put("should", should); + } + JSONObject json = new JSONObject(); + json.put("bool", bool); + return json; + } + + /** + * @param field 要查询的字段 + * @param args 查询参数,参考: *哈哈* OR *哒* NOT *呵* OR *啊* + * @return + */ + public JSONObject buildQueryString(String field, String... args) { + if (field == null) { + return null; + } + StringBuilder sb = new StringBuilder(field).append(":("); + if (args != null) { + for (String arg : args) { + sb.append(arg).append(" "); + } + } + sb.append(")"); + return this.buildQueryString(sb.toString()); + } + + /** + * @return { "query_string": { "query": query } } + */ + public JSONObject buildQueryString(String query) { + JSONObject queryString = new JSONObject(); + queryString.put("query", query); + JSONObject json = new JSONObject(); + json.put("query_string", queryString); + return json; + } + + /** + * @param field 查询字段 + * @param min 最小值 + * @param max 最大值 + * @param containMin 范围内是否包含最小值 + * @param containMax 范围内是否包含最大值 + * @return { "range" : { field : { 『 "gt『e』?containMin" : min 』?min!=null , 『 "lt『e』?containMax" : max 』}} } + */ + public JSONObject buildRangeQuery(String field, Object min, Object max, boolean containMin, boolean containMax) { + JSONObject inner = new JSONObject(); + if (min != null) { + if (containMin) { + inner.put("gte", min); + } else { + inner.put("gt", min); + } + } + if (max != null) { + if (containMax) { + inner.put("lte", max); + } else { + inner.put("lt", max); + } + } + JSONObject range = new JSONObject(); + range.put(field, inner); + JSONObject json = new JSONObject(); + json.put("range", range); + return json; + } + +} + diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/QueryStringBuilder.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/QueryStringBuilder.java new file mode 100644 index 00000000..8d381e3c --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/es/QueryStringBuilder.java @@ -0,0 +1,98 @@ +package com.jero.common.es; + +/** + * 用于创建 ElasticSearch 的 queryString + * + * @author sunjianlei + */ +public class QueryStringBuilder { + + StringBuilder builder; + + public QueryStringBuilder(String field, String str, boolean not, boolean addQuot) { + builder = this.createBuilder(field, str, not, addQuot); + } + + public QueryStringBuilder(String field, String str, boolean not) { + builder = this.createBuilder(field, str, not, true); + } + + /** + * 创建 StringBuilder + * + * @param field + * @param str + * @param not 是否是不匹配 + * @param addQuot 是否添加双引号 + * @return + */ + public StringBuilder createBuilder(String field, String str, boolean not, boolean addQuot) { + StringBuilder sb = new StringBuilder(field).append(":("); + if (not) { + sb.append(" NOT "); + } + this.addQuotEffect(sb, str, addQuot); + return sb; + } + + public QueryStringBuilder and(String str) { + return this.and(str, true); + } + + public QueryStringBuilder and(String str, boolean addQuot) { + builder.append(" AND "); + this.addQuot(str, addQuot); + return this; + } + + public QueryStringBuilder or(String str) { + return this.or(str, true); + } + + public QueryStringBuilder or(String str, boolean addQuot) { + builder.append(" OR "); + this.addQuot(str, addQuot); + return this; + } + + public QueryStringBuilder not(String str) { + return this.not(str, true); + } + + public QueryStringBuilder not(String str, boolean addQuot) { + builder.append(" NOT "); + this.addQuot(str, addQuot); + return this; + } + + /** + * 添加双引号(模糊查询,不能加双引号) + */ + private QueryStringBuilder addQuot(String str, boolean addQuot) { + return this.addQuotEffect(this.builder, str, addQuot); + } + + /** + * 是否在两边加上双引号 + * @param builder + * @param str + * @param addQuot + * @return + */ + private QueryStringBuilder addQuotEffect(StringBuilder builder, String str, boolean addQuot) { + if (addQuot) { + builder.append('"'); + } + builder.append(str); + if (addQuot) { + builder.append('"'); + } + return this; + } + + @Override + public String toString() { + return builder.append(")").toString(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootException.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootException.java new file mode 100644 index 00000000..0de8f964 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootException.java @@ -0,0 +1,19 @@ +package com.jero.common.exception; + +public class JeroBootException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public JeroBootException(String message){ + super(message); + } + + public JeroBootException(Throwable cause) + { + super(cause); + } + + public JeroBootException(String message,Throwable cause) + { + super(message,cause); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java new file mode 100644 index 00000000..303ba8c1 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/exception/JeroBootExceptionHandler.java @@ -0,0 +1,129 @@ +package com.jero.common.exception; + +import io.lettuce.core.RedisConnectionException; +import org.apache.shiro.authz.AuthorizationException; +import org.apache.shiro.authz.UnauthorizedException; +import com.jero.common.api.vo.Result; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.data.redis.connection.PoolException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.servlet.NoHandlerFoundException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 异常处理器 + * + * @Author scott + * @Date 2019 + */ +@RestControllerAdvice +@Slf4j +public class JeroBootExceptionHandler { + + /** + * 处理自定义异常 + */ + @ExceptionHandler(JeroBootException.class) + public Result handleRRException(JeroBootException e) { + log.error(e.getMessage(), e); + return Result.error(e.getMessage()); + } + + /** + * get方法使用BindException接收 + */ + @ExceptionHandler(BindException.class) + @ResponseBody + public Result handleBindException(BindException e) { + log.error(e.getMessage(), e.getBindingResult().getFieldError().getDefaultMessage()); + return Result.error(e.getBindingResult().getFieldError().getDefaultMessage()); + } + + /** + * post方法使用MethodArgumentNotValidException接收 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseBody + public Result handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { + log.error(e.getMessage(), e.getBindingResult().getFieldError().getDefaultMessage()); + return Result.error(e.getBindingResult().getFieldError().getDefaultMessage()); + } + + @ExceptionHandler(NoHandlerFoundException.class) + public Result handlerNoFoundException(Exception e) { + log.error(e.getMessage(), e); + return Result.error(404, "路径不存在,请检查路径是否正确"); + } + + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException e) { + log.error(e.getMessage(), e); + return Result.error("数据库中已存在该记录"); + } + + @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class}) + public Result handleAuthorizationException(AuthorizationException e) { + log.error(e.getMessage(), e); + return Result.noauth("没有权限,请联系管理员授权"); + } + + @ExceptionHandler(Exception.class) + public Result handleException(Exception e) { + log.error(e.getMessage(), e); + return Result.error("请输入有效内容"); + } + + /** + * @param e + * @return + * @Author 政辉 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public Result HttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { + StringBuffer sb = new StringBuffer(); + sb.append("不支持"); + sb.append(e.getMethod()); + sb.append("请求方法,"); + sb.append("支持以下"); + String[] methods = e.getSupportedMethods(); + if (methods != null) { + for (String str : methods) { + sb.append(str); + sb.append("、"); + } + } + log.error(sb.toString(), e); + //return Result.error("没有权限,请联系管理员授权"); + return Result.error(405, sb.toString()); + } + + /** + * spring默认上传大小100MB 超出大小捕获异常MaxUploadSizeExceededException + */ + @ExceptionHandler(MaxUploadSizeExceededException.class) + public Result handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) { + log.error(e.getMessage(), e); + return Result.error("文件大小超出10MB限制, 请压缩或降低文件质量! "); + } + + @ExceptionHandler(DataIntegrityViolationException.class) + public Result handleDataIntegrityViolationException(DataIntegrityViolationException e) { + log.error(e.getMessage(), e); + return Result.error("字段太长,超出数据库字段的长度"); + } + + @ExceptionHandler(PoolException.class) + public Result handlePoolException(PoolException e) { + log.error(e.getMessage(), e); + return Result.error("Redis 连接异常!"); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/handler/IFillRuleHandler.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/handler/IFillRuleHandler.java new file mode 100644 index 00000000..26bcd5e0 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/handler/IFillRuleHandler.java @@ -0,0 +1,21 @@ +package com.jero.common.handler; + +import com.alibaba.fastjson.JSONObject; + +/** + * 填值规则接口 + * + * @author Yan_东 + * 如需使用填值规则功能,规则实现类必须实现此接口 + */ +public interface IFillRuleHandler { + + /** + * @param params 页面配置固定参数 + * @param formData 动态表单参数 + * @return + */ + public Object execute(JSONObject params, JSONObject formData); + +} + diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java new file mode 100644 index 00000000..fb5c88fc --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/controller/JeroController.java @@ -0,0 +1,144 @@ +package com.jero.common.system.base.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @Description: Controller基类 + * @Author: dangzhenghui@163.com + * @Date: 2019-4-21 8:13 + * @Version: 1.0 + */ +@Slf4j +public class JeroController> { + @Autowired + S service; + + @Value("${jero.path.upload}") + private String upLoadPath; + /** + * 导出excel + * + * @param request + */ + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap()); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + // Step.2 获取导出数据 + List pageList = service.list(queryWrapper); + List exportList = null; + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = pageList.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList()); + } else { + exportList = pageList; + } + + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + mv.addObject(NormalExcelConstants.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(NormalExcelConstants.CLASS, clazz); + //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- + ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + sysUser.getRealname(), title); + exportParams.setImageBasePath(upLoadPath); + //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- + mv.addObject(NormalExcelConstants.PARAMS,exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + return mv; + } + + /** + * 根据权限导出excel,传入导出字段参数 + * + * @param request + */ + protected ModelAndView exportXls(HttpServletRequest request, T object, Class clazz, String title,String exportFields) { + ModelAndView mv = this.exportXls(request,object,clazz,title); + mv.addObject(NormalExcelConstants.EXPORT_FIELDS,exportFields); + return mv; + } + + /** + * 获取对象ID + * + * @return + */ + private String getId(T item) { + try { + return PropertyUtils.getProperty(item, "id").toString(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + protected Result importExcel(HttpServletRequest request, HttpServletResponse response, Class clazz) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List list = ExcelImportUtil.importExcel(file.getInputStream(), clazz, params); + //update-begin-author:taoyan date:20190528 for:批量插入数据 + long start = System.currentTimeMillis(); + service.saveBatch(list); + //400条 saveBatch消耗时间1592毫秒 循环插入消耗时间1947毫秒 + //1200条 saveBatch消耗时间3687毫秒 循环插入消耗时间5212毫秒 + log.info("消耗时间" + (System.currentTimeMillis() - start) + "毫秒"); + //update-end-author:taoyan date:20190528 for:批量插入数据 + return Result.OK("文件导入成功!数据行数:" + list.size()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/entity/JeroEntity.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/entity/JeroEntity.java new file mode 100644 index 00000000..3894782e --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/entity/JeroEntity.java @@ -0,0 +1,52 @@ +package com.jero.common.system.base.entity; + +import java.io.Serializable; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: Entity基类 + * @Author: dangzhenghui@163.com + * @Date: 2019-4-28 + * @Version: 1.1 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class JeroEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "ID") + private java.lang.String id; + /** 创建人 */ + @ApiModelProperty(value = "创建人") + @Excel(name = "创建人", width = 15) + private java.lang.String createBy; + /** 创建时间 */ + @ApiModelProperty(value = "创建时间") + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** 更新人 */ + @ApiModelProperty(value = "更新人") + @Excel(name = "更新人", width = 15) + private java.lang.String updateBy; + /** 更新时间 */ + @ApiModelProperty(value = "更新时间") + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/JeroService.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/JeroService.java new file mode 100644 index 00000000..33c1c6b2 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/JeroService.java @@ -0,0 +1,12 @@ +package com.jero.common.system.base.service; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: Service基类 + * @Author: dangzhenghui@163.com + * @Date: 2019-4-21 8:13 + * @Version: 1.0 + */ +public interface JeroService extends IService { +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/impl/JeroServiceImpl.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/impl/JeroServiceImpl.java new file mode 100644 index 00000000..66191668 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/base/service/impl/JeroServiceImpl.java @@ -0,0 +1,19 @@ +package com.jero.common.system.base.service.impl; + +import com.jero.common.system.base.entity.JeroEntity; +import com.jero.common.system.base.service.JeroService; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; + +/** + * @Description: ServiceImpl基类 + * @Author: dangzhenghui@163.com + * @Date: 2019-4-21 8:13 + * @Version: 1.0 + */ +@Slf4j +public class JeroServiceImpl, T extends JeroEntity> extends ServiceImpl implements JeroService { + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java new file mode 100644 index 00000000..96fa3531 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/MatchTypeEnum.java @@ -0,0 +1,43 @@ +package com.jero.common.system.query; + +import com.jero.common.util.oConvertUtils; + +/** + * 查询链接规则 + * + * @Author Sunjianlei + */ +public enum MatchTypeEnum { + + AND("AND"), + OR("OR"); + + private String value; + + MatchTypeEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + + public static MatchTypeEnum getByValue(Object value) { + if (oConvertUtils.isEmpty(value)) { + return null; + } + return getByValue(value.toString()); + } + + public static MatchTypeEnum getByValue(String value) { + if (oConvertUtils.isEmpty(value)) { + return null; + } + for (MatchTypeEnum val : values()) { + if (val.getValue().toLowerCase().equals(value.toLowerCase())) { + return val; + } + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java new file mode 100644 index 00000000..448449ac --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryCondition.java @@ -0,0 +1,55 @@ +package com.jero.common.system.query; + +import java.io.Serializable; + +public class QueryCondition implements Serializable { + + private static final long serialVersionUID = 4740166316629191651L; + + private String field; + private String type; + private String rule; + private String val; + + public String getField() { + return field; + } + + public void setField(String field) { + this.field = field; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getRule() { + return rule; + } + + public void setRule(String rule) { + this.rule = rule; + } + + public String getVal() { + return val; + } + + public void setVal(String val) { + this.val = val; + } + + @Override + public String toString(){ + StringBuffer sb =new StringBuffer(); + if(field == null || "".equals(field)){ + return ""; + } + sb.append(this.field).append(" ").append(this.rule).append(" ").append(this.type).append(" ").append(this.val); + return sb.toString(); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java new file mode 100644 index 00000000..e1400bd1 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryGenerator.java @@ -0,0 +1,1086 @@ +package com.jero.common.system.query; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.beanutils.PropertyUtils; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.system.util.JeroDataAutorUtils; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.util.CommonUtils; +import com.jero.common.util.DateUtils; +import com.jero.common.util.SqlInjectionUtil; +import com.jero.common.util.oConvertUtils; +import org.springframework.util.NumberUtils; + +import java.beans.PropertyDescriptor; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.net.URLDecoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +@Slf4j +public class QueryGenerator { + public static final String SQL_RULES_COLUMN = "SQL_RULES_COLUMN"; + + private static final String BEGIN = "_begin"; + private static final String END = "_end"; + /** + * 数字类型字段,拼接此后缀 接受多值参数 + */ + private static final String MULTI = "_MultiString"; + private static final String STAR = "*"; + private static final String COMMA = ","; + /** + * 查询 逗号转义符 相当于一个逗号【作废】 + */ + public static final String QUERY_COMMA_ESCAPE = "++"; + private static final String NOT_EQUAL = "!"; + /**页面带有规则值查询,空格作为分隔符*/ + private static final String QUERY_SEPARATE_KEYWORD = " "; + /**高级查询前端传来的参数名*/ + private static final String SUPER_QUERY_PARAMS = "superQueryParams"; + /** 高级查询前端传来的拼接方式参数名 */ + private static final String SUPER_QUERY_MATCH_TYPE = "superQueryMatchType"; + /** 单引号 */ + public static final String SQL_SQ = "'"; + /**排序列*/ + private static final String ORDER_COLUMN = "column"; + /**排序方式*/ + private static final String ORDER_TYPE = "order"; + private static final String ORDER_TYPE_ASC = "ASC"; + + /**mysql 模糊查询之特殊字符下划线 (_、\)*/ + public static final String LIKE_MYSQL_SPECIAL_STRS = "_,%"; + + /**时间格式化 */ + private static final ThreadLocal local = new ThreadLocal(); + private static SimpleDateFormat getTime(){ + SimpleDateFormat time = local.get(); + if(time == null){ + time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + local.set(time); + } + return time; + } + + /** + * 获取查询条件构造器QueryWrapper实例 通用查询条件已被封装完成 + * @param searchObj 查询实体 + * @param parameterMap request.getParameterMap() + * @return QueryWrapper实例 + */ + public static QueryWrapper initQueryWrapper(T searchObj,Map parameterMap){ + long start = System.currentTimeMillis(); + QueryWrapper queryWrapper = new QueryWrapper(); + installMplus(queryWrapper, searchObj, parameterMap); + log.debug("---查询条件构造器初始化完成,耗时:"+(System.currentTimeMillis()-start)+"毫秒----"); + return queryWrapper; + } + + /** + * 组装Mybatis Plus 查询条件 + *

使用此方法 需要有如下几点注意: + *
1.使用QueryWrapper 而非LambdaQueryWrapper; + *
2.实例化QueryWrapper时不可将实体传入参数 + *
错误示例:如QueryWrapper queryWrapper = new QueryWrapper(jeroDemo); + *
正确示例:QueryWrapper queryWrapper = new QueryWrapper(); + *
3.也可以不使用这个方法直接调用 {@link #initQueryWrapper}直接获取实例 + */ + public static void installMplus(QueryWrapper queryWrapper,Object searchObj,Map parameterMap) { + + /* + * 注意:权限查询由前端配置数据规则 当一个人有多个所属部门时候 可以在规则配置包含条件 orgCode 包含 #{sys_org_code} + 但是不支持在自定义SQL中写orgCode in #{sys_org_code} + 当一个人只有一个部门 就直接配置等于条件: orgCode 等于 #{sys_org_code} 或者配置自定义SQL: orgCode = '#{sys_org_code}' + */ + + //区间条件组装 模糊查询 高级查询组装 简单排序 权限查询 + PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(searchObj); + Map ruleMap = getRuleMap(); + + //权限规则自定义SQL表达式 + for (String c : ruleMap.keySet()) { + if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ + queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + } + } + + String name, type, column; + // update-begin--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- + //定义实体字段和数据库字段名称的映射 高级查询中 只能获取实体字段 如果设置TableField注解 那么查询条件会出问题 + Map fieldColumnMap = new HashMap(); + for (int i = 0; i < origDescriptors.length; i++) { + //aliasName = origDescriptors[i].getName(); mybatis 不存在实体属性 不用处理别名的情况 + name = origDescriptors[i].getName(); + type = origDescriptors[i].getPropertyType().toString(); + try { + if (judgedIsUselessField(name)|| !PropertyUtils.isReadable(searchObj, name)) { + continue; + } + + Object value = PropertyUtils.getSimpleProperty(searchObj, name); + column = getTableFieldName(searchObj.getClass(), name); + if(column==null){ + //column为null只有一种情况 那就是 添加了注解@TableField(exist = false) 后续都不用处理了 + continue; + } + fieldColumnMap.put(name,column); + //数据权限查询 + if(ruleMap.containsKey(name)) { + addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); + } + //区间查询 + doIntervalQuery(queryWrapper, parameterMap, type, name, column); + //判断单值 参数带不同标识字符串 走不同的查询 + //TODO 这种前后带逗号的支持分割后模糊查询需要否 使多选字段的查询生效 + if (null != value && value.toString().startsWith(COMMA) && value.toString().endsWith(COMMA)) { + String multiLikeval = value.toString().replace(",,", COMMA); + String[] vals = multiLikeval.substring(1, multiLikeval.length()).split(COMMA); + final String field = oConvertUtils.camelToUnderline(column); + if(vals.length>1) { + queryWrapper.and(j -> { + j = j.like(field,vals[0]); + for (int k=1;k j.like(field,vals[0])); + } + }else { + //根据参数值带什么关键字符串判断走什么类型的查询 + QueryRuleEnum rule = convert2Rule(value); + value = replaceValue(rule,value); + // add -begin 添加判断为字符串时设为全模糊查询 + if( (rule==null || QueryRuleEnum.EQ.equals(rule)) && "class java.lang.String".equals(type)) { + //可以设置左右模糊或全模糊,因人而异 + rule = QueryRuleEnum.LIKE; + } + // add -end 添加判断为字符串时设为全模糊查询 + addEasyQuery(queryWrapper, column, rule, value); + } + + } catch (Exception e) { + log.error(e.getMessage(), e); + } + } + // 排序逻辑 处理 + doMultiFieldsOrder(queryWrapper, parameterMap); + + //高级查询 + doSuperQuery(queryWrapper, parameterMap, fieldColumnMap); + // update-end--Author:taoyan Date:20200923 for:issues/1671 如果字段加注解了@TableField(exist = false),不走DB查询------- + + } + + + /** + * 区间查询 + * @param queryWrapper query对象 + * @param parameterMap 参数map + * @param type 字段类型 + * @param filedName 字段名称 + * @param columnName 列名称 + */ + private static void doIntervalQuery(QueryWrapper queryWrapper, Map parameterMap, String type, String filedName, String columnName) throws ParseException { + // 添加 判断是否有区间值 + String endValue = null,beginValue = null; + if (parameterMap != null && parameterMap.containsKey(filedName + BEGIN)) { + beginValue = parameterMap.get(filedName + BEGIN)[0].trim(); + addQueryByRule(queryWrapper, columnName, type, beginValue, QueryRuleEnum.GE); + + } + if (parameterMap != null && parameterMap.containsKey(filedName + END)) { + endValue = parameterMap.get(filedName + END)[0].trim(); + addQueryByRule(queryWrapper, columnName, type, endValue, QueryRuleEnum.LE); + } + //多值查询 + if (parameterMap != null && parameterMap.containsKey(filedName + MULTI)) { + endValue = parameterMap.get(filedName + MULTI)[0].trim(); + addQueryByRule(queryWrapper, columnName.replace(MULTI,""), type, endValue, QueryRuleEnum.IN); + } + } + + //多字段排序 TODO 需要修改前端 + public static void doMultiFieldsOrder(QueryWrapper queryWrapper,Map parameterMap) { + String column=null,order=null; + if(parameterMap!=null&& parameterMap.containsKey(ORDER_COLUMN)) { + column = parameterMap.get(ORDER_COLUMN)[0]; + } + if(parameterMap!=null&& parameterMap.containsKey(ORDER_TYPE)) { + order = parameterMap.get(ORDER_TYPE)[0]; + } + log.debug("排序规则>>列:"+column+",排序方式:"+order); + if (oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + //字典字段,去掉字典翻译文本后缀 + if(column.endsWith(CommonConstant.DICT_TEXT_SUFFIX)) { + column = column.substring(0, column.lastIndexOf(CommonConstant.DICT_TEXT_SUFFIX)); + } + //SQL注入check + SqlInjectionUtil.filterContent(column); + + if (order.toUpperCase().indexOf(ORDER_TYPE_ASC)>=0) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + } else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + } + + /** + * 高级查询 + * @param queryWrapper 查询对象 + * @param parameterMap 参数对象 + * @param fieldColumnMap 实体字段和数据库列对应的map + */ + public static void doSuperQuery(QueryWrapper queryWrapper,Map parameterMap, Map fieldColumnMap) { + if(parameterMap!=null&& parameterMap.containsKey(SUPER_QUERY_PARAMS)){ + String superQueryParams = parameterMap.get(SUPER_QUERY_PARAMS)[0]; + String superQueryMatchType = parameterMap.get(SUPER_QUERY_MATCH_TYPE) != null ? parameterMap.get(SUPER_QUERY_MATCH_TYPE)[0] : MatchTypeEnum.AND.getValue(); + MatchTypeEnum matchType = MatchTypeEnum.getByValue(superQueryMatchType); + // update-begin--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- + try { + superQueryParams = URLDecoder.decode(superQueryParams, "UTF-8"); + List conditions = JSON.parseArray(superQueryParams, QueryCondition.class); + if (conditions == null || conditions.size() == 0) { + return; + } + log.info("---高级查询参数-->" + conditions.toString()); + queryWrapper.and(andWrapper -> { + for (int i = 0; i < conditions.size(); i++) { + QueryCondition rule = conditions.get(i); + if (oConvertUtils.isNotEmpty(rule.getField()) + && oConvertUtils.isNotEmpty(rule.getRule()) + && oConvertUtils.isNotEmpty(rule.getVal())) { + + log.debug("SuperQuery ==> " + rule.toString()); + + //update-begin-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 + Object queryValue = rule.getVal(); + if("date".equals(rule.getType())){ + queryValue = DateUtils.str2Date(rule.getVal(),DateUtils.date_sdf.get()); + }else if("datetime".equals(rule.getType())){ + queryValue = DateUtils.str2Date(rule.getVal(), DateUtils.datetimeFormat.get()); + } + addEasyQuery(andWrapper, fieldColumnMap.get(rule.getField()), QueryRuleEnum.getByValue(rule.getRule()), queryValue); + //update-end-author:taoyan date:20201228 for: 【高级查询】 oracle 日期等于查询报错 + + // 如果拼接方式是OR,就拼接OR + if (MatchTypeEnum.OR == matchType && i < (conditions.size() - 1)) { + andWrapper.or(); + } + } + } + //return andWrapper; + }); + } catch (UnsupportedEncodingException e) { + log.error("--高级查询参数转码失败:" + superQueryParams, e); + } catch (Exception e) { + log.error("--高级查询拼接失败:" + e.getMessage()); + e.printStackTrace(); + } + // update-end--Author:sunjianlei Date:20200325 for:高级查询的条件要用括号括起来,防止和用户的其他条件冲突 ------- + } + //log.info(" superQuery getCustomSqlSegment: "+ queryWrapper.getCustomSqlSegment()); + } + /** + * 根据所传的值 转化成对应的比较方式 + * 支持><= like in ! + * @param value + * @return + */ + private static QueryRuleEnum convert2Rule(Object value) { + // 避免空数据 + if (value == null) { + return null; + } + String val = (value + "").toString().trim(); + if (val.length() == 0) { + return null; + } + QueryRuleEnum rule =null; + + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + //TODO 此处规则,只适用于 le lt ge gt + // step 2 .>= =< + if (rule == null && val.length() >= 3) { + if(QUERY_SEPARATE_KEYWORD.equals(val.substring(2, 3))){ + rule = QueryRuleEnum.getByValue(val.substring(0, 2)); + } + } + // step 1 .> < + if (rule == null && val.length() >= 2) { + if(QUERY_SEPARATE_KEYWORD.equals(val.substring(1, 2))){ + rule = QueryRuleEnum.getByValue(val.substring(0, 1)); + } + } + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + + // step 3 like + if (rule == null && val.contains(STAR)) { + if (val.startsWith(STAR) && val.endsWith(STAR)) { + rule = QueryRuleEnum.LIKE; + } else if (val.startsWith(STAR)) { + rule = QueryRuleEnum.LEFT_LIKE; + } else if(val.endsWith(STAR)){ + rule = QueryRuleEnum.RIGHT_LIKE; + } + } + + // step 4 in + if (rule == null && val.contains(COMMA)) { + //TODO in 查询这里应该有个bug 如果一字段本身就是多选 此时用in查询 未必能查询出来 + rule = QueryRuleEnum.IN; + } + // step 5 != + if(rule == null && val.startsWith(NOT_EQUAL)){ + rule = QueryRuleEnum.NE; + } + // step 6 xx+xx+xx 这种情况适用于如果想要用逗号作精确查询 但是系统默认逗号走in 所以可以用++替换【此逻辑作废】 + if(rule == null && val.indexOf(QUERY_COMMA_ESCAPE)>0){ + rule = QueryRuleEnum.EQ_WITH_ADD; + } + + //update-begin--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + //特殊处理:Oracle的表达式to_date('xxx','yyyy-MM-dd')含有逗号,会被识别为in查询,转为等于查询 + if(rule == QueryRuleEnum.IN && val.indexOf("yyyy-MM-dd")>=0 && val.indexOf("to_date")>=0){ + rule = QueryRuleEnum.EQ; + } + //update-end--Author:taoyan Date:20201229 for:initQueryWrapper组装sql查询条件错误 #284--------------------- + + return rule != null ? rule : QueryRuleEnum.EQ; + } + + /** + * 替换掉关键字字符 + * + * @param rule + * @param value + * @return + */ + private static Object replaceValue(QueryRuleEnum rule, Object value) { + if (rule == null) { + return null; + } + if (! (value instanceof String)){ + return value; + } + String val = (value + "").toString().trim(); + if (rule == QueryRuleEnum.LIKE) { + value = val.substring(1, val.length() - 1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.LEFT_LIKE || rule == QueryRuleEnum.NE) { + value = val.substring(1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.RIGHT_LIKE) { + value = val.substring(0, val.length() - 1); + //mysql 模糊查询之特殊字符下划线 (_、\) + value = specialStrConvert(value.toString()); + } else if (rule == QueryRuleEnum.IN) { + value = val.split(","); + } else if (rule == QueryRuleEnum.EQ_WITH_ADD) { + value = val.replaceAll("\\+\\+", COMMA); + }else { + //update-begin--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + if(val.startsWith(rule.getValue())){ + //TODO 此处逻辑应该注释掉-> 如果查询内容中带有查询匹配规则符号,就会被截取的(比如:>=您好) + value = val.replaceFirst(rule.getValue(),""); + }else if(val.startsWith(rule.getCondition()+QUERY_SEPARATE_KEYWORD)){ + value = val.replaceFirst(rule.getCondition()+QUERY_SEPARATE_KEYWORD,"").trim(); + } + //update-end--Author:scott Date:20190724 for:initQueryWrapper组装sql查询条件错误 #284------------------- + } + return value; + } + + private static void addQueryByRule(QueryWrapper queryWrapper,String name,String type,String value,QueryRuleEnum rule) throws ParseException { + if(oConvertUtils.isNotEmpty(value)) { + Object temp; + // 针对数字类型字段,多值查询 + if(value.indexOf(COMMA)!=-1){ + temp = value; + addEasyQuery(queryWrapper, name, rule, temp); + return; + } + + switch (type) { + case "class java.lang.Integer": + temp = Integer.parseInt(value); + break; + case "class java.math.BigDecimal": + temp = new BigDecimal(value); + break; + case "class java.lang.Short": + temp = Short.parseShort(value); + break; + case "class java.lang.Long": + temp = Long.parseLong(value); + break; + case "class java.lang.Float": + temp = Float.parseFloat(value); + break; + case "class java.lang.Double": + temp = Double.parseDouble(value); + break; + case "class java.util.Date": + temp = getDateQueryByRule(value, rule); + break; + default: + temp = value; + break; + } + addEasyQuery(queryWrapper, name, rule, temp); + } + } + + /** + * 获取日期类型的值 + * @param value + * @param rule + * @return + * @throws ParseException + */ + private static Date getDateQueryByRule(String value,QueryRuleEnum rule) throws ParseException { + Date date = null; + if(value.length()==10) { + if(rule==QueryRuleEnum.GE) { + //比较大于 + date = getTime().parse(value + " 00:00:00"); + }else if(rule==QueryRuleEnum.LE) { + //比较小于 + date = getTime().parse(value + " 23:59:59"); + } + //TODO 日期类型比较特殊 可能oracle下不一定好使 + } + if(date==null) { + date = getTime().parse(value); + } + return date; + } + + /** + * 根据规则走不同的查询 + * @param queryWrapper QueryWrapper + * @param name 字段名字 + * @param rule 查询规则 + * @param value 查询条件值 + */ + private static void addEasyQuery(QueryWrapper queryWrapper, String name, QueryRuleEnum rule, Object value) { + if (value == null || rule == null || oConvertUtils.isEmpty(value)) { + return; + } + name = oConvertUtils.camelToUnderline(name); + log.info("--查询规则-->"+name+" "+rule.getValue()+" "+value); + switch (rule) { + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + case EQ_WITH_ADD: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + if(value instanceof String) { + queryWrapper.in(name, (Object[])value.toString().split(",")); + }else if(value instanceof String[]) { + queryWrapper.in(name, (Object[]) value); + } + //update-begin-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + else if(value.getClass().isArray()) { + queryWrapper.in(name, (Object[])value); + }else { + queryWrapper.in(name, value); + } + //update-end-author:taoyan date:20200909 for:【bug】in 类型多值查询 不适配postgresql #1671 + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + default: + log.info("--查询规则未匹配到---"); + break; + } + } + /** + * + * @param name + * @return + */ + private static boolean judgedIsUselessField(String name) { + return "class".equals(name) || "ids".equals(name) + || "page".equals(name) || "rows".equals(name) + || "sort".equals(name) || "order".equals(name); + } + + + + /** + * 获取请求对应的数据权限规则 + * @return + */ + public static Map getRuleMap() { + Map ruleMap = new HashMap(); + List list = JeroDataAutorUtils.loadDataSearchConditon(); + if(list != null&&list.size()>0){ + if(list.get(0)==null){ + return ruleMap; + } + for (SysPermissionDataRuleModel rule : list) { + String column = rule.getRuleColumn(); + if(QueryRuleEnum.SQL_RULES.getValue().equals(rule.getRuleConditions())) { + column = SQL_RULES_COLUMN+rule.getId(); + } + ruleMap.put(column, rule); + } + } + return ruleMap; + } + + /** + * 获取请求对应的数据权限规则 + * @return + */ + public static Map getRuleMap(List list) { + Map ruleMap = new HashMap(); + if(list==null){ + list = JeroDataAutorUtils.loadDataSearchConditon(); + } + if(list != null&&list.size()>0){ + if(list.get(0)==null){ + return ruleMap; + } + for (SysPermissionDataRuleModel rule : list) { + String column = rule.getRuleColumn(); + if(QueryRuleEnum.SQL_RULES.getValue().equals(rule.getRuleConditions())) { + column = SQL_RULES_COLUMN+rule.getId(); + } + ruleMap.put(column, rule); + } + } + return ruleMap; + } + + private static void addRuleToQueryWrapper(SysPermissionDataRuleModel dataRule, String name, Class propertyType, QueryWrapper queryWrapper) { + QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); + if(rule.equals(QueryRuleEnum.IN) && ! propertyType.equals(String.class)) { + String[] values = dataRule.getRuleValue().split(","); + Object[] objs = new Object[values.length]; + for (int i = 0; i < values.length; i++) { + objs[i] = NumberUtils.parseNumber(values[i], propertyType); + } + addEasyQuery(queryWrapper, name, rule, objs); + }else { + if (propertyType.equals(String.class)) { + addEasyQuery(queryWrapper, name, rule, converRuleValue(dataRule.getRuleValue())); + }else if (propertyType.equals(Date.class)) { + String dateStr =converRuleValue(dataRule.getRuleValue()); + if(dateStr.length()==10){ + addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.date_sdf.get())); + }else{ + addEasyQuery(queryWrapper, name, rule, DateUtils.str2Date(dateStr,DateUtils.datetimeFormat.get())); + } + }else { + addEasyQuery(queryWrapper, name, rule, NumberUtils.parseNumber(dataRule.getRuleValue(), propertyType)); + } + } + } + + public static String converRuleValue(String ruleValue) { + String value = JwtUtil.getUserSystemData(ruleValue,null); + return value!= null ? value : ruleValue; + } + + /** + * @author: scott + * @Description: 去掉值前后单引号 + * @date: 2020/3/19 21:26 + * @param ruleValue: + * @Return: java.lang.String + */ + public static String trimSingleQuote(String ruleValue) { + if (oConvertUtils.isEmpty(ruleValue)) { + return ""; + } + if (ruleValue.startsWith(QueryGenerator.SQL_SQ)) { + ruleValue = ruleValue.substring(1); + } + if (ruleValue.endsWith(QueryGenerator.SQL_SQ)) { + ruleValue = ruleValue.substring(0, ruleValue.length() - 1); + } + return ruleValue; + } + + public static String getSqlRuleValue(String sqlRule){ + try { + Set varParams = getSqlRuleParams(sqlRule); + for(String var:varParams){ + String tempValue = converRuleValue(var); + sqlRule = sqlRule.replace("#{"+var+"}",tempValue); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return sqlRule; + } + + /** + * 获取sql中的#{key} 这个key组成的set + */ + public static Set getSqlRuleParams(String sql) { + if(oConvertUtils.isEmpty(sql)){ + return null; + } + Set varParams = new HashSet(); + String regex = "\\#\\{\\w+\\}"; + + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(sql); + while(m.find()){ + String var = m.group(); + varParams.add(var.substring(var.indexOf("{")+1,var.indexOf("}"))); + } + return varParams; + } + + /** + * 获取查询条件 + * @param field + * @param alias + * @param value + * @param isString + * @return + */ + public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString) { + return getSingleQueryConditionSql(field, alias, value, isString,null); + } + + /** + * 报表获取查询条件 支持多数据源 + * @param field + * @param alias + * @param value + * @param isString + * @param dataBaseType + * @return + */ + public static String getSingleQueryConditionSql(String field,String alias,Object value,boolean isString, String dataBaseType) { + if (value == null) { + return ""; + } + field = alias+oConvertUtils.camelToUnderline(field); + QueryRuleEnum rule = QueryGenerator.convert2Rule(value); + return getSingleSqlByRule(rule, field, value, isString, dataBaseType); + } + + /** + * 获取单个查询条件的值 + * @param rule + * @param field + * @param value + * @param isString + * @param dataBaseType + * @return + */ + public static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString, String dataBaseType) { + String res = ""; + switch (rule) { + case GT: + res =field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case GE: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case LT: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case LE: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case EQ: + res = field+rule.getValue()+getFieldConditionValue(value, isString, dataBaseType); + break; + case EQ_WITH_ADD: + res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + break; + case NE: + res = field+" <> "+getFieldConditionValue(value, isString, dataBaseType); + break; + case IN: + res = field + " in "+getInConditionValue(value, isString); + break; + case LIKE: + res = field + " like "+getLikeConditionValue(value); + break; + case LEFT_LIKE: + res = field + " like "+getLikeConditionValue(value); + break; + case RIGHT_LIKE: + res = field + " like "+getLikeConditionValue(value); + break; + default: + res = field+" = "+getFieldConditionValue(value, isString, dataBaseType); + break; + } + return res; + } + + + /** + * 获取单个查询条件的值 + * @param rule + * @param field + * @param value + * @param isString + * @return + */ + public static String getSingleSqlByRule(QueryRuleEnum rule,String field,Object value,boolean isString) { + return getSingleSqlByRule(rule, field, value, isString, null); + } + + /** + * 获取查询条件的值 + * @param value + * @param isString + * @param dataBaseType + * @return + */ + private static String getFieldConditionValue(Object value,boolean isString, String dataBaseType) { + String str = value.toString().trim(); + if(str.startsWith("!")) { + str = str.substring(1); + }else if(str.startsWith(">=")) { + str = str.substring(2); + }else if(str.startsWith("<=")) { + str = str.substring(2); + }else if(str.startsWith(">")) { + str = str.substring(1); + }else if(str.startsWith("<")) { + str = str.substring(1); + }else if(str.indexOf(QUERY_COMMA_ESCAPE)>0) { + str = str.replaceAll("\\+\\+", COMMA); + } + if(dataBaseType==null){ + dataBaseType = getDbType(); + } + if(isString) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType)){ + return " N'"+str+"' "; + }else{ + return " '"+str+"' "; + } + }else { + // 如果不是字符串 有一种特殊情况 popup调用都走这个逻辑 参数传递的可能是“‘admin’”这种格式的 + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(dataBaseType) && str.endsWith("'") && str.startsWith("'")){ + return " N"+str; + } + return value.toString(); + } + } + + private static String getInConditionValue(Object value,boolean isString) { + if(isString) { + String temp[] = value.toString().split(","); + String res=""; + for (String string : temp) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + res+=",N'"+string+"'"; + }else{ + res+=",'"+string+"'"; + } + } + return "("+res.substring(1)+")"; + }else { + return "("+value.toString()+")"; + } + } + + private static String getLikeConditionValue(Object value) { + String str = value.toString().trim(); + if(str.startsWith("*") && str.endsWith("*")) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + return "N'%"+str.substring(1,str.length()-1)+"%'"; + }else{ + return "'%"+str.substring(1,str.length()-1)+"%'"; + } + }else if(str.startsWith("*")) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + return "N'%"+str.substring(1)+"'"; + }else{ + return "'%"+str.substring(1)+"'"; + } + }else if(str.endsWith("*")) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + return "N'"+str.substring(0,str.length()-1)+"%'"; + }else{ + return "'"+str.substring(0,str.length()-1)+"%'"; + } + }else { + if(str.indexOf("%")>=0) { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + if(str.startsWith("'") && str.endsWith("'")){ + return "N"+str; + }else{ + return "N"+"'"+str+"'"; + } + }else{ + if(str.startsWith("'") && str.endsWith("'")){ + return str; + }else{ + return "'"+str+"'"; + } + } + }else { + if(DataBaseConstant.DB_TYPE_SQLSERVER.equals(getDbType())){ + return "N'%"+str+"%'"; + }else{ + return "'%"+str+"%'"; + } + } + } + } + + /** + * 根据权限相关配置生成相关的SQL 语句 + * @param clazz + * @return + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static String installAuthJdbc(Class clazz) { + StringBuffer sb = new StringBuffer(); + //权限查询 + Map ruleMap = getRuleMap(); + PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); + String sql_and = " and "; + for (String c : ruleMap.keySet()) { + if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ + sb.append(sql_and+getSqlRuleValue(ruleMap.get(c).getRuleValue())); + } + } + String name, column; + for (int i = 0; i < origDescriptors.length; i++) { + name = origDescriptors[i].getName(); + if (judgedIsUselessField(name)) { + continue; + } + if(ruleMap.containsKey(name)) { + column = getTableFieldName(clazz, name); + if(column==null){ + continue; + } + SysPermissionDataRuleModel dataRule = ruleMap.get(name); + QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); + Class propType = origDescriptors[i].getPropertyType(); + boolean isString = propType.equals(String.class); + Object value; + if(isString) { + value = converRuleValue(dataRule.getRuleValue()); + }else { + value = NumberUtils.parseNumber(dataRule.getRuleValue(),propType); + } + String filedSql = getSingleSqlByRule(rule, oConvertUtils.camelToUnderline(column), value,isString); + sb.append(sql_and+filedSql); + } + } + log.info("query auth sql is:"+sb.toString()); + return sb.toString(); + } + + /** + * 根据权限相关配置 组装mp需要的权限 + * @param queryWrapper + * @param clazz + * @return + */ + public static void installAuthMplus(QueryWrapper queryWrapper,Class clazz) { + //权限查询 + Map ruleMap = getRuleMap(); + PropertyDescriptor origDescriptors[] = PropertyUtils.getPropertyDescriptors(clazz); + for (String c : ruleMap.keySet()) { + if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ + queryWrapper.and(i ->i.apply(getSqlRuleValue(ruleMap.get(c).getRuleValue()))); + } + } + String name, column; + for (int i = 0; i < origDescriptors.length; i++) { + name = origDescriptors[i].getName(); + if (judgedIsUselessField(name)) { + continue; + } + column = getTableFieldName(clazz, name); + if(column==null){ + continue; + } + if(ruleMap.containsKey(name)) { + addRuleToQueryWrapper(ruleMap.get(name), column, origDescriptors[i].getPropertyType(), queryWrapper); + } + } + } + + /** + * 转换sql中的系统变量 + * @param sql + * @return + */ + public static String convertSystemVariables(String sql){ + return getSqlRuleValue(sql); + } + + /** + * 获取所有配置的权限 返回sql字符串 不受字段限制 配置什么就拿到什么 + * @return + */ + public static String getAllConfigAuth() { + StringBuffer sb = new StringBuffer(); + //权限查询 + Map ruleMap = getRuleMap(); + String sql_and = " and "; + for (String c : ruleMap.keySet()) { + SysPermissionDataRuleModel dataRule = ruleMap.get(c); + String ruleValue = dataRule.getRuleValue(); + if(oConvertUtils.isEmpty(ruleValue)){ + continue; + } + if(oConvertUtils.isNotEmpty(c) && c.startsWith(SQL_RULES_COLUMN)){ + sb.append(sql_and+getSqlRuleValue(ruleValue)); + }else{ + boolean isString = false; + ruleValue = ruleValue.trim(); + if(ruleValue.startsWith("'") && ruleValue.endsWith("'")){ + isString = true; + ruleValue = ruleValue.substring(1,ruleValue.length()-1); + } + QueryRuleEnum rule = QueryRuleEnum.getByValue(dataRule.getRuleConditions()); + String value = converRuleValue(ruleValue); + String filedSql = getSingleSqlByRule(rule, c, value,isString); + sb.append(sql_and+filedSql); + } + } + log.info("query auth sql is = "+sb.toString()); + return sb.toString(); + } + + + + /** 当前系统数据库类型 */ + private static String DB_TYPE; + /** + * 获取系统数据库类型 + */ + private static String getDbType(){ + return CommonUtils.getDatabaseType(); + } + + + /** + * 获取class的 包括父类的 + * @param clazz + * @return + */ + private static List getClassFields(Class clazz) { + List list = new ArrayList(); + Field[] fields; + do{ + fields = clazz.getDeclaredFields(); + for(int i = 0;i clazz, String name) { + try { + //如果字段加注解了@TableField(exist = false),不走DB查询 + Field field = null; + try { + field = clazz.getDeclaredField(name); + } catch (NoSuchFieldException e) { + //e.printStackTrace(); + } + + //如果为空,则去父类查找字段 + if (field == null) { + List allFields = getClassFields(clazz); + List searchFields = allFields.stream().filter(a -> a.getName().equals(name)).collect(Collectors.toList()); + if(searchFields!=null && searchFields.size()>0){ + field = searchFields.get(0); + } + } + + if (field != null) { + TableField tableField = field.getAnnotation(TableField.class); + if (tableField != null){ + if(tableField.exist() == false){ + //如果设置了TableField false 这个字段不需要处理 + return null; + }else{ + String column = tableField.value(); + //如果设置了TableField value 这个字段是实体字段 + if(!"".equals(column)){ + return column; + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return name; + } + + /** + * mysql 模糊查询之特殊字符下划线 (_、\) + * + * @param value: + * @Return: java.lang.String + */ + private static String specialStrConvert(String value) { + if (DataBaseConstant.DB_TYPE_MYSQL.equals(getDbType())) { + String[] special_str = QueryGenerator.LIKE_MYSQL_SPECIAL_STRS.split(","); + for (String str : special_str) { + if (value.indexOf(str) !=-1) { + value = value.replace(str, "\\" + str); + } + } + } + return value; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryRuleEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryRuleEnum.java new file mode 100644 index 00000000..bd839137 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/query/QueryRuleEnum.java @@ -0,0 +1,73 @@ +package com.jero.common.system.query; + +import com.jero.common.util.oConvertUtils; + +/** + * Query 规则 常量 + * @Author Scott + * @Date 2019年02月14日 + */ +public enum QueryRuleEnum { + + GT(">","gt","大于"), + GE(">=","ge","大于等于"), + LT("<","lt","小于"), + LE("<=","le","小于等于"), + EQ("=","eq","等于"), + NE("!=","ne","不等于"), + IN("IN","in","包含"), + LIKE("LIKE","like","全模糊"), + LEFT_LIKE("LEFT_LIKE","left_like","左模糊"), + RIGHT_LIKE("RIGHT_LIKE","right_like","右模糊"), + EQ_WITH_ADD("EQWITHADD","eq_with_add","带加号等于"), + LIKE_WITH_AND("LIKEWITHAND","like_with_and","多词模糊匹配————暂时未用上"), + SQL_RULES("USE_SQL_RULES","ext","自定义SQL片段"); + + private String value; + + private String condition; + + private String msg; + + QueryRuleEnum(String value, String condition, String msg){ + this.value = value; + this.condition = condition; + this.msg = msg; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public String getCondition() { + return condition; + } + + public void setCondition(String condition) { + this.condition = condition; + } + + public static QueryRuleEnum getByValue(String value){ + if(oConvertUtils.isEmpty(value)) { + return null; + } + for(QueryRuleEnum val :values()){ + if (val.getValue().equals(value) || val.getCondition().equals(value)){ + return val; + } + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java new file mode 100644 index 00000000..bdec01ca --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JeroDataAutorUtils.java @@ -0,0 +1,104 @@ +package com.jero.common.system.util; + +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.common.util.SpringContextUtils; +import org.springframework.util.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * @ClassName: JeroDataAutorUtils + * @Description: 数据权限查询规则容器工具类 + * @Author: 张代浩 + * @Date: 2012-12-15 下午11:27:39 + * + */ +public class JeroDataAutorUtils { + + public static final String MENU_DATA_AUTHOR_RULES = "MENU_DATA_AUTHOR_RULES"; + + public static final String MENU_DATA_AUTHOR_RULE_SQL = "MENU_DATA_AUTHOR_RULE_SQL"; + + public static final String SYS_USER_INFO = "SYS_USER_INFO"; + + /** + * 往链接请求里面,传入数据查询条件 + * + * @param request + * @param dataRules + */ + public static synchronized void installDataSearchConditon(HttpServletRequest request, List dataRules) { + @SuppressWarnings("unchecked") + List list = (List)loadDataSearchConditon();// 1.先从request获取MENU_DATA_AUTHOR_RULES,如果存则获取到LIST + if (list==null) { + // 2.如果不存在,则new一个list + list = new ArrayList(); + } + for (SysPermissionDataRuleModel tsDataRule : dataRules) { + list.add(tsDataRule); + } + request.setAttribute(MENU_DATA_AUTHOR_RULES, list); // 3.往list里面增量存指 + } + + /** + * 获取请求对应的数据权限规则 + * + * @return + */ + @SuppressWarnings("unchecked") + public static synchronized List loadDataSearchConditon() { + return (List) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULES); + + } + + /** + * 获取请求对应的数据权限SQL + * + * @return + */ + public static synchronized String loadDataSearchConditonSQLString() { + return (String) SpringContextUtils.getHttpServletRequest().getAttribute(MENU_DATA_AUTHOR_RULE_SQL); + } + + /** + * 往链接请求里面,传入数据查询条件 + * + * @param request + * @param sql + */ + public static synchronized void installDataSearchConditon(HttpServletRequest request, String sql) { + String ruleSql = (String)loadDataSearchConditonSQLString(); + if (!StringUtils.hasText(ruleSql)) { + request.setAttribute(MENU_DATA_AUTHOR_RULE_SQL,sql); + } + } + + /** + * 将用户信息存到request + * @param request + * @param userinfo + */ + public static synchronized void installUserInfo(HttpServletRequest request, SysUserCacheInfo userinfo) { + request.setAttribute(SYS_USER_INFO, userinfo); + } + + /** + * 将用户信息存到request + * @param userinfo + */ + public static synchronized void installUserInfo(SysUserCacheInfo userinfo) { + SpringContextUtils.getHttpServletRequest().setAttribute(SYS_USER_INFO, userinfo); + } + + /** + * 从request获取用户信息 + * @return + */ + public static synchronized SysUserCacheInfo loadUserInfo() { + return (SysUserCacheInfo) SpringContextUtils.getHttpServletRequest().getAttribute(SYS_USER_INFO); + + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java new file mode 100644 index 00000000..56c2952d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/util/JwtUtil.java @@ -0,0 +1,208 @@ +package com.jero.common.system.util; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.google.common.base.Joiner; + +import java.util.Date; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import org.apache.shiro.SecurityUtils; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.common.util.DateUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; + +/** + * @Author Scott + * @Date 2018-07-12 14:23 + * @Desc JWT工具类 + **/ +public class JwtUtil { + + // Token过期时间30分钟(用户登录过期时间是此时间的两倍,以token在reids缓存时间为准) + public static final long EXPIRE_TIME = 30 * 60 * 1000; + + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param secret 用户的密码 + * @return 是否正确 + */ + public static boolean verify(String token, String username, String secret) { + try { + // 根据密码生成JWT效验器 + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build(); + // 效验TOKEN + DecodedJWT jwt = verifier.verify(token); + return true; + } catch (Exception exception) { + return false; + } + } + + /** + * 获得token中的信息无需secret解密也能获得 + * + * @return token中包含的用户名 + */ + public static String getUsername(String token) { + try { + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim("username").asString(); + } catch (JWTDecodeException e) { + return null; + } + } + + /** + * 生成签名,5min后过期 + * + * @param username 用户名 + * @param secret 用户的密码 + * @return 加密的token + */ + public static String sign(String username, String secret) { + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + // 附带username信息 + return JWT.create().withClaim("username", username).withExpiresAt(date).sign(algorithm); + + } + + /** + * 根据request中的token获取用户账号 + * + * @param request + * @return + * @throws JeroBootException + */ + public static String getUserNameByToken(HttpServletRequest request) throws JeroBootException { + String accessToken = request.getHeader("X-Access-Token"); + String username = getUsername(accessToken); + if (oConvertUtils.isEmpty(username)) { + throw new JeroBootException("未获取到用户"); + } + return username; + } + + /** + * 从session中获取变量 + * @param key + * @return + */ + public static String getSessionData(String key) { + //${myVar}% + //得到${} 后面的值 + String moshi = ""; + if(key.indexOf("}")!=-1){ + moshi = key.substring(key.indexOf("}")+1); + } + String returnValue = null; + if (key.contains("#{")) { + key = key.substring(2,key.indexOf("}")); + } + if (oConvertUtils.isNotEmpty(key)) { + HttpSession session = SpringContextUtils.getHttpServletRequest().getSession(); + returnValue = (String) session.getAttribute(key); + } + //结果加上${} 后面的值 + if(returnValue!=null){returnValue = returnValue + moshi;} + return returnValue; + } + + /** + * 从当前用户中获取变量 + * @param key + * @param user + * @return + */ + //TODO 急待改造 sckjkdsjsfjdk + public static String getUserSystemData(String key,SysUserCacheInfo user) { + if(user==null) { + user = JeroDataAutorUtils.loadUserInfo(); + } + //#{sys_user_code}% + + // 获取登录用户信息 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + + String moshi = ""; + if(key.indexOf("}")!=-1){ + moshi = key.substring(key.indexOf("}")+1); + } + String returnValue = null; + //针对特殊标示处理#{sysOrgCode},判断替换 + if (key.contains("#{")) { + key = key.substring(2,key.indexOf("}")); + } else { + key = key; + } + //替换为系统登录用户帐号 + if (key.equals(DataBaseConstant.SYS_USER_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_CODE_TABLE)) { + if(user==null) { + returnValue = sysUser.getUsername(); + }else { + returnValue = user.getSysUserCode(); + } + } + //替换为系统登录用户真实名字 + else if (key.equals(DataBaseConstant.SYS_USER_NAME)|| key.toLowerCase().equals(DataBaseConstant.SYS_USER_NAME_TABLE)) { + if(user==null) { + returnValue = sysUser.getRealname(); + }else { + returnValue = user.getSysUserName(); + } + } + + //替换为系统用户登录所使用的机构编码 + else if (key.equals(DataBaseConstant.SYS_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_ORG_CODE_TABLE)) { + if(user==null) { + returnValue = sysUser.getOrgCode(); + }else { + returnValue = user.getSysOrgCode(); + } + } + //替换为系统用户所拥有的所有机构编码 + else if (key.equals(DataBaseConstant.SYS_MULTI_ORG_CODE)|| key.toLowerCase().equals(DataBaseConstant.SYS_MULTI_ORG_CODE_TABLE)) { + if(user==null){ + //TODO 暂时使用用户登录部门,存在逻辑缺陷,不是用户所拥有的部门 + returnValue = sysUser.getOrgCode(); + }else{ + if(user.isOneDepart()) { + returnValue = user.getSysMultiOrgCode().get(0); + }else { + returnValue = Joiner.on(",").join(user.getSysMultiOrgCode()); + } + } + } + //替换为当前系统时间(年月日) + else if (key.equals(DataBaseConstant.SYS_DATE)|| key.toLowerCase().equals(DataBaseConstant.SYS_DATE_TABLE)) { + returnValue = DateUtils.formatDate(); + } + //替换为当前系统时间(年月日时分秒) + else if (key.equals(DataBaseConstant.SYS_TIME)|| key.toLowerCase().equals(DataBaseConstant.SYS_TIME_TABLE)) { + returnValue = DateUtils.now(); + } + //流程状态默认值(默认未发起) + else if (key.equals(DataBaseConstant.BPM_STATUS)|| key.toLowerCase().equals(DataBaseConstant.BPM_STATUS_TABLE)) { + returnValue = "1"; + } + if(returnValue!=null){returnValue = returnValue + moshi;} + return returnValue; + } + +// public static void main(String[] args) { +// String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE1NjUzMzY1MTMsInVzZXJuYW1lIjoiYWRtaW4ifQ.xjhud_tWCNYBOg_aRlMgOdlZoWFFKB_givNElHNw3X0"; +// System.out.println(JwtUtil.getUsername(token)); +// } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java new file mode 100644 index 00000000..8f3e2a5e --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/ComboModel.java @@ -0,0 +1,36 @@ +package com.jero.common.system.vo; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@JsonIgnoreProperties(ignoreUnknown = true) +public class ComboModel implements Serializable { + private String id; + private String title; + /**文档管理 表单table默认选中*/ + private boolean checked; + /**文档管理 表单table 用户账号*/ + private String username; + /**文档管理 表单table 用户邮箱*/ + private String email; + /**文档管理 表单table 角色编码*/ + private String roleCode; + + public ComboModel(){ + + }; + + public ComboModel(String id,String title,boolean checked,String username){ + this.id = id; + this.title = title; + this.checked = false; + this.username = username; + }; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictModel.java new file mode 100644 index 00000000..dfd5dfa6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictModel.java @@ -0,0 +1,43 @@ +package com.jero.common.system.vo; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@JsonIgnoreProperties(ignoreUnknown = true) +public class DictModel implements Serializable{ + private static final long serialVersionUID = 1L; + + public DictModel() { + } + + public DictModel(String value, String text) { + this.value = value; + this.text = text; + } + + /** + * 字典value + */ + private String value; + /** + * 字典文本 + */ + private String text; + + /** + * 特殊用途: JgEditableTable + * @return + */ + public String getTitle() { + return this.text; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictQuery.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictQuery.java new file mode 100644 index 00000000..062e7fe5 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DictQuery.java @@ -0,0 +1,34 @@ +package com.jero.common.system.vo; + +import lombok.Data; + +/** + * 字典查询参数实体 + */ +@Data +public class DictQuery { + /** + * 表名 + */ + private String table; + /** + * 存储列 + */ + private String code; + + /** + * 显示列 + */ + private String text; + + /** + * 关键字查询 + */ + private String keyword; + + /** + * 存储列的值 用于回显查询 + */ + private String codeValue; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DynamicDataSourceModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DynamicDataSourceModel.java new file mode 100644 index 00000000..38b46040 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/DynamicDataSourceModel.java @@ -0,0 +1,52 @@ +package com.jero.common.system.vo; + +import lombok.Data; +import org.springframework.beans.BeanUtils; + +@Data +public class DynamicDataSourceModel { + + public DynamicDataSourceModel() { + + } + + public DynamicDataSourceModel(Object dbSource) { + if (dbSource != null) { + BeanUtils.copyProperties(dbSource, this); + } + } + + /** + * id + */ + private java.lang.String id; + /** + * 数据源编码 + */ + private java.lang.String code; + /** + * 数据库类型 + */ + private java.lang.String dbType; + /** + * 驱动类 + */ + private java.lang.String dbDriver; + /** + * 数据源地址 + */ + private java.lang.String dbUrl; + /** + * 数据库名称 + */ + private java.lang.String dbName; + /** + * 用户名 + */ + private java.lang.String dbUsername; + /** + * 密码 + */ + private java.lang.String dbPassword; + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/LoginUser.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/LoginUser.java new file mode 100644 index 00000000..ed02455d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/LoginUser.java @@ -0,0 +1,119 @@ +package com.jero.common.system.vo; + +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 在线用户信息 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class LoginUser { + + /** + * 登录人id + */ + private String id; + + /** + * 登录人账号 + */ + private String username; + + /** + * 登录人名字 + */ + private String realname; + + /** + * 登录人密码 + */ + private String password; + + /** + * 当前登录部门code + */ + private String orgCode; + /** + * 头像 + */ + private String avatar; + + /** + * 生日 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthday; + + /** + * 性别(1:男 2:女) + */ + private Integer sex; + + /** + * 电子邮件 + */ + private String email; + + /** + * 电话 + */ + private String phone; + + /** + * 状态(1:正常 2:冻结 ) + */ + private Integer status; + + private Integer delFlag; + /** + * 同步工作流引擎1同步0不同步 + */ + private Integer activitiSync; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 身份(1 普通员工 2 上级) + */ + private Integer userIdentity; + + /** + * 管理部门ids + */ + private String departIds; + + /** + * 职务,关联职务表 + */ + private String post; + + /** + * 座机号 + */ + private String telephone; + + /**多租户id配置,编辑用户的时候设置*/ + private String relTenantIds; + + /**设备id uniapp推送用*/ + private String clientId; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java new file mode 100644 index 00000000..8e3390fe --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysCategoryModel.java @@ -0,0 +1,52 @@ +package com.jero.common.system.vo; + +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Author qinfeng + * @Date 2020/2/19 12:01 + * @Description: + * @Version 1.0 + */ +public class SysCategoryModel { + /**主键*/ + private java.lang.String id; + /**父级节点*/ + private java.lang.String pid; + /**类型名称*/ + private java.lang.String name; + /**类型编码*/ + private java.lang.String code; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPid() { + return pid; + } + + public void setPid(String pid) { + this.pid = pid; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartModel.java new file mode 100644 index 00000000..dd41f8a5 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartModel.java @@ -0,0 +1,147 @@ +package com.jero.common.system.vo; + +/** + * lvdandan 部门机构model + */ +public class SysDepartModel { + /**ID*/ + private String id; + /**父机构ID*/ + private String parentId; + /**机构/部门名称*/ + private String departName; + /**英文名*/ + private String departNameEn; + /**缩写*/ + private String departNameAbbr; + /**排序*/ + private Integer departOrder; + /**描述*/ + private String description; + /**机构类别 1组织机构,2岗位*/ + private String orgCategory; + /**机构类型*/ + private String orgType; + /**机构编码*/ + private String orgCode; + /**手机号*/ + private String mobile; + /**传真*/ + private String fax; + /**地址*/ + private String address; + /**备注*/ + private String memo; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getDepartName() { + return departName; + } + + public void setDepartName(String departName) { + this.departName = departName; + } + + public String getDepartNameEn() { + return departNameEn; + } + + public void setDepartNameEn(String departNameEn) { + this.departNameEn = departNameEn; + } + + public String getDepartNameAbbr() { + return departNameAbbr; + } + + public void setDepartNameAbbr(String departNameAbbr) { + this.departNameAbbr = departNameAbbr; + } + + public Integer getDepartOrder() { + return departOrder; + } + + public void setDepartOrder(Integer departOrder) { + this.departOrder = departOrder; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getOrgCategory() { + return orgCategory; + } + + public void setOrgCategory(String orgCategory) { + this.orgCategory = orgCategory; + } + + public String getOrgType() { + return orgType; + } + + public void setOrgType(String orgType) { + this.orgType = orgType; + } + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java new file mode 100644 index 00000000..63f30352 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysDepartTreeModel.java @@ -0,0 +1,340 @@ +package com.jero.common.system.vo; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + *

+ * 部门表 存储树结构数据的实体类 + *

+ * + * @Author Steve + * @Since 2019-01-22 + */ +public class SysDepartTreeModel implements Serializable{ + + private static final long serialVersionUID = 1L; + + /** 对应SysDepart中的id字段,前端数据树中的key*/ + private String key; + + /** 对应SysDepart中的id字段,前端数据树中的value*/ + private String value; + + /** 对应depart_name字段,前端数据树中的title*/ + private String title; + + + private boolean isLeaf; + // 以下所有字段均与SysDepart相同 + + private String id; + + private String parentId; + + private String departName; + + private String departNameEn; + + private String departNameAbbr; + + private Integer departOrder; + + private String description; + + private String orgCategory; + + private String orgType; + + private String orgCode; + + private String mobile; + + private String fax; + + private String address; + + private String memo; + + private String status; + + private String delFlag; + + private String createBy; + + private Date createTime; + + private String updateBy; + + private Date updateTime; + + private List children = new ArrayList<>(); + + + + public boolean getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(boolean isleaf) { + this.isLeaf = isleaf; + } + + public String getKey() { + return key; + } + + + public void setKey(String key) { + this.key = key; + } + + + public String getValue() { + return value; + } + + + public void setValue(String value) { + this.value = value; + } + + + public String getTitle() { + return title; + } + + + public void setTitle(String title) { + this.title = title; + } + + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + if (children==null){ + this.isLeaf=true; + } + this.children = children; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getDepartName() { + return departName; + } + + public void setDepartName(String departName) { + this.departName = departName; + } + + public String getOrgCategory() { + return orgCategory; + } + + public void setOrgCategory(String orgCategory) { + this.orgCategory = orgCategory; + } + + public String getOrgType() { + return orgType; + } + + public void setOrgType(String orgType) { + this.orgType = orgType; + } + + public String getOrgCode() { + return orgCode; + } + + public void setOrgCode(String orgCode) { + this.orgCode = orgCode; + } + + public String getMobile() { + return mobile; + } + + public void setMobile(String mobile) { + this.mobile = mobile; + } + + public String getFax() { + return fax; + } + + public void setFax(String fax) { + this.fax = fax; + } + + public String getAddress() { + return address; + } + + public void setAddress(String address) { + this.address = address; + } + + public String getMemo() { + return memo; + } + + public void setMemo(String memo) { + this.memo = memo; + } + + public String getDepartNameEn() { + return departNameEn; + } + + public void setDepartNameEn(String departNameEn) { + this.departNameEn = departNameEn; + } + + public String getDepartNameAbbr() { + return departNameAbbr; + } + + public void setDepartNameAbbr(String departNameAbbr) { + this.departNameAbbr = departNameAbbr; + } + + public Integer getDepartOrder() { + return departOrder; + } + + public void setDepartOrder(Integer departOrder) { + this.departOrder = departOrder; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getDelFlag() { + return delFlag; + } + + public void setDelFlag(String delFlag) { + this.delFlag = delFlag; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public SysDepartTreeModel() { } + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SysDepartTreeModel model = (SysDepartTreeModel) o; + return Objects.equals(id, model.id) && + Objects.equals(parentId, model.parentId) && + Objects.equals(departName, model.departName) && + Objects.equals(departNameEn, model.departNameEn) && + Objects.equals(departNameAbbr, model.departNameAbbr) && + Objects.equals(departOrder, model.departOrder) && + Objects.equals(description, model.description) && + Objects.equals(orgCategory, model.orgCategory) && + Objects.equals(orgType, model.orgType) && + Objects.equals(orgCode, model.orgCode) && + Objects.equals(mobile, model.mobile) && + Objects.equals(fax, model.fax) && + Objects.equals(address, model.address) && + Objects.equals(memo, model.memo) && + Objects.equals(status, model.status) && + Objects.equals(delFlag, model.delFlag) && + Objects.equals(createBy, model.createBy) && + Objects.equals(createTime, model.createTime) && + Objects.equals(updateBy, model.updateBy) && + Objects.equals(updateTime, model.updateTime) && + Objects.equals(children, model.children); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + + return Objects.hash(id, parentId, departName, departNameEn, departNameAbbr, + departOrder, description, orgCategory, orgType, orgCode, mobile, fax, address, + memo, status, delFlag, createBy, createTime, updateBy, updateTime, + children); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java new file mode 100644 index 00000000..1df0fb81 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysPermissionDataRuleModel.java @@ -0,0 +1,151 @@ +package com.jero.common.system.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + *

+ * 菜单权限规则表 + *

+ * + * @Author huangzhilin + * @since 2019-03-29 + */ +public class SysPermissionDataRuleModel { + + /** + * id + */ + private String id; + + /** + * 对应的菜单id + */ + private String permissionId; + + /** + * 规则名称 + */ + private String ruleName; + + /** + * 字段 + */ + private String ruleColumn; + + /** + * 条件 + */ + private String ruleConditions; + + /** + * 规则值 + */ + private String ruleValue; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 修改人 + */ + private String updateBy; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPermissionId() { + return permissionId; + } + + public void setPermissionId(String permissionId) { + this.permissionId = permissionId; + } + + public String getRuleName() { + return ruleName; + } + + public void setRuleName(String ruleName) { + this.ruleName = ruleName; + } + + public String getRuleColumn() { + return ruleColumn; + } + + public void setRuleColumn(String ruleColumn) { + this.ruleColumn = ruleColumn; + } + + public String getRuleConditions() { + return ruleConditions; + } + + public void setRuleConditions(String ruleConditions) { + this.ruleConditions = ruleConditions; + } + + public String getRuleValue() { + return ruleValue; + } + + public void setRuleValue(String ruleValue) { + this.ruleValue = ruleValue; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysUserCacheInfo.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysUserCacheInfo.java new file mode 100644 index 00000000..aa25d963 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/system/vo/SysUserCacheInfo.java @@ -0,0 +1,67 @@ +package com.jero.common.system.vo; + +import java.util.List; + +import com.jero.common.util.DateUtils; + +public class SysUserCacheInfo { + + private String sysUserCode; + + private String sysUserName; + + private String sysOrgCode; + + private List sysMultiOrgCode; + + private boolean oneDepart; + + public boolean isOneDepart() { + return oneDepart; + } + + public void setOneDepart(boolean oneDepart) { + this.oneDepart = oneDepart; + } + + public String getSysDate() { + return DateUtils.formatDate(); + } + + public String getSysTime() { + return DateUtils.now(); + } + + public String getSysUserCode() { + return sysUserCode; + } + + public void setSysUserCode(String sysUserCode) { + this.sysUserCode = sysUserCode; + } + + public String getSysUserName() { + return sysUserName; + } + + public void setSysUserName(String sysUserName) { + this.sysUserName = sysUserName; + } + + public String getSysOrgCode() { + return sysOrgCode; + } + + public void setSysOrgCode(String sysOrgCode) { + this.sysOrgCode = sysOrgCode; + } + + public List getSysMultiOrgCode() { + return sysMultiOrgCode; + } + + public void setSysMultiOrgCode(List sysMultiOrgCode) { + this.sysMultiOrgCode = sysMultiOrgCode; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java new file mode 100644 index 00000000..8900ae54 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserType.java @@ -0,0 +1,10 @@ +package com.jero.common.util; + +/** + * + * @Author 张代浩 + * + */ +public enum BrowserType { + IE11,IE10,IE9,IE8,IE7,IE6,Firefox,Safari,Chrome,Opera,Camino,Gecko +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java new file mode 100644 index 00000000..8647ea8d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/BrowserUtils.java @@ -0,0 +1,206 @@ +package com.jero.common.util; + +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.servlet.http.HttpServletRequest; + +/** + * + * @Author 张代浩 + * + */ +public class BrowserUtils { + + // 判断是否是IE + public static boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request + .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true + : false; + } + + /** + * 获取IE版本 + * + * @param request + * @return + */ + public static Double getIEversion(HttpServletRequest request) { + Double version = 0.0; + if (getBrowserType(request, IE11)) { + version = 11.0; + } else if (getBrowserType(request, IE10)) { + version = 10.0; + } else if (getBrowserType(request, IE9)) { + version = 9.0; + } else if (getBrowserType(request, IE8)) { + version = 8.0; + } else if (getBrowserType(request, IE7)) { + version = 7.0; + } else if (getBrowserType(request, IE6)) { + version = 6.0; + } + return version; + } + + /** + * 获取浏览器类型 + * + * @param request + * @return + */ + public static BrowserType getBrowserType(HttpServletRequest request) { + BrowserType browserType = null; + if (getBrowserType(request, IE11)) { + browserType = BrowserType.IE11; + } + if (getBrowserType(request, IE10)) { + browserType = BrowserType.IE10; + } + if (getBrowserType(request, IE9)) { + browserType = BrowserType.IE9; + } + if (getBrowserType(request, IE8)) { + browserType = BrowserType.IE8; + } + if (getBrowserType(request, IE7)) { + browserType = BrowserType.IE7; + } + if (getBrowserType(request, IE6)) { + browserType = BrowserType.IE6; + } + if (getBrowserType(request, FIREFOX)) { + browserType = BrowserType.Firefox; + } + if (getBrowserType(request, SAFARI)) { + browserType = BrowserType.Safari; + } + if (getBrowserType(request, CHROME)) { + browserType = BrowserType.Chrome; + } + if (getBrowserType(request, OPERA)) { + browserType = BrowserType.Opera; + } + if (getBrowserType(request, "Camino")) { + browserType = BrowserType.Camino; + } + return browserType; + } + + private static boolean getBrowserType(HttpServletRequest request, + String brosertype) { + return request.getHeader("USER-AGENT").toLowerCase() + .indexOf(brosertype) > 0 ? true : false; + } + + private final static String IE11 = "rv:11.0"; + private final static String IE10 = "MSIE 10.0"; + private final static String IE9 = "MSIE 9.0"; + private final static String IE8 = "MSIE 8.0"; + private final static String IE7 = "MSIE 7.0"; + private final static String IE6 = "MSIE 6.0"; + private final static String MAXTHON = "Maxthon"; + private final static String QQ = "QQBrowser"; + private final static String GREEN = "GreenBrowser"; + private final static String SE360 = "360SE"; + private final static String FIREFOX = "Firefox"; + private final static String OPERA = "Opera"; + private final static String CHROME = "Chrome"; + private final static String SAFARI = "Safari"; + private final static String OTHER = "其它"; + + public static String checkBrowse(HttpServletRequest request) { + String userAgent = request.getHeader("USER-AGENT"); + if (regex(OPERA, userAgent)) { + return OPERA; + } + if (regex(CHROME, userAgent)) { + return CHROME; + } + if (regex(FIREFOX, userAgent)) { + return FIREFOX; + } + if (regex(SAFARI, userAgent)) { + return SAFARI; + } + if (regex(SE360, userAgent)) { + return SE360; + } + if (regex(GREEN, userAgent)) { + return GREEN; + } + if (regex(QQ, userAgent)) { + return QQ; + } + if (regex(MAXTHON, userAgent)) { + return MAXTHON; + } + if (regex(IE11, userAgent)) { + return IE11; + } + if (regex(IE10, userAgent)) { + return IE10; + } + if (regex(IE9, userAgent)) { + return IE9; + } + if (regex(IE8, userAgent)) { + return IE8; + } + if (regex(IE7, userAgent)) { + return IE7; + } + if (regex(IE6, userAgent)) { + return IE6; + } + return OTHER; + } + + public static boolean regex(String regex, String str) { + Pattern p = Pattern.compile(regex, Pattern.MULTILINE); + Matcher m = p.matcher(str); + return m.find(); + } + + + private static Map langMap = new HashMap(); + private final static String ZH = "zh"; + private final static String ZH_CN = "zh-cn"; + + private final static String EN = "en"; + private final static String EN_US = "en"; + + + static + { + langMap.put(ZH, ZH_CN); + langMap.put(EN, EN_US); + } + + public static String getBrowserLanguage(HttpServletRequest request) { + + String browserLang = request.getLocale().getLanguage(); + String browserLangCode = (String)langMap.get(browserLang); + + if(browserLangCode == null) + { + browserLangCode = EN_US; + } + return browserLangCode; + } + + /** 判断请求是否来自电脑端 */ + public static boolean isDesktop(HttpServletRequest request) { + return !isMobile(request); + } + + /** 判断请求是否来自移动端 */ + public static boolean isMobile(HttpServletRequest request) { + String ua = request.getHeader("User-Agent").toLowerCase(); + Pattern pattern = Pattern.compile("(phone|pad|pod|iphone|ipod|ios|ipad|android|mobile|blackberry|iemobile|mqqbrowser|juc|fennec|wosbrowser|browserng|webos|symbian|windows phone)"); + return pattern.matcher(ua).find(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java new file mode 100644 index 00000000..eaa9de9e --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/CommonUtils.java @@ -0,0 +1,239 @@ +package com.jero.common.util; + +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.oss.OssBootUtil; +import org.jeecgframework.poi.util.PoiPublicUtil; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.sql.DataSource; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Slf4j +public class CommonUtils { + + //中文正则 + private static Pattern ZHONGWEN_PATTERN = Pattern.compile("[\u4e00-\u9fa5]"); + + public static String uploadOnlineImage(byte[] data,String basePath,String bizPath,String uploadType){ + String dbPath = null; + String fileName = "image" + Math.round(Math.random() * 100000000000L); + fileName += "." + PoiPublicUtil.getFileExtendName(data); + try { + if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ + File file = new File(basePath + File.separator + bizPath + File.separator ); + if (!file.exists()) { + file.mkdirs();// 创建文件根目录 + } + String savePath = file.getPath() + File.separator + fileName; + File savefile = new File(savePath); + FileCopyUtils.copy(data, savefile); + dbPath = bizPath + File.separator + fileName; + }else { + InputStream in = new ByteArrayInputStream(data); + String relativePath = bizPath+"/"+fileName; + if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ + dbPath = MinioUtil.upload(in,relativePath); + }else if(CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)){ + dbPath = OssBootUtil.upload(in,relativePath); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + return dbPath; + } + + /** + * 判断文件名是否带盘符,重新处理 + * @param fileName + * @return + */ + public static String getFileName(String fileName){ + //判断是否带有盘符信息 + // Check for Unix-style path + int unixSep = fileName.lastIndexOf('/'); + // Check for Windows-style path + int winSep = fileName.lastIndexOf('\\'); + // Cut off at latest possible point + int pos = (winSep > unixSep ? winSep : unixSep); + if (pos != -1) { + // Any sort of path separator found... + fileName = fileName.substring(pos + 1); + } + //替换上传文件名字的特殊字符 + fileName = fileName.replace("=","").replace(",","").replace("&","").replace("#", ""); + //替换上传文件名字中的空格 + fileName=fileName.replaceAll("\\s",""); + return fileName; + } + + // java 判断字符串里是否包含中文字符 + public static boolean ifContainChinese(String str) { + if(str.getBytes().length == str.length()){ + return false; + }else{ + Matcher m = ZHONGWEN_PATTERN.matcher(str); + if (m.find()) { + return true; + } + return false; + } + } + + /** + * 统一全局上传 + * @Return: java.lang.String + */ + public static String upload(MultipartFile file, String bizPath, String uploadType) { + String url = ""; + if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ + url = MinioUtil.upload(file,bizPath); + }else{ + url = OssBootUtil.upload(file,bizPath); + } + return url; + } + + /** + * 统一全局上传 带桶 + * @Return: java.lang.String + */ + public static String upload(MultipartFile file, String bizPath, String uploadType, String customBucket) { + String url = ""; + if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ + url = MinioUtil.upload(file,bizPath,customBucket); + }else{ + url = OssBootUtil.upload(file,bizPath,customBucket); + } + return url; + } + /** + * 本地文件上传 + * @param mf 文件 + * @param bizPath 自定义路径 + * @return + */ + public static String uploadLocal(MultipartFile mf,String bizPath, String uploadpath){ + try { + String ctxPath = uploadpath; + String fileName = null; + File file = new File(ctxPath + File.separator + bizPath + File.separator ); + if (!file.exists()) { + file.mkdirs();// 创建文件根目录 + } + String orgName = mf.getOriginalFilename();// 获取文件名 + orgName = CommonUtils.getFileName(orgName); + if(orgName.indexOf(".")!=-1){ + fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); + }else{ + fileName = orgName+ "_" + System.currentTimeMillis(); + } + String savePath = file.getPath() + File.separator + fileName; + File savefile = new File(savePath); + FileCopyUtils.copy(mf.getBytes(), savefile); + String dbpath = null; + if(oConvertUtils.isNotEmpty(bizPath)){ + dbpath = bizPath + File.separator + fileName; + }else{ + dbpath = fileName; + } + if (dbpath.contains("\\")) { + dbpath = dbpath.replace("\\", "/"); + } + return dbpath; + } catch (IOException e) { + log.error(e.getMessage(), e); + } + return ""; + } + /** 当前系统数据库类型 */ + private static String DB_TYPE = ""; + public static String getDatabaseType() { + if(oConvertUtils.isNotEmpty(DB_TYPE)){ + return DB_TYPE; + } + DataSource dataSource = SpringContextUtils.getApplicationContext().getBean(DataSource.class); + try { + return getDatabaseTypeByDataSource(dataSource); + } catch (SQLException e) { + //e.printStackTrace(); + log.warn(e.getMessage()); + return ""; + } + } + + /** + * 获取数据库类型 + * @param dataSource + * @return + * @throws SQLException + */ + private static String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ + if("".equals(DB_TYPE)) { + Connection connection = dataSource.getConnection(); + try { + DatabaseMetaData md = connection.getMetaData(); + String dbType = md.getDatabaseProductName().toLowerCase(); + if(dbType.indexOf("mysql")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; + }else if(dbType.indexOf("oracle")>=0 ||dbType.indexOf("dm")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; + }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; + }else if(dbType.indexOf("postgresql")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; + }else { + throw new JeroBootException("数据库类型:["+dbType+"]不识别!"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + }finally { + connection.close(); + } + } + return DB_TYPE; + + } + /** + * 黑名单限制文件 + * @date 2021/4/14 6:18 + * @param fileName 文件名 + * @return boolean true:处于黑名单 false:不处于黑名单 + */ + public static boolean limitFileSuffix(String fileName,String[] fileSuffixLimits){ + final List fileNameList = Arrays.asList(fileSuffixLimits); + boolean isExists = fileNameList.stream().anyMatch(name -> fileName.substring(0,fileName.lastIndexOf('.')).contains(name)||fileName.substring(fileName.lastIndexOf('.')).equals(name)); + return isExists; + } + /** + * RSA 使用私钥解密 + * @date 2021/4/15 16:11 + * @param str 待解密的字符串 + * @param RSAPrivateKey 私钥 + * @return String 解密后的字符串 + */ + public static String decryptBtRsaPriKey(String str,String RSAPrivateKey) throws Exception { + RSA rsa = new RSA(RSAPrivateKey, null); + byte[] decrypt = rsa.decrypt(str, KeyType.PrivateKey); + return new String(decrypt); + } + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java new file mode 100644 index 00000000..c6712e45 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DateUtils.java @@ -0,0 +1,650 @@ +package com.jero.common.util; + +import java.beans.PropertyEditorSupport; +import java.sql.Timestamp; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +import org.springframework.util.StringUtils; + +/** + * 类描述:时间操作定义类 + * + * @Author: 张代浩 + * @Date:2012-12-8 12:15:03 + * @Version 1.0 + */ +public class DateUtils extends PropertyEditorSupport { + + public static ThreadLocal date_sdf = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd"); + } + }; + public static ThreadLocal yyyyMMdd = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyyMMdd"); + } + }; + public static ThreadLocal date_sdf_wz = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy年MM月dd日"); + } + }; + public static ThreadLocal time_sdf = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm"); + } + }; + public static ThreadLocal yyyymmddhhmmss = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyyMMddHHmmss"); + } + }; + public static ThreadLocal short_time_sdf = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("HH:mm"); + } + }; + public static ThreadLocal datetimeFormat = new ThreadLocal() { + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + }; + + // 以毫秒表示的时间 + private static final long DAY_IN_MILLIS = 24 * 3600 * 1000; + private static final long HOUR_IN_MILLIS = 3600 * 1000; + private static final long MINUTE_IN_MILLIS = 60 * 1000; + private static final long SECOND_IN_MILLIS = 1000; + + // 指定模式的时间格式 + private static SimpleDateFormat getSDFormat(String pattern) { + return new SimpleDateFormat(pattern); + } + + /** + * 当前日历,这里用中国时间表示 + * + * @return 以当地时区表示的系统当前日历 + */ + public static Calendar getCalendar() { + return Calendar.getInstance(); + } + + /** + * 指定毫秒数表示的日历 + * + * @param millis 毫秒数 + * @return 指定毫秒数表示的日历 + */ + public static Calendar getCalendar(long millis) { + Calendar cal = Calendar.getInstance(); + // --------------------cal.setTimeInMillis(millis); + cal.setTime(new Date(millis)); + return cal; + } + + // //////////////////////////////////////////////////////////////////////////// + // getDate + // 各种方式获取的Date + // //////////////////////////////////////////////////////////////////////////// + + /** + * 当前日期 + * + * @return 系统当前时间 + */ + public static Date getDate() { + return new Date(); + } + + /** + * 指定毫秒数表示的日期 + * + * @param millis 毫秒数 + * @return 指定毫秒数表示的日期 + */ + public static Date getDate(long millis) { + return new Date(millis); + } + + /** + * 时间戳转换为字符串 + * + * @param time + * @return + */ + public static String timestamptoStr(Timestamp time) { + Date date = null; + if (null != time) { + date = new Date(time.getTime()); + } + return date2Str(date_sdf.get()); + } + + /** + * 字符串转换时间戳 + * + * @param str + * @return + */ + public static Timestamp str2Timestamp(String str) { + Date date = str2Date(str, date_sdf.get()); + return new Timestamp(date.getTime()); + } + + /** + * 字符串转换成日期 + * + * @param str + * @param sdf + * @return + */ + public static Date str2Date(String str, SimpleDateFormat sdf) { + if (null == str || "".equals(str)) { + return null; + } + Date date = null; + try { + date = sdf.parse(str); + return date; + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 日期转换为字符串 + * + * @param date_sdf 日期格式 + * @return 字符串 + */ + public static String date2Str(SimpleDateFormat date_sdf) { + Date date = getDate(); + if (null == date) { + return null; + } + return date_sdf.format(date); + } + + /** + * 格式化时间 + * + * @param date + * @param format + * @return + */ + public static String dateformat(String date, String format) { + SimpleDateFormat sformat = new SimpleDateFormat(format); + Date _date = null; + try { + _date = sformat.parse(date); + } catch (ParseException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sformat.format(_date); + } + + /** + * 日期转换为字符串 + * + * @param date 日期 + * @param date_sdf 日期格式 + * @return 字符串 + */ + public static String date2Str(Date date, SimpleDateFormat date_sdf) { + if (null == date) { + return null; + } + return date_sdf.format(date); + } + + /** + * 日期转换为字符串 + * + * @param format 日期格式 + * @return 字符串 + */ + public static String getDate(String format) { + Date date = new Date(); + if (null == date) { + return null; + } + SimpleDateFormat sdf = new SimpleDateFormat(format); + return sdf.format(date); + } + + /** + * 指定毫秒数的时间戳 + * + * @param millis 毫秒数 + * @return 指定毫秒数的时间戳 + */ + public static Timestamp getTimestamp(long millis) { + return new Timestamp(millis); + } + + /** + * 以字符形式表示的时间戳 + * + * @param time 毫秒数 + * @return 以字符形式表示的时间戳 + */ + public static Timestamp getTimestamp(String time) { + return new Timestamp(Long.parseLong(time)); + } + + /** + * 系统当前的时间戳 + * + * @return 系统当前的时间戳 + */ + public static Timestamp getTimestamp() { + return new Timestamp(System.currentTimeMillis()); + } + + /** + * 当前时间,格式 yyyy-MM-dd HH:mm:ss + * + * @return 当前时间的标准形式字符串 + */ + public static String now() { + return datetimeFormat.get().format(getCalendar().getTime()); + } + + /** + * 指定日期的时间戳 + * + * @param date 指定日期 + * @return 指定日期的时间戳 + */ + public static Timestamp getTimestamp(Date date) { + return new Timestamp(date.getTime()); + } + + /** + * 指定日历的时间戳 + * + * @param cal 指定日历 + * @return 指定日历的时间戳 + */ + public static Timestamp getCalendarTimestamp(Calendar cal) { + // ---------------------return new Timestamp(cal.getTimeInMillis()); + return new Timestamp(cal.getTime().getTime()); + } + + public static Timestamp gettimestamp() { + Date dt = new Date(); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String nowTime = df.format(dt); + java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime); + return buydate; + } + + // //////////////////////////////////////////////////////////////////////////// + // getMillis + // 各种方式获取的Millis + // //////////////////////////////////////////////////////////////////////////// + + /** + * 系统时间的毫秒数 + * + * @return 系统时间的毫秒数 + */ + public static long getMillis() { + return System.currentTimeMillis(); + } + + /** + * 指定日历的毫秒数 + * + * @param cal 指定日历 + * @return 指定日历的毫秒数 + */ + public static long getMillis(Calendar cal) { + // --------------------return cal.getTimeInMillis(); + return cal.getTime().getTime(); + } + + /** + * 指定日期的毫秒数 + * + * @param date 指定日期 + * @return 指定日期的毫秒数 + */ + public static long getMillis(Date date) { + return date.getTime(); + } + + /** + * 指定时间戳的毫秒数 + * + * @param ts 指定时间戳 + * @return 指定时间戳的毫秒数 + */ + public static long getMillis(Timestamp ts) { + return ts.getTime(); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatDate + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:年-月-日 + * + * @return 默认日期按“年-月-日“格式显示 + */ + public static String formatDate() { + return date_sdf.get().format(getCalendar().getTime()); + } + + /** + * 默认方式表示的系统当前日期,具体格式:yyyy-MM-dd HH:mm:ss + * + * @return 默认日期按“yyyy-MM-dd HH:mm:ss“格式显示 + */ + public static String formatDateTime() { + return datetimeFormat.get().format(getCalendar().getTime()); + } + + /** + * 获取时间字符串 + */ + public static String getDataString(SimpleDateFormat formatstr) { + return formatstr.format(getCalendar().getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 + * + * @param cal 指定的日期 + * @return 指定日期按“年-月-日“格式显示 + */ + public static String formatDate(Calendar cal) { + return date_sdf.get().format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 + * + * @param date 指定的日期 + * @return 指定日期按“年-月-日“格式显示 + */ + public static String formatDate(Date date) { + return date_sdf.get().format(date); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:年-月-日 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“年-月-日“格式显示 + */ + public static String formatDate(long millis) { + return date_sdf.get().format(new Date(millis)); + } + + /** + * 默认日期按指定格式显示 + * + * @param pattern 指定的格式 + * @return 默认日期按指定格式显示 + */ + public static String formatDate(String pattern) { + return getSDFormat(pattern).format(getCalendar().getTime()); + } + + /** + * 指定日期按指定格式显示 + * + * @param cal 指定的日期 + * @param pattern 指定的格式 + * @return 指定日期按指定格式显示 + */ + public static String formatDate(Calendar cal, String pattern) { + return getSDFormat(pattern).format(cal.getTime()); + } + + /** + * 指定日期按指定格式显示 + * + * @param date 指定的日期 + * @param pattern 指定的格式 + * @return 指定日期按指定格式显示 + */ + public static String formatDate(Date date, String pattern) { + return getSDFormat(pattern).format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatTime + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:年-月-日 时:分 + * + * @return 默认日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime() { + return time_sdf.get().format(getCalendar().getTime()); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:年-月-日 时:分 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(long millis) { + return time_sdf.get().format(new Date(millis)); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 时:分 + * + * @param cal 指定的日期 + * @return 指定日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(Calendar cal) { + return time_sdf.get().format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:年-月-日 时:分 + * + * @param date 指定的日期 + * @return 指定日期按“年-月-日 时:分“格式显示 + */ + public static String formatTime(Date date) { + return time_sdf.get().format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // formatShortTime + // 将日期按照一定的格式转化为字符串 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 默认方式表示的系统当前日期,具体格式:时:分 + * + * @return 默认日期按“时:分“格式显示 + */ + public static String formatShortTime() { + return short_time_sdf.get().format(getCalendar().getTime()); + } + + /** + * 指定毫秒数表示日期的默认显示,具体格式:时:分 + * + * @param millis 指定的毫秒数 + * @return 指定毫秒数表示日期按“时:分“格式显示 + */ + public static String formatShortTime(long millis) { + return short_time_sdf.get().format(new Date(millis)); + } + + /** + * 指定日期的默认显示,具体格式:时:分 + * + * @param cal 指定的日期 + * @return 指定日期按“时:分“格式显示 + */ + public static String formatShortTime(Calendar cal) { + return short_time_sdf.get().format(cal.getTime()); + } + + /** + * 指定日期的默认显示,具体格式:时:分 + * + * @param date 指定的日期 + * @return 指定日期按“时:分“格式显示 + */ + public static String formatShortTime(Date date) { + return short_time_sdf.get().format(date); + } + + // //////////////////////////////////////////////////////////////////////////// + // parseDate + // parseCalendar + // parseTimestamp + // 将字符串按照一定的格式转化为日期或时间 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的日期 + * @throws ParseException + */ + public static Date parseDate(String src, String pattern) throws ParseException { + return getSDFormat(pattern).parse(src); + + } + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的日期 + * @throws ParseException + */ + public static Calendar parseCalendar(String src, String pattern) throws ParseException { + + Date date = parseDate(src, pattern); + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return cal; + } + + public static String formatAddDate(String src, String pattern, int amount) throws ParseException { + Calendar cal; + cal = parseCalendar(src, pattern); + cal.add(Calendar.DATE, amount); + return formatDate(cal); + } + + /** + * 根据指定的格式将字符串转换成Date 如输入:2003-11-19 11:20:20将按照这个转成时间 + * + * @param src 将要转换的原始字符窜 + * @param pattern 转换的匹配格式 + * @return 如果转换成功则返回转换后的时间戳 + * @throws ParseException + */ + public static Timestamp parseTimestamp(String src, String pattern) throws ParseException { + Date date = parseDate(src, pattern); + return new Timestamp(date.getTime()); + } + + // //////////////////////////////////////////////////////////////////////////// + // dateDiff + // 计算两个日期之间的差值 + // //////////////////////////////////////////////////////////////////////////// + + /** + * 计算两个时间之间的差值,根据标志的不同而不同 + * + * @param flag 计算标志,表示按照年/月/日/时/分/秒等计算 + * @param calSrc 减数 + * @param calDes 被减数 + * @return 两个日期之间的差值 + */ + public static int dateDiff(char flag, Calendar calSrc, Calendar calDes) { + + long millisDiff = getMillis(calSrc) - getMillis(calDes); + + if (flag == 'y') { + return (calSrc.get(Calendar.YEAR) - calDes.get(Calendar.YEAR)); + } + + if (flag == 'd') { + return (int) (millisDiff / DAY_IN_MILLIS); + } + + if (flag == 'h') { + return (int) (millisDiff / HOUR_IN_MILLIS); + } + + if (flag == 'm') { + return (int) (millisDiff / MINUTE_IN_MILLIS); + } + + if (flag == 's') { + return (int) (millisDiff / SECOND_IN_MILLIS); + } + + return 0; + } + + /** + * String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd + * HH:mm:ss“ * @param text String类型的时间值 + */ + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (StringUtils.hasText(text)) { + try { + if (text.indexOf(":") == -1 && text.length() == 10) { + setValue(DateUtils.date_sdf.get().parse(text)); + } else if (text.indexOf(":") > 0 && text.length() == 19) { + setValue(DateUtils.datetimeFormat.get().parse(text)); + } else { + throw new IllegalArgumentException("Could not parse date, date format is error "); + } + } catch (ParseException ex) { + IllegalArgumentException iae = new IllegalArgumentException("Could not parse date: " + ex.getMessage()); + iae.initCause(ex); + throw iae; + } + } else { + setValue(null); + } + } + + public static int getYear() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTime(getDate()); + return calendar.get(Calendar.YEAR); + } + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsEnum.java new file mode 100644 index 00000000..7034ea2d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsEnum.java @@ -0,0 +1,70 @@ +package com.jero.common.util; + +import org.apache.commons.lang3.StringUtils; + +public enum DySmsEnum { + + LOGIN_TEMPLATE_CODE("SMS_175435174","JERO","code"), + FORGET_PASSWORD_TEMPLATE_CODE("SMS_175435174","JERO","code"), + REGISTER_TEMPLATE_CODE("SMS_175430166","JERO","code"), + /**会议通知*/ + MEET_NOTICE_TEMPLATE_CODE("SMS_201480469","H5活动之家","username,title,minute,time"), + /**我的计划通知*/ + PLAN_NOTICE_TEMPLATE_CODE("SMS_201470515","H5活动之家","username,title,time"); + + /** + * 短信模板编码 + */ + private String templateCode; + /** + * 签名 + */ + private String signName; + /** + * 短信模板必需的数据名称,多个key以逗号分隔,此处配置作为校验 + */ + private String keys; + + private DySmsEnum(String templateCode,String signName,String keys) { + this.templateCode = templateCode; + this.signName = signName; + this.keys = keys; + } + + public String getTemplateCode() { + return templateCode; + } + + public void setTemplateCode(String templateCode) { + this.templateCode = templateCode; + } + + public String getSignName() { + return signName; + } + + public void setSignName(String signName) { + this.signName = signName; + } + + public String getKeys() { + return keys; + } + + public void setKeys(String keys) { + this.keys = keys; + } + + public static DySmsEnum toEnum(String templateCode) { + if(StringUtils.isEmpty(templateCode)){ + return null; + } + for(DySmsEnum item : DySmsEnum.values()) { + if(item.getTemplateCode().equals(templateCode)) { + return item; + } + } + return null; + } +} + diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java new file mode 100644 index 00000000..69e4c15e --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/DySmsHelper.java @@ -0,0 +1,122 @@ +package com.jero.common.util; + +import com.jero.config.StaticConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.DefaultAcsClient; +import com.aliyuncs.IAcsClient; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; +import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; +import com.aliyuncs.exceptions.ClientException; +import com.aliyuncs.profile.DefaultProfile; +import com.aliyuncs.profile.IClientProfile; + +/** + * Created on 17/6/7. + * 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过 + * 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可) + * 工程依赖了2个jar包(存放在工程的libs目录下) + * 1:aliyun-java-sdk-core.jar + * 2:aliyun-java-sdk-dysmsapi.jar + * + * 备注:Demo工程编码采用UTF-8 + * 国际短信发送请勿参照此DEMO + */ +public class DySmsHelper { + + private final static Logger logger=LoggerFactory.getLogger(DySmsHelper.class); + + //产品名称:云通信短信API产品,开发者无需替换 + static final String product = "Dysmsapi"; + //产品域名,开发者无需替换 + static final String domain = "dysmsapi.aliyuncs.com"; + + // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) + static String accessKeyId; + static String accessKeySecret; + + public static void setAccessKeyId(String accessKeyId) { + DySmsHelper.accessKeyId = accessKeyId; + } + + public static void setAccessKeySecret(String accessKeySecret) { + DySmsHelper.accessKeySecret = accessKeySecret; + } + + public static String getAccessKeyId() { + return accessKeyId; + } + + public static String getAccessKeySecret() { + return accessKeySecret; + } + + + public static boolean sendSms(String phone,JSONObject templateParamJson,DySmsEnum dySmsEnum) throws ClientException { + //可自助调整超时时间 + System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); + System.setProperty("sun.net.client.defaultReadTimeout", "10000"); + + //update-begin-author:taoyan date:20200811 for:配置类数据获取 + StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); + setAccessKeyId(staticConfig.getAccessKeyId()); + setAccessKeySecret(staticConfig.getAccessKeySecret()); + //update-end-author:taoyan date:20200811 for:配置类数据获取 + + //初始化acsClient,暂不支持region化 + IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); + DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); + IAcsClient acsClient = new DefaultAcsClient(profile); + + //验证json参数 + validateParam(templateParamJson,dySmsEnum); + + //组装请求对象-具体描述见控制台-文档部分内容 + SendSmsRequest request = new SendSmsRequest(); + //必填:待发送手机号 + request.setPhoneNumbers(phone); + //必填:短信签名-可在短信控制台中找到 + request.setSignName(dySmsEnum.getSignName()); + //必填:短信模板-可在短信控制台中找到 + request.setTemplateCode(dySmsEnum.getTemplateCode()); + //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 + request.setTemplateParam(templateParamJson.toJSONString()); + + //选填-上行短信扩展码(无特殊需求用户请忽略此字段) + //request.setSmsUpExtendCode("90997"); + + //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 + //request.setOutId("yourOutId"); + + boolean result = false; + + //hint 此处可能会抛出异常,注意catch + SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); + logger.info("短信接口返回的数据----------------"); + logger.info("{Code:" + sendSmsResponse.getCode()+",Message:" + sendSmsResponse.getMessage()+",RequestId:"+ sendSmsResponse.getRequestId()+",BizId:"+sendSmsResponse.getBizId()+"}"); + if ("OK".equals(sendSmsResponse.getCode())) { + result = true; + } + return result; + + } + + private static void validateParam(JSONObject templateParamJson,DySmsEnum dySmsEnum) { + String keys = dySmsEnum.getKeys(); + String [] keyArr = keys.split(","); + for(String item :keyArr) { + if(!templateParamJson.containsKey(item)) { + throw new RuntimeException("模板缺少参数:"+item); + } + } + } + + +// public static void main(String[] args) throws ClientException, InterruptedException { +// JSONObject obj = new JSONObject(); +// obj.put("code", "1234"); +// sendSms("13800138000", obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); +// } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java new file mode 100644 index 00000000..c95e185c --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/FillRuleUtil.java @@ -0,0 +1,57 @@ +package com.jero.common.util; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import com.jero.common.handler.IFillRuleHandler; + + +/** + * 规则值自动生成工具类 + * + * @author qinfeng + * @举例: 自动生成订单号;自动生成当前日期 + */ +@Slf4j +public class FillRuleUtil { + + /** + * @param ruleCode ruleCode + * @return + */ + @SuppressWarnings("unchecked") + public static Object executeRule(String ruleCode, JSONObject formData) { + if (!StringUtils.isEmpty(ruleCode)) { + try { + // 获取 Service + ServiceImpl impl = (ServiceImpl) SpringContextUtils.getBean("sysFillRuleServiceImpl"); + // 根据 ruleCode 查询出实体 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("rule_code", ruleCode); + JSONObject entity = JSON.parseObject(JSON.toJSONString(impl.getOne(queryWrapper))); + if (entity == null) { + log.warn("填值规则:" + ruleCode + " 不存在"); + return null; + } + // 获取必要的参数 + String ruleClass = entity.getString("ruleClass"); + JSONObject params = entity.getJSONObject("ruleParams"); + if (params == null) { + params = new JSONObject(); + } + if (formData == null) { + formData = new JSONObject(); + } + // 通过反射执行配置的类里的方法 + IFillRuleHandler ruleHandler = (IFillRuleHandler) Class.forName(ruleClass).newInstance(); + return ruleHandler.execute(params, formData); + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java new file mode 100644 index 00000000..0f8fd30a --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/HTMLUtils.java @@ -0,0 +1,29 @@ +package com.jero.common.util; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.util.HtmlUtils; + +/** + * HTML 工具类 + */ +public class HTMLUtils { + + /** + * 获取HTML内的文本,不包含标签 + * + * @param html HTML 代码 + */ + public static String getInnerText(String html) { + if (StringUtils.isNotBlank(html)) { + //去掉 html 的标签 + String content = html.replaceAll("]+>", ""); + // 将多个空格合并成一个空格 + content = content.replaceAll("( )+", " "); + // 反向转义字符 + content = HtmlUtils.htmlUnescape(content); + return content.trim(); + } + return ""; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java new file mode 100644 index 00000000..fcca7bcf --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/IPUtils.java @@ -0,0 +1,58 @@ +package com.jero.common.util; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * IP地址 + * + * @Author scott + * @email test@163.com + * @Date 2019年01月14日 + */ +public class IPUtils { + private static Logger logger = LoggerFactory.getLogger(IPUtils.class); + + /** + * 获取IP地址 + * + * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + logger.error("IPUtils ERROR ", e); + } + +// //使用代理,则获取第一个IP地址 +// if(StringUtils.isEmpty(ip) && ip.length() > 15) { +// if(ip.indexOf(",") > 0) { +// ip = ip.substring(0, ip.indexOf(",")); +// } +// } + + return ip; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java new file mode 100644 index 00000000..8a09ad20 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ImportExcelUtil.java @@ -0,0 +1,96 @@ +package com.jero.common.util; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +/** + * 导出返回信息 + */ +@Slf4j +public class ImportExcelUtil { + + public static Result imporReturnRes(int errorLines,int successLines,List errorMessage) throws IOException { + if (errorLines == 0) { + return Result.OK("共" + successLines + "行数据全部导入成功!"); + } else { + JSONObject result = new JSONObject(5); + int totalCount = successLines + errorLines; + result.put("totalCount", totalCount); + result.put("errorCount", errorLines); + result.put("successCount", successLines); + result.put("msg", "总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误行数:" + errorLines); + String fileUrl = PmsUtil.saveErrorTxtByList(errorMessage, "userImportExcelErrorLog"); + int lastIndex = fileUrl.lastIndexOf(File.separator); + String fileName = fileUrl.substring(lastIndex + 1); + result.put("fileUrl", "/sys/common/static/" + fileUrl); + result.put("fileName", fileName); + Result res = Result.OK(result); + res.setCode(201); + res.setMessage("文件导入成功,但有错误。"); + return res; + } + } + + public static List importDateSave(List list, Class serviceClass,List errorMessage,String errorFlag) { + IService bean =(IService) SpringContextUtils.getBean(serviceClass); + for (int i = 0; i < list.size(); i++) { + try { + boolean save = bean.save(list.get(i)); + if(!save){ + throw new Exception(errorFlag); + } + } catch (Exception e) { + String message = e.getMessage().toLowerCase(); + int lineNumber = i + 1; + // 通过索引名判断出错信息 + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:角色编码已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { + errorMessage.add("第 " + lineNumber + " 行:任务类名已经存在,忽略导入。"); + }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:职务编码已经存在,忽略导入。"); + }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:部门编码已经存在,忽略导入。"); + }else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + log.error(e.getMessage(), e); + } + } + } + return errorMessage; + } + + public static List importDateSaveOne(Object obj, Class serviceClass,List errorMessage,int i,String errorFlag) { + IService bean =(IService) SpringContextUtils.getBean(serviceClass); + try { + boolean save = bean.save(obj); + if(!save){ + throw new Exception(errorFlag); + } + } catch (Exception e) { + String message = e.getMessage().toLowerCase(); + int lineNumber = i + 1; + // 通过索引名判断出错信息 + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:角色编码已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME)) { + errorMessage.add("第 " + lineNumber + " 行:任务类名已经存在,忽略导入。"); + }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:职务编码已经存在,忽略导入。"); + }else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE)) { + errorMessage.add("第 " + lineNumber + " 行:部门编码已经存在,忽略导入。"); + }else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + log.error(e.getMessage(), e); + } + } + return errorMessage; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java new file mode 100644 index 00000000..4b737e09 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MD5Util.java @@ -0,0 +1,43 @@ +package com.jero.common.util; + +import java.security.MessageDigest; + +public class MD5Util { + + public static String byteArrayToHexString(byte b[]) { + StringBuffer resultSb = new StringBuffer(); + for (int i = 0; i < b.length; i++){ + resultSb.append(byteToHexString(b[i])); + } + return resultSb.toString(); + } + + private static String byteToHexString(byte b) { + int n = b; + if (n < 0) { + n += 256; + } + int d1 = n / 16; + int d2 = n % 16; + return hexDigits[d1] + hexDigits[d2]; + } + + public static String MD5Encode(String origin, String charsetname) { + String resultString = null; + try { + resultString = new String(origin); + MessageDigest md = MessageDigest.getInstance("MD5"); + if (charsetname == null || "".equals(charsetname)) { + resultString = byteArrayToHexString(md.digest(resultString.getBytes())); + } else { + resultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname))); + } + } catch (Exception exception) { + } + return resultString; + } + + private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", + "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java new file mode 100644 index 00000000..1385c1ce --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MinioUtil.java @@ -0,0 +1,210 @@ +package com.jero.common.util; + +import io.minio.*; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.util.filter.StrAttackFilter; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.Null; +import java.io.InputStream; +import java.net.URLDecoder; + +/** + * minio文件上传工具类 + */ +@Slf4j +public class MinioUtil { + private static String minioUrl; + private static String minioName; + private static String minioPass; + private static String bucketName; + + public static void setMinioUrl(String minioUrl) { + MinioUtil.minioUrl = minioUrl; + } + + public static void setMinioName(String minioName) { + MinioUtil.minioName = minioName; + } + + public static void setMinioPass(String minioPass) { + MinioUtil.minioPass = minioPass; + } + + public static void setBucketName(String bucketName) { + MinioUtil.bucketName = bucketName; + } + + public static String getMinioUrl() { + return minioUrl; + } + + public static String getBucketName() { + return bucketName; + } + + private static MinioClient minioClient = null; + + /** + * 上传文件 + * @param file + * @return + */ + public static String upload(MultipartFile file, String bizPath, String customBucket) { + String file_url = ""; + //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 + bizPath=StrAttackFilter.filter(bizPath); + //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 + String newBucket = bucketName; + if(oConvertUtils.isNotEmpty(customBucket)){ + newBucket = customBucket; + } + try { + initMinio(minioUrl, minioName,minioPass); + // 检查存储桶是否已经存在 + if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) { + log.info("Bucket already exists."); + } else { + // 创建一个名为ota的存储桶 + minioClient.makeBucket(MakeBucketArgs.builder().bucket(newBucket).build()); + log.info("create a new bucket."); + } + InputStream stream = file.getInputStream(); + // 获取文件名 + String orgName = file.getOriginalFilename(); + if("".equals(orgName)){ + orgName=file.getName(); + } + orgName = CommonUtils.getFileName(orgName); + String objectName = bizPath+"/"+orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); + + // 使用putObject上传一个本地文件到存储桶中。 + if(objectName.startsWith("/")){ + objectName = objectName.substring(1); + } + PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName) + .bucket(newBucket) + .contentType("application/octet-stream") + .stream(stream,stream.available(),-1).build(); + minioClient.putObject(objectArgs); + stream.close(); + file_url = minioUrl+newBucket+"/"+objectName; + }catch (Exception e){ + log.error(e.getMessage(), e); + } + return file_url; + } + + /** + * 文件上传 + * @param file + * @param bizPath + * @return + */ + public static String upload(MultipartFile file, String bizPath) { + return upload(file,bizPath,null); + } + + /** + * 获取文件流 + * @param bucketName + * @param objectName + * @return + */ + public static InputStream getMinioFile(String bucketName, String objectName){ + InputStream inputStream = null; + try { + initMinio(minioUrl, minioName, minioPass); + GetObjectArgs objectArgs = GetObjectArgs.builder().object(objectName) + .bucket(bucketName).build(); + inputStream = minioClient.getObject(objectArgs); + } catch (Exception e) { + log.info("文件获取失败" + e.getMessage()); + } + return inputStream; + } + + /** + * 删除文件 + * @param bucketName + * @param objectName + * @throws Exception + */ + public static void removeObject(String bucketName, String objectName) { + try { + initMinio(minioUrl, minioName,minioPass); + RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName) + .bucket(bucketName).build(); + minioClient.removeObject(objectArgs); + }catch (Exception e){ + log.info("文件删除失败" + e.getMessage()); + } + } + + /** + * 获取文件外链 + * @param bucketName + * @param objectName + * @param expires + * @return + */ + public static String getObjectURL(String bucketName, String objectName, Integer expires) { + initMinio(minioUrl, minioName,minioPass); + try{ + GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName) + .bucket(bucketName) + .expiry(expires).build(); + String url = minioClient.getPresignedObjectUrl(objectArgs); + return URLDecoder.decode(url,"UTF-8"); + }catch (Exception e){ + log.info("文件路径获取失败" + e.getMessage()); + } + return null; + } + + /** + * 初始化客户端 + * @param minioUrl + * @param minioName + * @param minioPass + * @return + */ + private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) { + if (minioClient == null) { + try { + minioClient = MinioClient.builder() + .endpoint(minioUrl) + .credentials(minioName, minioPass) + .build(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return minioClient; + } + + /** + * 上传文件到minio + * @param stream + * @param relativePath + * @return + */ + public static String upload(InputStream stream,String relativePath) throws Exception { + initMinio(minioUrl, minioName,minioPass); + if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) { + log.info("Bucket already exists."); + } else { + // 创建一个名为ota的存储桶 + minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); + log.info("create a new bucket."); + } + PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath) + .bucket(bucketName) + .contentType("application/octet-stream") + .stream(stream,stream.available(),-1).build(); + minioClient.putObject(objectArgs); + stream.close(); + return minioUrl+bucketName+"/"+relativePath; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java new file mode 100644 index 00000000..5ef9dc6f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/MyClassLoader.java @@ -0,0 +1,92 @@ +package com.jero.common.util; + +/** + * @Author 张代浩 + */ +public class MyClassLoader extends ClassLoader { + public static Class getClassByScn(String className) { + Class myclass = null; + try { + myclass = Class.forName(className); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + throw new RuntimeException(className+" not found!"); + } + return myclass; + } + + // 获得类的全名,包括包名 + public static String getPackPath(Object object) { + // 检查用户传入的参数是否为空 + if (object == null) { + throw new java.lang.IllegalArgumentException("参数不能为空!"); + } + // 获得类的全名,包括包名 + String clsName = object.getClass().getName(); + return clsName; + } + + public static String getAppPath(Class cls) { + // 检查用户传入的参数是否为空 + if (cls == null) { + throw new java.lang.IllegalArgumentException("参数不能为空!"); + } + ClassLoader loader = cls.getClassLoader(); + // 获得类的全名,包括包名 + String clsName = cls.getName() + ".class"; + // 获得传入参数所在的包 + Package pack = cls.getPackage(); + String path = ""; + // 如果不是匿名包,将包名转化为路径 + if (pack != null) { + String packName = pack.getName(); + // 此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库 + if (packName.startsWith("java.") || packName.startsWith("javax.")) { + throw new java.lang.IllegalArgumentException("不要传送系统类!"); + } + // 在类的名称中,去掉包名的部分,获得类的文件名 + clsName = clsName.substring(packName.length() + 1); + // 判定包名是否是简单包名,如果是,则直接将包名转换为路径, + if (packName.indexOf(".") < 0) { + path = packName + "/"; + } else {// 否则按照包名的组成部分,将包名转换为路径 + int start = 0, end = 0; + end = packName.indexOf("."); + while (end != -1) { + path = path + packName.substring(start, end) + "/"; + start = end + 1; + end = packName.indexOf(".", start); + } + path = path + packName.substring(start) + "/"; + } + } + // 调用ClassLoader的getResource方法,传入包含路径信息的类文件名 + java.net.URL url = loader.getResource(path + clsName); + // 从URL对象中获取路径信息 + String realPath = url.getPath(); + // 去掉路径信息中的协议名"file:" + int pos = realPath.indexOf("file:"); + if (pos > -1) { + realPath = realPath.substring(pos + 5); + } + // 去掉路径信息最后包含类文件信息的部分,得到类所在的路径 + pos = realPath.indexOf(path + clsName); + realPath = realPath.substring(0, pos - 1); + // 如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名 + if (realPath.endsWith("!")) { + realPath = realPath.substring(0, realPath.lastIndexOf("/")); + } + /*------------------------------------------------------------ + ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径 + 中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要 + 的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的 + 中文及空格路径 + -------------------------------------------------------------*/ + try { + realPath = java.net.URLDecoder.decode(realPath, "utf-8"); + } catch (Exception e) { + throw new RuntimeException(e); + } + return realPath; + }// getAppPath定义结束 +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java new file mode 100644 index 00000000..8ec5982f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PasswordUtil.java @@ -0,0 +1,210 @@ +package com.jero.common.util; + +import java.security.Key; +import java.security.SecureRandom; +import javax.crypto.Cipher; +import javax.crypto.SecretKey; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.PBEKeySpec; +import javax.crypto.spec.PBEParameterSpec; +public class PasswordUtil { + + /** + * JAVA6支持以下任意一种算法 PBEWITHMD5ANDDES PBEWITHMD5ANDTRIPLEDES + * PBEWITHSHAANDDESEDE PBEWITHSHA1ANDRC2_40 PBKDF2WITHHMACSHA1 + * */ + + /** + * 定义使用的算法为:PBEWITHMD5andDES算法 + */ + public static final String ALGORITHM = "PBEWithMD5AndDES"; + /** + * 自定义密钥 + */ + public static final String Salt = "63293188"; + + + /** + * 定义迭代次数为1000次 + */ + private static final int ITERATIONCOUNT = 1000; + + /** + * 获取加密算法中使用的盐值,解密中使用的盐值必须与加密中使用的相同才能完成操作. 盐长度必须为8字节 + * + * @return byte[] 盐值 + * */ + public static byte[] getSalt() throws Exception { + // 实例化安全随机数 + SecureRandom random = new SecureRandom(); + // 产出盐 + return random.generateSeed(8); + } + + public static byte[] getStaticSalt() { + // 产出盐 + return Salt.getBytes(); + } + + /** + * 根据PBE密码生成一把密钥 + * + * @param password + * 生成密钥时所使用的密码 + * @return Key PBE算法密钥 + * */ + private static Key getPBEKey(String password) { + // 实例化使用的算法 + SecretKeyFactory keyFactory; + SecretKey secretKey = null; + try { + keyFactory = SecretKeyFactory.getInstance(ALGORITHM); + // 设置PBE密钥参数 + PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray()); + // 生成密钥 + secretKey = keyFactory.generateSecret(keySpec); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + return secretKey; + } + + /** + * 加密明文字符串 + * + * @param plaintext + * 待加密的明文字符串 + * @param password + * 生成密钥时所使用的密码 + * @param salt + * 盐值 + * @return 加密后的密文字符串 + * @throws Exception + */ + public static String encrypt(String plaintext, String password, String salt) { + + Key key = getPBEKey(password); + byte[] encipheredData = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + + cipher.init(Cipher.ENCRYPT_MODE, key, parameterSpec); + //update-begin-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 + encipheredData = cipher.doFinal(plaintext.getBytes("utf-8")); + //update-end-author:sccott date:20180815 for:中文作为用户名时,加密的密码windows和linux会得到不同的结果 gitee/issues/IZUD7 + } catch (Exception e) { + } + return bytesToHexString(encipheredData); + } + + /** + * 自定义加密明文字符串 + * + * @param plaintext + * 待加密的明文字符串 + * @return 加密后的密文字符串 + * @throws Exception + */ + public static String encrypt(String plaintext) { + + return encrypt(plaintext, ALGORITHM, Salt); + } + + /** + * 解密密文字符串 + * + * @param ciphertext + * 待解密的密文字符串 + * @param password + * 生成密钥时所使用的密码(如需解密,该参数需要与加密时使用的一致) + * @param salt + * 盐值(如需解密,该参数需要与加密时使用的一致) + * @return 解密后的明文字符串 + * @throws Exception + */ + public static String decrypt(String ciphertext, String password, String salt) { + + Key key = getPBEKey(password); + byte[] passDec = null; + PBEParameterSpec parameterSpec = new PBEParameterSpec(salt.getBytes(), ITERATIONCOUNT); + try { + Cipher cipher = Cipher.getInstance(ALGORITHM); + + cipher.init(Cipher.DECRYPT_MODE, key, parameterSpec); + + passDec = cipher.doFinal(hexStringToBytes(ciphertext)); + } + + catch (Exception e) { + // TODO: handle exception + } + return new String(passDec); + } + + /** + * 自定义解密密文字符串 + * + * @param ciphertext + * 待解密的密文字符串 + * @return 解密后的明文字符串 + * @throws Exception + */ + public static String decrypt(String ciphertext) { + + return decrypt(ciphertext, ALGORITHM, Salt); + } + + /** + * 将字节数组转换为十六进制字符串 + * + * @param src + * 字节数组 + * @return + */ + public static String bytesToHexString(byte[] src) { + StringBuilder stringBuilder = new StringBuilder(""); + if (src == null || src.length <= 0) { + return null; + } + for (int i = 0; i < src.length; i++) { + int v = src[i] & 0xFF; + String hv = Integer.toHexString(v); + if (hv.length() < 2) { + stringBuilder.append(0); + } + stringBuilder.append(hv); + } + return stringBuilder.toString(); + } + + /** + * 将十六进制字符串转换为字节数组 + * + * @param hexString + * 十六进制字符串 + * @return + */ + public static byte[] hexStringToBytes(String hexString) { + if (hexString == null || hexString.equals("")) { + return null; + } + hexString = hexString.toUpperCase(); + int length = hexString.length() / 2; + char[] hexChars = hexString.toCharArray(); + byte[] d = new byte[length]; + for (int i = 0; i < length; i++) { + int pos = i * 2; + d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); + } + return d; + } + + private static byte charToByte(char c) { + return (byte) "0123456789ABCDEF".indexOf(c); + } + + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java new file mode 100644 index 00000000..901e766c --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/PmsUtil.java @@ -0,0 +1,61 @@ +package com.jero.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.util.Date; +import java.util.List; + +@Slf4j +@Component +public class PmsUtil { + + + private static String uploadPath; + + @Value("${jero.path.upload}") + public void setUploadPath(String uploadPath) { + PmsUtil.uploadPath = uploadPath; + } + + public static String saveErrorTxtByList(List msg, String name) { + Date d = new Date(); + String saveDir = "logs" + File.separator + DateUtils.yyyyMMdd.get().format(d) + File.separator; + String saveFullDir = uploadPath + File.separator + saveDir; + + File saveFile = new File(saveFullDir); + if (!saveFile.exists()) { + saveFile.mkdirs(); + } + name += DateUtils.yyyymmddhhmmss.get().format(d) + Math.round(Math.random() * 10000); + String saveFilePath = saveFullDir + name + ".txt"; + + try { + //封装目的地 + BufferedWriter bw = new BufferedWriter(new FileWriter(saveFilePath)); + //遍历集合 + for (String s : msg) { + //写数据 + if (s.indexOf("_") > 0) { + String arr[] = s.split("_"); + bw.write("第" + arr[0] + "行:" + arr[1]); + } else { + bw.write(s); + } + //bw.newLine(); + bw.write("\r\n"); + } + //释放资源 + bw.flush(); + bw.close(); + } catch (Exception e) { + log.info("excel导入生成错误日志文件异常:" + e.getMessage()); + } + return saveDir + name + ".txt"; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RedisUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RedisUtil.java new file mode 100644 index 00000000..0522c087 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RedisUtil.java @@ -0,0 +1,615 @@ +package com.jero.common.util; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import com.jero.common.exception.JeroBootException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.*; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +/** + * redis 工具类 + * @Author Scott + * + */ +@Component +public class RedisUtil { + + @Autowired + private RedisTemplate redisTemplate; + @Autowired + private StringRedisTemplate stringRedisTemplate; + + /** + * 指定缓存失效时间 + * + * @param key 键 + * @param time 时间(秒) + * @return + */ + public boolean expire(String key, long time) { + try { + if (time > 0) { + redisTemplate.expire(key, time, TimeUnit.SECONDS); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据key 获取过期时间 + * + * @param key 键 不能为null + * @return 时间(秒) 返回0代表为永久有效 + */ + public long getExpire(String key) { + return redisTemplate.getExpire(key, TimeUnit.SECONDS); + } + + /** + * 判断key是否存在 + * + * @param key 键 + * @return true 存在 false不存在 + */ + public boolean hasKey(String key) { + try { + return redisTemplate.hasKey(key); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除缓存 + * + * @param key 可以传一个值 或多个 + */ + @SuppressWarnings("unchecked") + public void del(String... key) { + if (key != null && key.length > 0) { + if (key.length == 1) { + redisTemplate.delete(key[0]); + } else { + redisTemplate.delete(CollectionUtils.arrayToList(key)); + } + } + } + + // ============================String============================= + /** + * 普通缓存获取 + * + * @param key 键 + * @return 值 + */ + public Object get(String key) { + return key == null ? null : redisTemplate.opsForValue().get(key); + } + + /** + * 普通缓存放入 + * + * @param key 键 + * @param value 值 + * @return true成功 false失败 + */ + public boolean set(String key, Object value) { + try { + redisTemplate.opsForValue().set(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + + } + + /** + * 普通缓存放入并设置时间 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) time要大于0 如果time小于等于0 将设置无限期 + * @return true成功 false 失败 + */ + public boolean set(String key, Object value, long time) { + try { + if (time > 0) { + redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS); + } else { + set(key, value); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 递增 + * + * @param key 键 + * @param by 要增加几(大于0) + * @return + */ + public long incr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, delta); + } + + /** + * 递减 + * + * @param key 键 + * @param by 要减少几(小于0) + * @return + */ + public long decr(String key, long delta) { + if (delta < 0) { + throw new RuntimeException("递减因子必须大于0"); + } + return redisTemplate.opsForValue().increment(key, -delta); + } + + // ================================Map================================= + /** + * HashGet + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return 值 + */ + public Object hget(String key, String item) { + return redisTemplate.opsForHash().get(key, item); + } + + /** + * 获取hashKey对应的所有键值 + * + * @param key 键 + * @return 对应的多个键值 + */ + public Map hmget(String key) { + return redisTemplate.opsForHash().entries(key); + } + + /** + * HashSet + * + * @param key 键 + * @param map 对应多个键值 + * @return true 成功 false 失败 + */ + public boolean hmset(String key, Map map) { + try { + redisTemplate.opsForHash().putAll(key, map); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * HashSet 并设置时间 + * + * @param key 键 + * @param map 对应多个键值 + * @param time 时间(秒) + * @return true成功 false失败 + */ + public boolean hmset(String key, Map map, long time) { + try { + redisTemplate.opsForHash().putAll(key, map); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value) { + try { + redisTemplate.opsForHash().put(key, item, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 向一张hash表中放入数据,如果不存在将创建 + * + * @param key 键 + * @param item 项 + * @param value 值 + * @param time 时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间 + * @return true 成功 false失败 + */ + public boolean hset(String key, String item, Object value, long time) { + try { + redisTemplate.opsForHash().put(key, item, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 删除hash表中的值 + * + * @param key 键 不能为null + * @param item 项 可以使多个 不能为null + */ + public void hdel(String key, Object... item) { + redisTemplate.opsForHash().delete(key, item); + } + + /** + * 判断hash表中是否有该项的值 + * + * @param key 键 不能为null + * @param item 项 不能为null + * @return true 存在 false不存在 + */ + public boolean hHasKey(String key, String item) { + return redisTemplate.opsForHash().hasKey(key, item); + } + + /** + * hash递增 如果不存在,就会创建一个 并把新增后的值返回 + * + * @param key 键 + * @param item 项 + * @param by 要增加几(大于0) + * @return + */ + public double hincr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, by); + } + + /** + * hash递减 + * + * @param key 键 + * @param item 项 + * @param by 要减少记(小于0) + * @return + */ + public double hdecr(String key, String item, double by) { + return redisTemplate.opsForHash().increment(key, item, -by); + } + + // ============================set============================= + /** + * 根据key获取Set中的所有值 + * + * @param key 键 + * @return + */ + public Set sGet(String key) { + try { + return redisTemplate.opsForSet().members(key); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 根据value从一个set中查询,是否存在 + * + * @param key 键 + * @param value 值 + * @return true 存在 false不存在 + */ + public boolean sHasKey(String key, Object value) { + try { + return redisTemplate.opsForSet().isMember(key, value); + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将数据放入set缓存 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSet(String key, Object... values) { + try { + return redisTemplate.opsForSet().add(key, values); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 将set数据放入缓存 + * + * @param key 键 + * @param time 时间(秒) + * @param values 值 可以是多个 + * @return 成功个数 + */ + public long sSetAndTime(String key, long time, Object... values) { + try { + Long count = redisTemplate.opsForSet().add(key, values); + if (time > 0) { + expire(key, time); + } + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取set缓存的长度 + * + * @param key 键 + * @return + */ + public long sGetSetSize(String key) { + try { + return redisTemplate.opsForSet().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 移除值为value的 + * + * @param key 键 + * @param values 值 可以是多个 + * @return 移除的个数 + */ + public long setRemove(String key, Object... values) { + try { + Long count = redisTemplate.opsForSet().remove(key, values); + return count; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + // ===============================list================================= + + /** + * 获取list缓存的内容 + * + * @param key 键 + * @param start 开始 + * @param end 结束 0 到 -1代表所有值 + * @return + */ + public List lGet(String key, long start, long end) { + try { + return redisTemplate.opsForList().range(key, start, end); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取list缓存的长度 + * + * @param key 键 + * @return + */ + public long lGetListSize(String key) { + try { + return redisTemplate.opsForList().size(key); + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 通过索引 获取list中的值 + * + * @param key 键 + * @param index 索引 index>=0时, 0 表头,1 第二个元素,依次类推;index<0时,-1,表尾,-2倒数第二个元素,依次类推 + * @return + */ + public Object lGetIndex(String key, long index) { + try { + return redisTemplate.opsForList().index(key, index); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value) { + try { + redisTemplate.opsForList().rightPush(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, Object value, long time) { + try { + redisTemplate.opsForList().rightPush(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 将list放入缓存 + * + * @param key 键 + * @param value 值 + * @param time 时间(秒) + * @return + */ + public boolean lSet(String key, List value, long time) { + try { + redisTemplate.opsForList().rightPushAll(key, value); + if (time > 0) { + expire(key, time); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 根据索引修改list中的某条数据 + * + * @param key 键 + * @param index 索引 + * @param value 值 + * @return + */ + public boolean lUpdateIndex(String key, long index, Object value) { + try { + redisTemplate.opsForList().set(key, index, value); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * 移除N个值为value + * + * @param key 键 + * @param count 移除多少个 + * @param value 值 + * @return 移除的个数 + */ + public long lRemove(String key, long count, Object value) { + try { + Long remove = redisTemplate.opsForList().remove(key, count, value); + return remove; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + + /** + * 获取指定前缀的一系列key + * 使用scan命令代替keys, Redis是单线程处理,keys命令在KEY数量较多时, + * 操作效率极低【时间复杂度为O(N)】,该命令一旦执行会严重阻塞线上其它命令的正常请求 + * @param keyPrefix + * @return + */ + private Set keys(String keyPrefix) { + String realKey = keyPrefix + "*"; + + try { + return redisTemplate.execute((RedisCallback>) connection -> { + Set binaryKeys = new HashSet<>(); + Cursor cursor = connection.scan(new ScanOptions.ScanOptionsBuilder().match(realKey).count(Integer.MAX_VALUE).build()); + while (cursor.hasNext()) { + binaryKeys.add(new String(cursor.next())); + } + + return binaryKeys; + }); + } catch (Throwable e) { + e.printStackTrace(); + } + + return null; + } + + /** + * 删除指定前缀的一系列key + * @param keyPrefix + */ + public void removeAll(String keyPrefix) { + try { + Set keys = keys(keyPrefix); + redisTemplate.delete(keys); + } catch (Throwable e) { + e.printStackTrace(); + } + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java new file mode 100644 index 00000000..0a9d5fe9 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ReflectHelper.java @@ -0,0 +1,238 @@ +package com.jero.common.util; + +import lombok.extern.slf4j.Slf4j; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.*; +import java.util.Map.Entry; +import java.util.regex.Pattern; + +/** + * @author 张代浩 + * @desc 通过反射来动态调用get 和 set 方法 + */ +@Slf4j +public class ReflectHelper { + + private Class cls; + + /** + * 传过来的对象 + */ + private Object obj; + + /** + * 存放get方法 + */ + private Hashtable getMethods = null; + /** + * 存放set方法 + */ + private Hashtable setMethods = null; + + /** + * 定义构造方法 -- 一般来说是个pojo + * + * @param o 目标对象 + */ + public ReflectHelper(Object o) { + obj = o; + initMethods(); + } + + /** + * @desc 初始化 + */ + public void initMethods() { + getMethods = new Hashtable(); + setMethods = new Hashtable(); + cls = obj.getClass(); + Method[] methods = cls.getMethods(); + // 定义正则表达式,从方法中过滤出getter / setter 函数. + String gs = "get(\\w+)"; + Pattern getM = Pattern.compile(gs); + String ss = "set(\\w+)"; + Pattern setM = Pattern.compile(ss); + // 把方法中的"set" 或者 "get" 去掉 + String rapl = "$1"; + String param; + for (int i = 0; i < methods.length; ++i) { + Method m = methods[i]; + String methodName = m.getName(); + if (Pattern.matches(gs, methodName)) { + param = getM.matcher(methodName).replaceAll(rapl).toLowerCase(); + getMethods.put(param, m); + } else if (Pattern.matches(ss, methodName)) { + param = setM.matcher(methodName).replaceAll(rapl).toLowerCase(); + setMethods.put(param, m); + } else { + // logger.info(methodName + " 不是getter,setter方法!"); + } + } + } + + /** + * @desc 调用set方法 + */ + public boolean setMethodValue(String property, Object object) { + Method m = setMethods.get(property.toLowerCase()); + if (m != null) { + try { + // 调用目标类的setter函数 + m.invoke(obj, object); + return true; + } catch (Exception ex) { + log.info("invoke getter on " + property + " error: " + ex.toString()); + return false; + } + } + return false; + } + + /** + * @desc 调用set方法 + */ + public Object getMethodValue(String property) { + Object value = null; + Method m = getMethods.get(property.toLowerCase()); + if (m != null) { + try { + /* + * 调用obj类的setter函数 + */ + value = m.invoke(obj, new Object[]{}); + + } catch (Exception ex) { + log.info("invoke getter on " + property + " error: " + ex.toString()); + } + } + return value; + } + + /** + * 把map中的内容全部注入到obj中 + * + * @param data + * @return + */ + public Object setAll(Map data) { + if (data == null || data.keySet().size() <= 0) { + return null; + } + for (Entry entry : data.entrySet()) { + this.setMethodValue(entry.getKey(), entry.getValue()); + } + return obj; + } + + /** + * 把map中的内容全部注入到obj中 + * + * @param o + * @param data + * @return + */ + public static Object setAll(Object o, Map data) { + ReflectHelper reflectHelper = new ReflectHelper(o); + reflectHelper.setAll(data); + return o; + } + + /** + * 把map中的内容全部注入到新实例中 + * + * @param clazz + * @param data + * @return + */ + @SuppressWarnings("unchecked") + public static T setAll(Class clazz, Map data) { + T o = null; + try { + o = clazz.newInstance(); + } catch (Exception e) { + e.printStackTrace(); + o = null; + return o; + } + return (T) setAll(o, data); + } + + /** + * 根据传入的class将mapList转换为实体类list + * + * @param mapist + * @param clazz + * @return + */ + public static List transList2Entrys(List> mapist, Class clazz) { + List list = new ArrayList(); + if (mapist != null && mapist.size() > 0) { + for (Map data : mapist) { + list.add(ReflectHelper.setAll(clazz, data)); + } + } + return list; + } + + /** + * 根据属性名获取属性值 + */ + public static Object getFieldValueByName(String fieldName, Object o) { + try { + String firstLetter = fieldName.substring(0, 1).toUpperCase(); + String getter = "get" + firstLetter + fieldName.substring(1); + Method method = o.getClass().getMethod(getter, new Class[]{}); + Object value = method.invoke(o, new Object[]{}); + return value; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 获取属性名数组 + */ + public static String[] getFiledName(Object o) { + Field[] fields = o.getClass().getDeclaredFields(); + String[] fieldNames = new String[fields.length]; + for (int i = 0; i < fields.length; i++) { + //log.info(fields[i].getType()); + fieldNames[i] = fields[i].getName(); + } + return fieldNames; + } + + /** + * 获取属性类型(type),属性名(name),属性值(value)的map组成的list + */ + public static List getFiledsInfo(Object o) { + Field[] fields = o.getClass().getDeclaredFields(); + String[] fieldNames = new String[fields.length]; + List list = new ArrayList(); + Map infoMap = null; + for (int i = 0; i < fields.length; i++) { + infoMap = new HashMap(); + infoMap.put("type", fields[i].getType().toString()); + infoMap.put("name", fields[i].getName()); + infoMap.put("value", getFieldValueByName(fields[i].getName(), o)); + list.add(infoMap); + } + return list; + } + + /** + * 获取对象的所有属性值,返回一个对象数组 + */ + public static Object[] getFiledValues(Object o) { + String[] fieldNames = getFiledName(o); + Object[] value = new Object[fieldNames.length]; + for (int i = 0; i < fieldNames.length; i++) { + value[i] = getFieldValueByName(fieldNames[i], o); + } + return value; + } + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java new file mode 100644 index 00000000..fa573b45 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestDesformUtil.java @@ -0,0 +1,121 @@ +package com.jero.common.util; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.vo.Result; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; + +/** + * 通过 RESTful 风格的接口操纵 desform 里的数据 + * + * @author sunjianlei + */ +public class RestDesformUtil { + + private static String domain = null; + private static String path = null; + + static { + domain = SpringContextUtils.getDomain(); + path = oConvertUtils.getString(SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path")); + } + + /** + * 查询数据 + * + * @param desformCode + * @param dataId + * @param token + * @return + */ + public static Result queryOne(String desformCode, String dataId, String token) { + String url = getBaseUrl(desformCode, dataId).toString(); + HttpHeaders headers = getHeaders(token); + ResponseEntity result = RestUtil.request(url, HttpMethod.GET, headers, null, null, JSONObject.class); + return packageReturn(result); + } + + /** + * 新增数据 + * + * @param desformCode + * @param formData + * @param token + * @return + */ + public static Result addOne(String desformCode, JSONObject formData, String token) { + return addOrEditOne(desformCode, formData, token, HttpMethod.POST); + } + + /** + * 修改数据 + * + * @param desformCode + * @param formData + * @param token + * @return + */ + public static Result editOne(String desformCode, JSONObject formData, String token) { + return addOrEditOne(desformCode, formData, token, HttpMethod.PUT); + } + + private static Result addOrEditOne(String desformCode, JSONObject formData, String token, HttpMethod method) { + String url = getBaseUrl(desformCode).toString(); + HttpHeaders headers = getHeaders(token); + ResponseEntity result = RestUtil.request(url, method, headers, null, formData, JSONObject.class); + return packageReturn(result); + } + + /** + * 删除数据 + * + * @param desformCode + * @param dataId + * @param token + * @return + */ + public static Result removeOne(String desformCode, String dataId, String token) { + String url = getBaseUrl(desformCode, dataId).toString(); + HttpHeaders headers = getHeaders(token); + ResponseEntity result = RestUtil.request(url, HttpMethod.DELETE, headers, null, null, JSONObject.class); + return packageReturn(result); + } + + private static Result packageReturn(ResponseEntity result) { + if (result.getBody() != null) { + return result.getBody().toJavaObject(Result.class); + } + return Result.error("操作失败"); + } + + private static StringBuilder getBaseUrl() { + StringBuilder builder = new StringBuilder(domain).append(path); + builder.append("/desform/api"); + return builder; + } + + private static StringBuilder getBaseUrl(String desformCode, String dataId) { + StringBuilder builder = getBaseUrl(); + builder.append("/").append(desformCode); + if (dataId != null) { + builder.append("/").append(dataId); + } + return builder; + } + + private static StringBuilder getBaseUrl(String desformCode) { + return getBaseUrl(desformCode, null); + } + + private static HttpHeaders getHeaders(String token) { + HttpHeaders headers = new HttpHeaders(); + String mediaType = MediaType.APPLICATION_JSON_UTF8_VALUE; + headers.setContentType(MediaType.parseMediaType(mediaType)); + headers.set("Accept", mediaType); + headers.set("X-Access-Token", token); + return headers; + } + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java new file mode 100644 index 00000000..450364d7 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/RestUtil.java @@ -0,0 +1,257 @@ +package com.jero.common.util; + +import com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.*; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import java.util.Map; + +/** + * 调用 Restful 接口 Util + * + * @author sunjianlei + */ +@Slf4j +public class RestUtil { + + private static String domain = null; + + public static String getDomain() { + if (domain == null) { + domain = SpringContextUtils.getDomain(); + } + return domain; + } + + public static String path = null; + + public static String getPath() { + if (path == null) { + path = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("server.servlet.context-path"); + } + return oConvertUtils.getString(path); + } + + public static String getBaseUrl() { + String basepath = getDomain() + getPath(); + log.info(" RestUtil.getBaseUrl: " + basepath); + return basepath; + } + + /** + * RestAPI 调用器 + */ + private final static RestTemplate RT; + + static { + SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory(); + requestFactory.setConnectTimeout(3000); + requestFactory.setReadTimeout(3000); + RT = new RestTemplate(requestFactory); + // 解决乱码问题 + RT.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8)); + } + + public static RestTemplate getRestTemplate() { + return RT; + } + + /** + * 发送 get 请求 + */ + public static JSONObject get(String url) { + return getNative(url, null, null).getBody(); + } + + /** + * 发送 get 请求 + */ + public static JSONObject get(String url, JSONObject variables) { + return getNative(url, variables, null).getBody(); + } + + /** + * 发送 get 请求 + */ + public static JSONObject get(String url, JSONObject variables, JSONObject params) { + return getNative(url, variables, params).getBody(); + } + + /** + * 发送 get 请求,返回原生 ResponseEntity 对象 + */ + public static ResponseEntity getNative(String url, JSONObject variables, JSONObject params) { + return request(url, HttpMethod.GET, variables, params); + } + + /** + * 发送 Post 请求 + */ + public static JSONObject post(String url) { + return postNative(url, null, null).getBody(); + } + + /** + * 发送 Post 请求 + */ + public static JSONObject post(String url, JSONObject params) { + return postNative(url, null, params).getBody(); + } + + /** + * 发送 Post 请求 + */ + public static JSONObject post(String url, JSONObject variables, JSONObject params) { + return postNative(url, variables, params).getBody(); + } + + /** + * 发送 POST 请求,返回原生 ResponseEntity 对象 + */ + public static ResponseEntity postNative(String url, JSONObject variables, JSONObject params) { + return request(url, HttpMethod.POST, variables, params); + } + + /** + * 发送 put 请求 + */ + public static JSONObject put(String url) { + return putNative(url, null, null).getBody(); + } + + /** + * 发送 put 请求 + */ + public static JSONObject put(String url, JSONObject params) { + return putNative(url, null, params).getBody(); + } + + /** + * 发送 put 请求 + */ + public static JSONObject put(String url, JSONObject variables, JSONObject params) { + return putNative(url, variables, params).getBody(); + } + + /** + * 发送 put 请求,返回原生 ResponseEntity 对象 + */ + public static ResponseEntity putNative(String url, JSONObject variables, JSONObject params) { + return request(url, HttpMethod.PUT, variables, params); + } + + /** + * 发送 delete 请求 + */ + public static JSONObject delete(String url) { + return deleteNative(url, null, null).getBody(); + } + + /** + * 发送 delete 请求 + */ + public static JSONObject delete(String url, JSONObject variables, JSONObject params) { + return deleteNative(url, variables, params).getBody(); + } + + /** + * 发送 delete 请求,返回原生 ResponseEntity 对象 + */ + public static ResponseEntity deleteNative(String url, JSONObject variables, JSONObject params) { + return request(url, HttpMethod.DELETE, null, variables, params, JSONObject.class); + } + + /** + * 发送请求 + */ + public static ResponseEntity request(String url, HttpMethod method, JSONObject variables, JSONObject params) { + return request(url, method, getHeaderApplicationJson(), variables, params, JSONObject.class); + } + + /** + * 发送请求 + * + * @param url 请求地址 + * @param method 请求方式 + * @param headers 请求头 可空 + * @param variables 请求url参数 可空 + * @param params 请求body参数 可空 + * @param responseType 返回类型 + * @return ResponseEntity + */ + public static ResponseEntity request(String url, HttpMethod method, HttpHeaders headers, JSONObject variables, Object params, Class responseType) { + log.info(" RestUtil --- request --- url = "+ url); + if (StringUtils.isEmpty(url)) { + throw new RuntimeException("url 不能为空"); + } + if (method == null) { + throw new RuntimeException("method 不能为空"); + } + if (headers == null) { + headers = new HttpHeaders(); + } + // 请求体 + String body = ""; + if (params != null) { + if (params instanceof JSONObject) { + body = ((JSONObject) params).toJSONString(); + + } else { + body = params.toString(); + } + } + // 拼接 url 参数 + if (variables != null) { + url += ("?" + asUrlVariables(variables)); + } + // 发送请求 + HttpEntity request = new HttpEntity<>(body, headers); + return RT.exchange(url, method, request, responseType); + } + + /** + * 获取JSON请求头 + */ + public static HttpHeaders getHeaderApplicationJson() { + return getHeader(MediaType.APPLICATION_JSON_UTF8_VALUE); + } + + /** + * 获取请求头 + */ + public static HttpHeaders getHeader(String mediaType) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.parseMediaType(mediaType)); + headers.add("Accept", mediaType); + return headers; + } + + /** + * 将 JSONObject 转为 a=1&b=2&c=3...&n=n 的形式 + */ + public static String asUrlVariables(JSONObject variables) { + Map source = variables.getInnerMap(); + Iterator it = source.keySet().iterator(); + StringBuilder urlVariables = new StringBuilder(); + while (it.hasNext()) { + String key = it.next(); + String value = ""; + Object object = source.get(key); + if (object != null) { + if (!StringUtils.isEmpty(object.toString())) { + value = object.toString(); + } + } + urlVariables.append("&").append(key).append("=").append(value); + } + // 去掉第一个& + return urlVariables.substring(1); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SimpleFormat.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SimpleFormat.java new file mode 100644 index 00000000..9f09834f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SimpleFormat.java @@ -0,0 +1,173 @@ +package com.jero.common.util; + +import java.text.*; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; + +public class SimpleFormat { + public SimpleFormat() { + } + /** + * 下划线字符串转换为驼峰字符串 + * @date 2021/4/6 9:55 + * @param str 字符串 + * @return java.lang.String + */ + public static String underlineToHump(String str) { + StringBuilder sb = new StringBuilder(); + String[] strArray = str.split("_"); + String[] newStringArray = strArray; + int length = strArray.length; + + for(int i = 0; i < length; ++i) { + String s = newStringArray[i]; + // 原字符串不包含 - + if (!str.contains("_")) { + sb.append(s); + //首次添加不首字母大写 + } else if (sb.length() == 0) { + sb.append(s.toLowerCase()); + } else { + // 首字母大写 + sb.append(s.substring(0, 1).toUpperCase()); + sb.append(s.substring(1).toLowerCase()); + } + } + + return sb.toString(); + } + /** + * 驼峰字符串转换为下划线字符串 + * @date 2021/4/6 10:01 + * @param str 字符串 + * @return java.lang.String + */ + public static String humpToUnderline(String str) { + StringBuilder sb = new StringBuilder(str); + // 随着下划线的增加,偏移量也会增加 + int addUnderlineCount = 0; + // 不包含下划线 + if (!str.contains("_")) { + for(int i = 0; i < str.length(); ++i) { + // 如果字母大写 + if (Character.isUpperCase(str.charAt(i))) { + sb.insert(i + addUnderlineCount, "_"); + ++addUnderlineCount; + } + } + } + + return sb.toString().toLowerCase().startsWith("_") ? sb.toString().toLowerCase().substring(1) : sb.toString().toLowerCase(); + } + /** + * 驼峰字符串转换为下划线字符串 ps:方法可能重复了 + * @date 2021/4/6 10:17 + * @param str 字符串 + * @return java.lang.String + */ + public static String humpToShortbar(String str) { + StringBuilder sb = new StringBuilder(str); + int addUnderlineCount = 0; + if (!str.contains("-")) { + for(int i = 0; i < str.length(); ++i) { + if (Character.isUpperCase(str.charAt(i))) { + sb.insert(i + addUnderlineCount, "-"); + ++addUnderlineCount; + } + } + } + + return sb.toString().toLowerCase().startsWith("-") ? sb.toString().toLowerCase().substring(1) : sb.toString().toLowerCase(); + } + + public String number(Object obj) { + obj = obj != null && obj.toString().length() != 0 ? obj : 0; + return obj.toString().equalsIgnoreCase("NaN") ? "NaN" : (new DecimalFormat("0.00")).format(Double.parseDouble(obj.toString())); + } + + public String number(Object obj, String pattern) { + obj = obj != null && obj.toString().length() != 0 ? obj : 0; + return obj.toString().equalsIgnoreCase("NaN") ? "NaN" : (new DecimalFormat(pattern)).format(Double.parseDouble(obj.toString())); + } + + public String round(Object obj) { + obj = obj != null && obj.toString().length() != 0 ? obj : 0; + return obj.toString().equalsIgnoreCase("NaN") ? "NaN" : (new DecimalFormat("0")).format(Double.parseDouble(obj.toString())); + } + + public String currency(Object obj) { + obj = obj != null && obj.toString().length() != 0 ? obj : 0; + return NumberFormat.getCurrencyInstance(Locale.CHINA).format(obj); + } + /** + * timeStamp转换为日期格式化String + * @date 2021/4/6 10:22 + * @param obj + * @param pattern + * @return java.lang.String + */ + public String timestampToString(Object obj, String pattern) { + if (obj == null) { + return ""; + } else { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM月 -yy"); + SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat(pattern); + Date date = null; + + try { + date = simpleDateFormat.parse(obj.toString()); + } catch (ParseException e) { + e.printStackTrace(); + return "error"; + } + + return simpleDateFormat1.format(date); + } + } + + public String percent(Object obj) { + obj = obj != null && obj.toString().length() != 0 ? obj : 0; + return obj.toString().equalsIgnoreCase("NaN") ? "" : NumberFormat.getPercentInstance(Locale.CHINA).format(obj); + } + + public String date(Object obj, String pattern) { + return obj == null ? "" : (new SimpleDateFormat(pattern)).format(obj); + } + + public String date(Object obj) { + return obj == null ? "" : DateFormat.getDateInstance(1, Locale.CHINA).format(obj); + } + + public String time(Object obj) { + return obj == null ? "" : DateFormat.getTimeInstance(3, Locale.CHINA).format(obj); + } + + public String datetime(Object obj) { + return obj == null ? "" : DateFormat.getDateTimeInstance(1, 3, Locale.CHINA).format(obj); + } + /** + * 将字符串集合转换为 'string', 间隔格式的字符串 + * @date 2021/4/6 9:41 + * @param stringList 字符串集合 + * @return java.lang.String + */ + public String getInStrs(List stringList) { + StringBuffer sb = new StringBuffer(); + Iterator iterator = stringList.iterator(); + + while(iterator.hasNext()) { + String s = (String)iterator.next(); + sb.append("'" + s + "',"); + } + + String string = sb.toString(); + if ("".equals(string) && !string.endsWith(",")) { + return null; + } else { + string = string.substring(0, string.length() - 1); + return string; + } + } +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java new file mode 100644 index 00000000..cd549d0e --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SpringContextUtils.java @@ -0,0 +1,94 @@ +package com.jero.common.util; + +import javax.servlet.http.HttpServletRequest; + +import com.jero.common.constant.ServiceNameConstants; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +@Component +public class SpringContextUtils implements ApplicationContextAware { + + /** + * 上下文对象实例 + */ + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringContextUtils.applicationContext = applicationContext; + } + + /** + * 获取applicationContext + * + * @return + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 获取HttpServletRequest + */ + public static HttpServletRequest getHttpServletRequest() { + return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + } + + /** + * 获取项目根路径 basePath + */ + public static String getDomain(){ + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + //微服务情况下,获取gateway的basePath + String basePath = request.getHeader(ServiceNameConstants.X_GATEWAY_BASE_PATH); + if(oConvertUtils.isNotEmpty(basePath)){ + return basePath; + }else{ + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + } + + public static String getOrigin(){ + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader("Origin"); + } + + /** + * 通过name获取 Bean. + * + * @param name + * @return + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * + * @param clazz + * @param + * @return + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * + * @param name + * @param clazz + * @param + * @return + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java new file mode 100644 index 00000000..a635ffe3 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SqlInjectionUtil.java @@ -0,0 +1,139 @@ +package com.jero.common.util; + +import cn.hutool.crypto.SecureUtil; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.exception.JeroBootException; +import javax.servlet.http.HttpServletRequest; + +/** + * sql注入处理工具类 + * + * @author zhoujf + */ +@Slf4j +public class SqlInjectionUtil { + /** + * sign 用于表字典加签的盐值【SQL漏洞】 + * (上线修改值 20200501,同步修改前端的盐值) + */ + private final static String TABLE_DICT_SIGN_SALT = "20200501"; + private final static String xssStr = "'|and |exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |;|or |+"; + + /* + * 针对表字典进行额外的sign签名校验(增加安全机制) + * @param dictCode: + * @param sign: + * @param request: + * @Return: void + */ + public static void checkDictTableSign(String dictCode, String sign, HttpServletRequest request) { + //表字典SQL注入漏洞,签名校验 + String accessToken = request.getHeader("X-Access-Token"); + String signStr = dictCode + SqlInjectionUtil.TABLE_DICT_SIGN_SALT + accessToken; + String javaSign = SecureUtil.md5(signStr); + if (!javaSign.equals(sign)) { + log.error("表字典,SQL注入漏洞签名校验失败 :" + sign + "!=" + javaSign+ ",dictCode=" + dictCode); + throw new JeroBootException("无权限访问!"); + } + log.info(" 表字典,SQL注入漏洞签名校验成功!sign=" + sign + ",dictCode=" + dictCode); + } + + + /** + * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param value + * @return + */ + public static void filterContent(String value) { + if (value == null || "".equals(value)) { + return; + } + // 统一转为小写 + value = value.toLowerCase(); + String[] xssArr = xssStr.split("\\|"); + for (int i = 0; i < xssArr.length; i++) { + if (value.indexOf(xssArr[i]) > -1) { + log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); + log.error("请注意,值可能存在SQL注入风险!---> {}", value); + throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + } + } + return; + } + + /** + * sql注入过滤处理,遇到注入关键字抛异常 + * + * @param values + * @return + */ + public static void filterContent(String[] values) { + String[] xssArr = xssStr.split("\\|"); + for (String value : values) { + if (value == null || "".equals(value)) { + return; + } + // 统一转为小写 + value = value.toLowerCase(); + for (int i = 0; i < xssArr.length; i++) { + if (value.indexOf(xssArr[i]) > -1) { + log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); + log.error("请注意,值可能存在SQL注入风险!---> {}", value); + throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + } + } + } + return; + } + + /** + * @特殊方法(不通用) 仅用于字典条件SQL参数,注入过滤 + * @param value + * @return + */ + @Deprecated + public static void specialFilterContent(String value) { + String specialXssStr = " exec | insert | select | delete | update | drop | count | chr | mid | master | truncate | char | declare |;|+|"; + String[] xssArr = specialXssStr.split("\\|"); + if (value == null || "".equals(value)) { + return; + } + // 统一转为小写 + value = value.toLowerCase(); + for (int i = 0; i < xssArr.length; i++) { + if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { + log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); + log.error("请注意,值可能存在SQL注入风险!---> {}", value); + throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + } + } + return; + } + + + /** + * @特殊方法(不通用) 仅用于Online报表SQL解析,注入过滤 + * @param value + * @return + */ + @Deprecated + public static void specialFilterContentForOnlineReport(String value) { + String specialXssStr = " exec | insert | delete | update | drop | chr | mid | master | truncate | char | declare |"; + String[] xssArr = specialXssStr.split("\\|"); + if (value == null || "".equals(value)) { + return; + } + // 统一转为小写 + value = value.toLowerCase(); + for (int i = 0; i < xssArr.length; i++) { + if (value.indexOf(xssArr[i]) > -1 || value.startsWith(xssArr[i].trim())) { + log.error("请注意,存在SQL注入关键词---> {}", xssArr[i]); + log.error("请注意,值可能存在SQL注入风险!---> {}", value); + throw new RuntimeException("请注意,值可能存在SQL注入风险!--->" + value); + } + } + return; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SysAnnmentTypeEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SysAnnmentTypeEnum.java new file mode 100644 index 00000000..93fc313f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/SysAnnmentTypeEnum.java @@ -0,0 +1,70 @@ +package com.jero.common.util; + +/** + * 系统公告自定义跳转方式 + */ +public enum SysAnnmentTypeEnum { + /** + * 邮件跳转组件 + */ + EMAIL("email", "component", "modules/eoa/email/modals/EoaEmailInForm"), + /** + * 工作流跳转链接我的办公 + */ + BPM("bpm", "url", "/bpm/task/MyTaskList"); + + /** + * 业务类型(email:邮件 bpm:流程) + */ + private String type; + /** + * 打开方式 组件:component 路由:url + */ + private String openType; + /** + * 组件/路由 地址 + */ + private String openPage; + + SysAnnmentTypeEnum(String type, String openType, String openPage) { + this.type = type; + this.openType = openType; + this.openPage = openPage; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getOpenType() { + return openType; + } + + public void setOpenType(String openType) { + this.openType = openType; + } + + public String getOpenPage() { + return openPage; + } + + public void setOpenPage(String openPage) { + this.openPage = openPage; + } + + public static SysAnnmentTypeEnum getByType(String type) { + if (oConvertUtils.isEmpty(type)) { + return null; + } + for (SysAnnmentTypeEnum val : values()) { + if (val.getType().equals(type)) { + return val; + } + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java new file mode 100644 index 00000000..810f8e95 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/TokenUtils.java @@ -0,0 +1,128 @@ +package com.jero.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.AuthenticationException; +import com.jero.common.api.CommonAPI; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; + +import javax.servlet.http.HttpServletRequest; + +/** + * @Author scott + * @Date 2019/9/23 14:12 + * @Description: 编程校验token有效性 + */ +@Slf4j +public class TokenUtils { + + /** + * 获取 request 里传递的 token + * + * @param request + * @return + */ + public static String getTokenByRequest(HttpServletRequest request) { + String token = request.getParameter("token"); + if (token == null) { + token = request.getHeader("X-Access-Token"); + } + return token; + } + + /** + * 验证Token + */ + public static boolean verifyToken(HttpServletRequest request, CommonAPI commonAPI, RedisUtil redisUtil) { + log.debug(" -- url --" + request.getRequestURL()); + String token = getTokenByRequest(request); + + if (StringUtils.isBlank(token)) { + throw new AuthenticationException("Token不能为空!"); + } + + // 解密获得username,用于和数据库进行对比 + String username = JwtUtil.getUsername(token); + if (username == null) { + throw new AuthenticationException("Token非法无效!"); + } + + // 查询用户信息 + LoginUser user = commonAPI.getUserByName(username); + if (user == null) { + throw new AuthenticationException("用户不存在!"); + } + // 判断用户状态 + if (user.getStatus() != 1) { + throw new AuthenticationException("账号已锁定,请联系管理员!"); + } + // 校验token是否超时失效 & 或者账号密码是否错误 + if (!jwtTokenRefresh(token, username, user.getPassword(), redisUtil)) { + throw new AuthenticationException("Token失效,请重新登录"); + } + return true; + } + + /** + * 刷新token(保证用户在线操作不掉线) + * @param token + * @param userName + * @param passWord + * @param redisUtil + * @return + */ + private static boolean jwtTokenRefresh(String token, String userName, String passWord, RedisUtil redisUtil) { + String cacheToken = String.valueOf(redisUtil.get(CommonConstant.PREFIX_USER_TOKEN + token)); + if (oConvertUtils.isNotEmpty(cacheToken)) { + // 校验token有效性 + if (!JwtUtil.verify(cacheToken, userName, passWord)) { + String newAuthorization = JwtUtil.sign(userName, passWord); + // 设置Toekn缓存有效时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, newAuthorization); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); + } + //update-begin--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 +// else { +// redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, cacheToken); +// // 设置超时时间 +// redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); +// } + //update-end--Author:scott Date:20191005 for:解决每次请求,都重写redis中 token缓存问题 + return true; + } + return false; + } + + /** + * 验证Token + */ + public static boolean verifyToken(String token, CommonAPI commonAPI, RedisUtil redisUtil) { + if (StringUtils.isBlank(token)) { + throw new AuthenticationException("token不能为空!"); + } + + // 解密获得username,用于和数据库进行对比 + String username = JwtUtil.getUsername(token); + if (username == null) { + throw new AuthenticationException("token非法无效!"); + } + + // 查询用户信息 + LoginUser user = commonAPI.getUserByName(username); + if (user == null) { + throw new AuthenticationException("用户不存在!"); + } + // 判断用户状态 + if (user.getStatus() != 1) { + throw new AuthenticationException("账号已被锁定,请联系管理员!"); + } + // 校验token是否超时失效 & 或者账号密码是否错误 + if (!jwtTokenRefresh(token, username, user.getPassword(), redisUtil)) { + throw new AuthenticationException("Token失效,请重新登录!"); + } + return true; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java new file mode 100644 index 00000000..04efe742 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/UUIDGenerator.java @@ -0,0 +1,95 @@ +package com.jero.common.util; + + +import java.net.InetAddress; + +/** + * + * @Author 张代浩 + * + */ +public class UUIDGenerator { + + + /** + * 产生一个32位的UUID + * + * @return + */ + + public static String generate() { + return new StringBuilder(32).append(format(getIP())).append( + format(getJVM())).append(format(getHiTime())).append( + format(getLoTime())).append(format(getCount())).toString(); + + } + + private static final int IP; + static { + int ipadd; + try { + ipadd = toInt(InetAddress.getLocalHost().getAddress()); + } catch (Exception e) { + ipadd = 0; + } + IP = ipadd; + } + + private static short counter = (short) 0; + + private static final int JVM = (int) (System.currentTimeMillis() >>> 8); + + private final static String format(int intval) { + String formatted = Integer.toHexString(intval); + StringBuilder buf = new StringBuilder("00000000"); + buf.replace(8 - formatted.length(), 8, formatted); + return buf.toString(); + } + + private final static String format(short shortval) { + String formatted = Integer.toHexString(shortval); + StringBuilder buf = new StringBuilder("0000"); + buf.replace(4 - formatted.length(), 4, formatted); + return buf.toString(); + } + + private final static int getJVM() { + return JVM; + } + + private final static short getCount() { + synchronized (UUIDGenerator.class) { + if (counter < 0) { + counter = 0; + } + return counter++; + } + } + + /** + * Unique in a local network + */ + private final static int getIP() { + return IP; + } + + /** + * Unique down to millisecond + */ + private final static short getHiTime() { + return (short) (System.currentTimeMillis() >>> 32); + } + + private final static int getLoTime() { + return (int) System.currentTimeMillis(); + } + + private final static int toInt(byte[] bytes) { + int result = 0; + for (int i = 0; i < 4; i++) { + result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i]; + } + return result; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ValidUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ValidUtil.java new file mode 100644 index 00000000..d17c252c --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/ValidUtil.java @@ -0,0 +1,42 @@ +package com.jero.common.util; + +import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.validator.HibernateValidator; + +import javax.validation.ConstraintViolation; +import javax.validation.Validation; +import javax.validation.Validator; +import java.util.Set; + +/** + * 手动校验@Vaild方法 + * @author liJiaRao + * @date 2021-08-05 15:09 + */ +@Slf4j +public class ValidUtil { + + private static Validator validator; + + static { + validator = Validation.byProvider(HibernateValidator.class) + .configure() + // 快速失败 + .failFast(true) + .buildValidatorFactory().getValidator(); + } + + /** + * 手动校验@Vaild并抛出异常信息 + * + * @param object 待校验对象 + * @param groups 待校验的组 + */ + public static void validate(Object object, Class... groups){ + Set> set = validator.validate(object,groups); + for (ConstraintViolation constraintViolation : set) { + throw new JeroBootException(constraintViolation.getMessage()); + } + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java new file mode 100644 index 00000000..c6269402 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/YouBianCodeUtil.java @@ -0,0 +1,165 @@ +package com.jero.common.util; + +import io.netty.util.internal.StringUtil; + +/** + * 流水号生成规则(按默认规则递增,数字从1-99开始递增,数字到99,递增字母;位数不够增加位数) + * A001 + * A001A002 + * @Author zhangdaihao + * + */ +public class YouBianCodeUtil { + + // 数字位数(默认生成3位的数字) + + private static final int numLength = 2;//代表数字位数 + + public static final int zhanweiLength = 1+numLength; + + /** + * 根据前一个code,获取同级下一个code + * 例如:当前最大code为D01A04,下一个code为:D01A05 + * + * @param code + * @return + */ + public static synchronized String getNextYouBianCode(String code) { + String newcode = ""; + if (code == null || code =="") { + String zimu = "A"; + String num = getStrNum(1); + newcode = zimu + num; + } else { + String before_code = code.substring(0, code.length() - 1- numLength); + String after_code = code.substring(code.length() - 1 - numLength,code.length()); + char after_code_zimu = after_code.substring(0, 1).charAt(0); + Integer after_code_num = Integer.parseInt(after_code.substring(1)); + + String nextNum = ""; + char nextZimu = 'A'; + // 先判断数字等于999*,则计数从1重新开始,递增 + if (after_code_num == getMaxNumByLength(numLength)) { + nextNum = getNextStrNum(0); + } else { + nextNum = getNextStrNum(after_code_num); + } + // 先判断数字等于999*,则字母从A重新开始,递增 + if(after_code_num == getMaxNumByLength(numLength)) { + nextZimu = getNextZiMu(after_code_zimu); + }else{ + nextZimu = after_code_zimu; + } + + // 例如Z99,下一个code就是Z99A01 + if ('Z' == after_code_zimu && getMaxNumByLength(numLength) == after_code_num) { + newcode = code + (nextZimu + nextNum); + } else { + newcode = before_code + (nextZimu + nextNum); + } + } + return newcode; + + } + + /** + * 根据父亲code,获取下级的下一个code + * + * 例如:父亲CODE:A01 + * 当前CODE:A01B03 + * 获取的code:A01B04 + * + * @param parentCode 上级code + * @param localCode 同级code + * @return + */ + public static synchronized String getSubYouBianCode(String parentCode,String localCode) { + if(localCode!=null && localCode!=""){ + +// return parentCode + getNextYouBianCode(localCode); + return getNextYouBianCode(localCode); + + }else{ + parentCode = parentCode + "A"+ getNextStrNum(0); + } + return parentCode; + } + + + + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getNextStrNum(int num) { + return getStrNum(getNextNum(num)); + } + + /** + * 将数字前面位数补零 + * + * @param num + * @return + */ + private static String getStrNum(int num) { + String s = String.format("%0" + numLength + "d", num); + return s; + } + + /** + * 递增获取下个数字 + * + * @param num + * @return + */ + private static int getNextNum(int num) { + num++; + return num; + } + + /** + * 递增获取下个字母 + * + * @param num + * @return + */ + private static char getNextZiMu(char zimu) { + if (zimu == 'Z') { + return 'A'; + } + zimu++; + return zimu; + } + + /** + * 根据数字位数获取最大值 + * @param length + * @return + */ + private static int getMaxNumByLength(int length){ + if(length==0){ + return 0; + } + String max_num = ""; + for (int i=0;i dbSources = new HashMap<>(); + private static RedisTemplate redisTemplate; + + private static RedisTemplate getRedisTemplate() { + if (redisTemplate == null) { + redisTemplate = (RedisTemplate) SpringContextUtils.getBean("redisTemplate"); + } + return redisTemplate; + } + + /** + * 获取多数据源缓存 + * + * @param dbKey + * @return + */ + public static DynamicDataSourceModel getCacheDynamicDataSourceModel(String dbKey) { + String redisCacheKey = CacheConstant.SYS_DYNAMICDB_CACHE + dbKey; + if (getRedisTemplate().hasKey(redisCacheKey)) { + return (DynamicDataSourceModel) getRedisTemplate().opsForValue().get(redisCacheKey); + } + CommonAPI commonAPI = SpringContextUtils.getBean(CommonAPI.class); + DynamicDataSourceModel dbSource = commonAPI.getDynamicDbSourceByCode(dbKey); + if (dbSource != null) { + getRedisTemplate().opsForValue().set(redisCacheKey, dbSource); + } + return dbSource; + } + + public static DruidDataSource getCacheBasicDataSource(String dbKey) { + return dbSources.get(dbKey); + } + + /** + * put 数据源缓存 + * + * @param dbKey + * @param db + */ + public static void putCacheBasicDataSource(String dbKey, DruidDataSource db) { + dbSources.put(dbKey, db); + } + + /** + * 清空数据源缓存 + */ + public static void cleanAllCache() { + //关闭数据源连接 + for(Map.Entry entry : dbSources.entrySet()){ + String dbkey = entry.getKey(); + DruidDataSource druidDataSource = entry.getValue(); + if(druidDataSource!=null && druidDataSource.isEnable()){ + druidDataSource.close(); + } + //清空redis缓存 + getRedisTemplate().delete(CacheConstant.SYS_DYNAMICDB_CACHE + dbkey); + } + //清空缓存 + dbSources.clear(); + } + + public static void removeCache(String dbKey) { + //关闭数据源连接 + DruidDataSource druidDataSource = dbSources.get(dbKey); + if(druidDataSource!=null && druidDataSource.isEnable()){ + druidDataSource.close(); + } + //清空redis缓存 + getRedisTemplate().delete(CacheConstant.SYS_DYNAMICDB_CACHE + dbKey); + //清空缓存 + dbSources.remove(dbKey); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java new file mode 100644 index 00000000..d87da3c2 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/DynamicDBUtil.java @@ -0,0 +1,300 @@ +package com.jero.common.util.dynamic.db; + +import com.alibaba.druid.pool.DruidDataSource; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ArrayUtils; +import com.jero.common.exception.JeroBootException; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.DynamicDataSourceModel; +import com.jero.common.util.ReflectHelper; +import com.jero.common.util.oConvertUtils; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; + +import javax.sql.DataSource; +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Spring JDBC 实时数据库访问 + * + * @author chenguobin + * @version 1.0 + * @date 2014-09-05 + */ +@Slf4j +public class DynamicDBUtil { + + /** + * 获取数据源【最底层方法,不要随便调用】 + * + * @param dbSource + * @return + */ + private static DruidDataSource getJdbcDataSource(final DynamicDataSourceModel dbSource) { + DruidDataSource dataSource = new DruidDataSource(); + + String driverClassName = dbSource.getDbDriver(); + String url = dbSource.getDbUrl(); + String dbUser = dbSource.getDbUsername(); + String dbPassword = dbSource.getDbPassword(); + dataSource.setDriverClassName(driverClassName); + dataSource.setUrl(url); + //dataSource.setValidationQuery("SELECT 1 FROM DUAL"); + dataSource.setTestWhileIdle(true); + dataSource.setTestOnBorrow(false); + dataSource.setTestOnReturn(false); + dataSource.setBreakAfterAcquireFailure(true); + dataSource.setConnectionErrorRetryAttempts(0); + dataSource.setUsername(dbUser); + dataSource.setMaxWait(60000); + dataSource.setPassword(dbPassword); + + log.info("******************************************"); + log.info("* *"); + log.info("*====【"+dbSource.getCode()+"】=====Druid连接池已启用 ====*"); + log.info("* *"); + log.info("******************************************"); + return dataSource; + } + + /** + * 通过 dbKey ,获取数据源 + * + * @param dbKey + * @return + */ + public static DruidDataSource getDbSourceByDbKey(final String dbKey) { + //获取多数据源配置 + DynamicDataSourceModel dbSource = DataSourceCachePool.getCacheDynamicDataSourceModel(dbKey); + //先判断缓存中是否存在数据库链接 + DruidDataSource cacheDbSource = DataSourceCachePool.getCacheBasicDataSource(dbKey); + if (cacheDbSource != null && !cacheDbSource.isClosed()) { + log.debug("--------getDbSourceBydbKey------------------从缓存中获取DB连接-------------------"); + return cacheDbSource; + } else { + DruidDataSource dataSource = getJdbcDataSource(dbSource); + if(dataSource!=null && dataSource.isEnable()){ + DataSourceCachePool.putCacheBasicDataSource(dbKey, dataSource); + }else{ + throw new JeroBootException("动态数据源连接失败,dbKey:"+dbKey); + } + log.info("--------getDbSourceBydbKey------------------创建DB数据库连接-------------------"); + return dataSource; + } + } + + /** + * 关闭数据库连接池 + * + * @param dbKey + * @return + */ + public static void closeDbKey(final String dbKey) { + DruidDataSource dataSource = getDbSourceByDbKey(dbKey); + try { + if (dataSource != null && !dataSource.isClosed()) { + dataSource.getConnection().commit(); + dataSource.getConnection().close(); + dataSource.close(); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + + private static JdbcTemplate getJdbcTemplate(String dbKey) { + DruidDataSource dataSource = getDbSourceByDbKey(dbKey); + return new JdbcTemplate(dataSource); + } + + /** + * Executes the SQL statement in this PreparedStatement object, + * which must be an SQL Data Manipulation Language (DML) statement, such as INSERT, UPDATE or + * DELETE; or an SQL statement that returns nothing, + * such as a DDL statement. + */ + public static int update(final String dbKey, String sql, Object... param) { + int effectCount; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + if (ArrayUtils.isEmpty(param)) { + effectCount = jdbcTemplate.update(sql); + } else { + effectCount = jdbcTemplate.update(sql, param); + } + return effectCount; + } + + /** + * 支持miniDao语法操作的Update + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + public static int updateByHash(final String dbKey, String sql, HashMap data) { + int effectCount; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + //根据模板获取sql + sql = FreemarkerParseFactory.parseTemplateContent(sql, data); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + effectCount = namedParameterJdbcTemplate.update(sql, data); + return effectCount; + } + + public static Object findOne(final String dbKey, String sql, Object... param) { + List> list; + list = findList(dbKey, sql, param); + if (oConvertUtils.listIsEmpty(list)) { + log.error("Except one, but not find actually"); + } + if (list.size() > 1) { + log.error("Except one, but more than one actually"); + } + return list.get(0); + } + + /** + * 支持miniDao语法操作的查询 返回HashMap + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + public static Object findOneByHash(final String dbKey, String sql, HashMap data) { + List> list; + list = findListByHash(dbKey, sql, data); + if (oConvertUtils.listIsEmpty(list)) { + log.error("Except one, but not find actually"); + } + if (list.size() > 1) { + log.error("Except one, but more than one actually"); + } + return list.get(0); + } + + /** + * 直接sql查询 根据clazz返回单个实例 + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句 + * @param clazz 返回实例的Class + * @param param + * @return + */ + @SuppressWarnings("unchecked") + public static Object findOne(final String dbKey, String sql, Class clazz, Object... param) { + Map map = (Map) findOne(dbKey, sql, param); + return ReflectHelper.setAll(clazz, map); + } + + /** + * 支持miniDao语法操作的查询 返回单个实例 + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param clazz 返回实例的Class + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + @SuppressWarnings("unchecked") + public static Object findOneByHash(final String dbKey, String sql, Class clazz, HashMap data) { + Map map = (Map) findOneByHash(dbKey, sql, data); + return ReflectHelper.setAll(clazz, map); + } + + public static List> findList(final String dbKey, String sql, Object... param) { + List> list; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + + if (ArrayUtils.isEmpty(param)) { + list = jdbcTemplate.queryForList(sql); + } else { + list = jdbcTemplate.queryForList(sql, param); + } + return list; + } + + /** + * 支持miniDao语法操作的查询 + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + public static List> findListByHash(final String dbKey, String sql, HashMap data) { + List> list; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + //根据模板获取sql + sql = FreemarkerParseFactory.parseTemplateContent(sql, data); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + list = namedParameterJdbcTemplate.queryForList(sql, data); + return list; + } + + //此方法只能返回单列,不能返回实体类 + public static List findList(final String dbKey, String sql, Class clazz, Object... param) { + List list; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + + if (ArrayUtils.isEmpty(param)) { + list = jdbcTemplate.queryForList(sql, clazz); + } else { + list = jdbcTemplate.queryForList(sql, clazz, param); + } + return list; + } + + /** + * 支持miniDao语法操作的查询 返回单列数据list + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param clazz 类型Long、String等 + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + public static List findListByHash(final String dbKey, String sql, Class clazz, HashMap data) { + List list; + JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey); + //根据模板获取sql + sql = FreemarkerParseFactory.parseTemplateContent(sql, data); + NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource()); + list = namedParameterJdbcTemplate.queryForList(sql, data, clazz); + return list; + } + + /** + * 直接sql查询 返回实体类列表 + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持 minidao 语法逻辑 + * @param clazz 返回实体类列表的class + * @param param sql拼接注入中需要的数据 + * @return + */ + public static List findListEntities(final String dbKey, String sql, Class clazz, Object... param) { + List> queryList = findList(dbKey, sql, param); + return ReflectHelper.transList2Entrys(queryList, clazz); + } + + /** + * 支持miniDao语法操作的查询 返回实体类列表 + * + * @param dbKey 数据源标识 + * @param sql 执行sql语句,sql支持minidao语法逻辑 + * @param clazz 返回实体类列表的class + * @param data sql语法中需要判断的数据及sql拼接注入中需要的数据 + * @return + */ + public static List findListEntitiesByHash(final String dbKey, String sql, Class clazz, HashMap data) { + List> queryList = findListByHash(dbKey, sql, data); + return ReflectHelper.transList2Entrys(queryList, clazz); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java new file mode 100644 index 00000000..064fa9e9 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/FreemarkerParseFactory.java @@ -0,0 +1,171 @@ +package com.jero.common.util.dynamic.db; + +import com.jero.common.util.SimpleFormat; +import freemarker.cache.StringTemplateLoader; +import freemarker.core.ParseException; +import freemarker.template.Configuration; +import freemarker.template.Template; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +import java.io.StringWriter; +import java.util.Map; +import java.util.regex.Pattern; + +/** + * @author 赵俊夫 + * @version V1.0 + * @Title:FreemarkerHelper + * @description:Freemarker引擎协助类 + * @date Jul 5, 2013 2:58:29 PM + */ +@Slf4j +public class FreemarkerParseFactory { + + private static final String ENCODE = "utf-8"; + /** + * 参数格式化工具类 + */ + private static final String MINI_DAO_FORMAT = "DaoFormat"; + + /** + * 文件缓存 + */ + private static final Configuration _tplConfig = new Configuration(); + /** + * SQL 缓存 + */ + private static final Configuration _sqlConfig = new Configuration(); + + private static StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); + + // 使用内嵌的(?ms)打开单行和多行模式 + private final static Pattern p = Pattern + .compile("(?ms)/\\*.*?\\*/|^\\s*//.*?$"); + + static { + _tplConfig.setClassForTemplateLoading( + new FreemarkerParseFactory().getClass(), "/"); + _tplConfig.setNumberFormat("0.#####################"); + _sqlConfig.setTemplateLoader(stringTemplateLoader); + _sqlConfig.setNumberFormat("0.#####################"); + //classic_compatible设置,解决报空指针错误 + _sqlConfig.setClassicCompatible(true); + } + + /** + * 判断模板是否存在 + * + * @throws Exception + */ + public static boolean isExistTemplate(String tplName) throws Exception { + try { + Template mytpl = _tplConfig.getTemplate(tplName, "UTF-8"); + if (mytpl == null) { + return false; + } + } catch (Exception e) { + //update-begin--Author:scott Date:20180320 for:解决问题 - 错误提示sql文件不存在,实际问题是sql freemarker用法错误----- + if (e instanceof ParseException) { + log.error(e.getMessage(), e.fillInStackTrace()); + throw new Exception(e); + } + log.debug("----isExistTemplate----" + e.toString()); + //update-end--Author:scott Date:20180320 for:解决问题 - 错误提示sql文件不存在,实际问题是sql freemarker用法错误------ + return false; + } + return true; + } + + /** + * 解析ftl模板 + * + * @param tplName 模板名 + * @param paras 参数 + * @return + */ + public static String parseTemplate(String tplName, Map paras) { + try { + log.debug(" minidao sql templdate : " + tplName); + StringWriter swriter = new StringWriter(); + Template mytpl = _tplConfig.getTemplate(tplName, ENCODE); + if (paras.containsKey(MINI_DAO_FORMAT)) { + throw new RuntimeException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); + } + paras.put(MINI_DAO_FORMAT, new SimpleFormat()); + mytpl.process(paras, swriter); + String sql = getSqlText(swriter.toString()); + paras.remove(MINI_DAO_FORMAT); + return sql; + } catch (Exception e) { + log.error(e.getMessage(), e.fillInStackTrace()); + log.error("发送一次的模板key:{ " + tplName + " }"); + //System.err.println(e.getMessage()); + //System.err.println("模板名:{ "+ tplName +" }"); + throw new RuntimeException("解析SQL模板异常"); + } + } + + /** + * 解析ftl + * + * @param tplContent 模板内容 + * @param paras 参数 + * @return String 模板解析后内容 + */ + public static String parseTemplateContent(String tplContent, + Map paras) { + try { + StringWriter swriter = new StringWriter(); + if (stringTemplateLoader.findTemplateSource("sql_" + tplContent.hashCode()) == null) { + stringTemplateLoader.putTemplate("sql_" + tplContent.hashCode(), tplContent); + } + Template mytpl = _sqlConfig.getTemplate("sql_" + tplContent.hashCode(), ENCODE); + if (paras.containsKey(MINI_DAO_FORMAT)) { + throw new RuntimeException("DaoFormat 是 minidao 保留关键字,不允许使用 ,请更改参数定义!"); + } + paras.put(MINI_DAO_FORMAT, new SimpleFormat()); + mytpl.process(paras, swriter); + String sql = getSqlText(swriter.toString()); + paras.remove(MINI_DAO_FORMAT); + return sql; + } catch (Exception e) { + log.error(e.getMessage(), e.fillInStackTrace()); + log.error("发送一次的模板key:{ " + tplContent + " }"); + //System.err.println(e.getMessage()); + //System.err.println("模板内容:{ "+ tplContent +" }"); + throw new RuntimeException("解析SQL模板异常"); + } + } + + /** + * 除去无效字段,去掉注释 不然批量处理可能报错 去除无效的等于 + */ + private static String getSqlText(String sql) { + // 将注释替换成"" + sql = p.matcher(sql).replaceAll(""); + sql = sql.replaceAll("\\n", " ").replaceAll("\\t", " ") + .replaceAll("\\s{1,}", " ").trim(); + // 去掉 最后是 where这样的问题 + if (sql.endsWith("where") || sql.endsWith("where ")) { + sql = sql.substring(0, sql.lastIndexOf("where")); + } + // 去掉where and 这样的问题 + int index = 0; + while ((index = StringUtils.indexOfIgnoreCase(sql, "where and", index)) != -1) { + sql = sql.substring(0, index + 5) + + sql.substring(index + 9, sql.length()); + } + // 去掉 , where 这样的问题 + index = 0; + while ((index = StringUtils.indexOfIgnoreCase(sql, ", where", index)) != -1) { + sql = sql.substring(0, index) + + sql.substring(index + 1, sql.length()); + } + // 去掉 最后是 ,这样的问题 + if (sql.endsWith(",") || sql.endsWith(", ")) { + sql = sql.substring(0, sql.lastIndexOf(",")); + } + return sql; + } +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java new file mode 100644 index 00000000..dec76a34 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/dynamic/db/SqlUtils.java @@ -0,0 +1,212 @@ +package com.jero.common.util.dynamic.db; + +import org.apache.commons.lang3.StringUtils; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.system.vo.DynamicDataSourceModel; + +import java.text.MessageFormat; +import java.util.Map; + +/** + * 根据不同的数据库,动态生成SQL,例如分页 + */ +public class SqlUtils { + + public static final String DATABSE_TYPE_MYSQL = "mysql"; + public static final String DATABSE_TYPE_POSTGRE = "postgresql"; + public static final String DATABSE_TYPE_ORACLE = "oracle"; + public static final String DATABSE_TYPE_SQLSERVER = "sqlserver"; + + + /** + * 分页SQL + */ + public static final String MYSQL_SQL = "select * from ( {0}) sel_tab00 limit {1},{2}"; + public static final String POSTGRE_SQL = "select * from ( {0}) sel_tab00 limit {2} offset {1}"; + public static final String ORACLE_SQL = "select * from (select row_.*,rownum rownum_ from ({0}) row_ where rownum <= {1}) where rownum_>{2}"; + public static final String SQLSERVER_SQL = "select * from ( select row_number() over(order by tempColumn) tempRowNumber, * from (select top {1} tempColumn = 0, {0}) t ) tt where tempRowNumber > {2}"; + + /** + * 获取所有表的SQL + */ + public static final String MYSQL_ALLTABLES_SQL = "select distinct table_name from information_schema.columns where table_schema = {0}"; + public static final String POSTGRE__ALLTABLES_SQL = "SELECT distinct c.relname AS table_name FROM pg_class c"; + public static final String ORACLE__ALLTABLES_SQL = "select distinct colstable.table_name as table_name from user_tab_cols colstable"; + public static final String SQLSERVER__ALLTABLES_SQL = "select distinct c.name as table_name from sys.objects c"; + + /** + * 获取指定表的所有列名 + */ + public static final String MYSQL_ALLCOLUMNS_SQL = "select column_name from information_schema.columns where table_name = {0} and table_schema = {1}"; + public static final String POSTGRE_ALLCOLUMNS_SQL = "select table_name from information_schema.columns where table_name = {0}"; + public static final String ORACLE_ALLCOLUMNS_SQL = "select column_name from all_tab_columns where table_name ={0}"; + public static final String SQLSERVER_ALLCOLUMNS_SQL = "select name from syscolumns where id={0}"; + + /* + * 判断数据库类型 + */ + + public static boolean dbTypeIsMySQL(String dbType) { + return dbTypeIf(dbType, DATABSE_TYPE_MYSQL, DataBaseConstant.DB_TYPE_MYSQL_NUM); + } + + public static boolean dbTypeIsOracle(String dbType) { + return dbTypeIf(dbType, DATABSE_TYPE_ORACLE, DataBaseConstant.DB_TYPE_ORACLE_NUM); + } + + public static boolean dbTypeIsSQLServer(String dbType) { + return dbTypeIf(dbType, DATABSE_TYPE_SQLSERVER, DataBaseConstant.DB_TYPE_SQLSERVER_NUM); + } + + public static boolean dbTypeIsPostgre(String dbType) { + return dbTypeIf(dbType, DATABSE_TYPE_POSTGRE, DataBaseConstant.DB_TYPE_POSTGRESQL_NUM); + } + + /** + * 判断数据库类型 + */ + public static boolean dbTypeIf(String dbType, String... correctTypes) { + for (String type : correctTypes) { + if (type.equalsIgnoreCase(dbType)) { + return true; + } + } + return false; + } + + /** + * 获取全 SQL + * 拼接 where 条件 + * + * @param sql + * @param params + * @return + */ + public static String getFullSql(String sql, Map params) { + return getFullSql(sql, params, null, null); + } + + /** + * 获取全 SQL + * 拼接 where 条件 + * 拼接 order 排序 + * + * @param sql + * @param params + * @param orderColumn 排序字段 + * @param orderBy 排序方式,只能是 DESC 或 ASC + * @return + */ + public static String getFullSql(String sql, Map params, String orderColumn, String orderBy) { + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("SELECT t.* FROM ( ").append(sql).append(" ) t "); + if (params != null && params.size() >= 1) { + sqlBuilder.append("WHERE 1=1 "); + for (Object key : params.keySet()) { + String value = String.valueOf(params.get(key)); + if (StringUtils.isNotBlank(value)) { + sqlBuilder.append(" AND (").append(key).append(" = N'").append(value).append("')"); + } + } + if (StringUtils.isNotBlank(orderColumn) && StringUtils.isNotBlank(orderBy)) { + sqlBuilder.append("ORDER BY ").append(orderColumn).append(" ").append("DESC".equalsIgnoreCase(orderBy) ? "DESC" : "ASC"); + } + } + return sqlBuilder.toString(); + } + + /** + * 获取求数量 SQL + * + * @param sql + * @return + */ + public static String getCountSql(String sql) { + return String.format("SELECT COUNT(1) \"total\" FROM ( %s ) temp_count", sql); + } + + /** + * 生成分页查询 SQL + * + * @param dbType 数据库类型 + * @param sql + * @param page + * @param rows + * @return + */ + public static String createPageSqlByDBType(String dbType, String sql, int page, int rows) { + int beginNum = (page - 1) * rows; + Object[] sqlParam = new Object[3]; + sqlParam[0] = sql; + sqlParam[1] = String.valueOf(beginNum); + sqlParam[2] = String.valueOf(rows); + if (dbTypeIsMySQL(dbType)) { + sql = MessageFormat.format(MYSQL_SQL, sqlParam); + } else if (dbTypeIsPostgre(dbType)) { + sql = MessageFormat.format(POSTGRE_SQL, sqlParam); + } else { + int beginIndex = (page - 1) * rows; + int endIndex = beginIndex + rows; + sqlParam[2] = Integer.toString(beginIndex); + sqlParam[1] = Integer.toString(endIndex); + if (dbTypeIsOracle(dbType)) { + sql = MessageFormat.format(ORACLE_SQL, sqlParam); + } else if (dbTypeIsSQLServer(dbType)) { + sqlParam[0] = sql.substring(getAfterSelectInsertPoint(sql)); + sql = MessageFormat.format(SQLSERVER_SQL, sqlParam); + } + } + return sql; + } + + /** + * 生成分页查询 SQL + * + * @param sql + * @param page + * @param rows + * @return + */ + public static String createPageSqlByDBKey(String dbKey, String sql, int page, int rows) { + DynamicDataSourceModel dynamicSourceEntity = DataSourceCachePool.getCacheDynamicDataSourceModel(dbKey); + String dbType = dynamicSourceEntity.getDbType(); + return createPageSqlByDBType(dbType, sql, page, rows); + } + + private static int getAfterSelectInsertPoint(String sql) { + int selectIndex = sql.toLowerCase().indexOf("select"); + int selectDistinctIndex = sql.toLowerCase().indexOf("select distinct"); + return selectIndex + (selectDistinctIndex == selectIndex ? 15 : 6); + } + + public static String getAllTableSql(String dbType, Object... params) { + if (StringUtils.isNotEmpty(dbType)) { + if (dbTypeIsMySQL(dbType)) { + return MessageFormat.format(MYSQL_ALLTABLES_SQL, params); + } else if (dbTypeIsOracle(dbType)) { + return ORACLE__ALLTABLES_SQL; + } else if (dbTypeIsPostgre(dbType)) { + return POSTGRE__ALLTABLES_SQL; + } else if (dbTypeIsSQLServer(dbType)) { + return SQLSERVER__ALLTABLES_SQL; + } + } + return null; + } + + public static String getAllColumnSQL(String dbType, Object... params) { + if (StringUtils.isNotEmpty(dbType)) { + if (dbTypeIsMySQL(dbType)) { + return MessageFormat.format(MYSQL_ALLCOLUMNS_SQL, params); + } else if (dbTypeIsOracle(dbType)) { + return MessageFormat.format(ORACLE_ALLCOLUMNS_SQL, params); + } else if (dbTypeIsPostgre(dbType)) { + return MessageFormat.format(POSTGRE_ALLCOLUMNS_SQL, params); + } else if (dbTypeIsSQLServer(dbType)) { + return MessageFormat.format(SQLSERVER_ALLCOLUMNS_SQL, params); + } + } + return null; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java new file mode 100644 index 00000000..5d14e153 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/AesEncryptUtil.java @@ -0,0 +1,121 @@ +package com.jero.common.util.encryption; + +import org.apache.shiro.codec.Base64; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +/** + * AES 加密 + */ +public class AesEncryptUtil { + + //使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同! + private static String KEY = EncryptedString.key; + private static String IV = EncryptedString.iv; + + /** + * 加密方法 + * @param data 要加密的数据 + * @param key 加密key + * @param iv 加密iv + * @return 加密的结果 + * @throws Exception + */ + public static String encrypt(String data, String key, String iv) throws Exception { + try { + + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");//"算法/模式/补码方式"NoPadding PkcsPadding + int blockSize = cipher.getBlockSize(); + + byte[] dataBytes = data.getBytes(); + int plaintextLength = dataBytes.length; + if (plaintextLength % blockSize != 0) { + plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize)); + } + + byte[] plaintext = new byte[plaintextLength]; + System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length); + + SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); + IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); + + cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); + byte[] encrypted = cipher.doFinal(plaintext); + + return Base64.encodeToString(encrypted); + + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 解密方法 + * @param data 要解密的数据 + * @param key 解密key + * @param iv 解密iv + * @return 解密的结果 + * @throws Exception + */ + public static String desEncrypt(String data, String key, String iv) throws Exception { + try { + byte[] encrypted1 = Base64.decode(data); + + Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding"); + SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES"); + IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes()); + + cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); + + byte[] original = cipher.doFinal(encrypted1); + String originalString = new String(original); + return originalString; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 使用默认的key和iv加密 + * @param data + * @return + * @throws Exception + */ + public static String encrypt(String data) throws Exception { + return encrypt(data, KEY, IV); + } + + /** + * 使用默认的key和iv解密 + * @param data + * @return + * @throws Exception + */ + public static String desEncrypt(String data) throws Exception { + return desEncrypt(data, KEY, IV); + } + + + +// /** +// * 测试 +// */ +// public static void main(String args[]) throws Exception { +// String test1 = "sa"; +// String test =new String(test1.getBytes(),"UTF-8"); +// String data = null; +// String key = KEY; +// String iv = IV; +// // /g2wzfqvMOeazgtsUVbq1kmJawROa6mcRAzwG1/GeJ4= +// data = encrypt(test, key, iv); +// System.out.println("数据:"+test); +// System.out.println("加密:"+data); +// String jiemi =desEncrypt(data, key, iv).trim(); +// System.out.println("解密:"+jiemi); +// } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java new file mode 100644 index 00000000..47b3ae8f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/encryption/EncryptedString.java @@ -0,0 +1,12 @@ +package com.jero.common.util.encryption; + + +import lombok.Data; + +@Data +public class EncryptedString { + + public static String key = "1234567890adbcde";//长度为16个字符 + + public static String iv = "1234567890hjlkew";//长度为16个字符 +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java new file mode 100644 index 00000000..94a39169 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/filter/StrAttackFilter.java @@ -0,0 +1,20 @@ +package com.jero.common.util.filter; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.regex.PatternSyntaxException; + +/** + * 文件上传字符串过滤特殊字符 + */ +public class StrAttackFilter { + + public static String filter(String str) throws PatternSyntaxException { + // 清除掉所有特殊字符 + String regEx = "[`_《》~!@#$%^&*()+=|{}':;',\\[\\].<>?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]"; + Pattern p = Pattern.compile(regEx); + Matcher m = p.matcher(str); + return m.replaceAll("").trim(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/BaseColumn.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/BaseColumn.java new file mode 100644 index 00000000..5a77ac23 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/BaseColumn.java @@ -0,0 +1,28 @@ +package com.jero.common.util.jsonschema; + +import lombok.Data; + +/** + * 列 配置基本信息 + */ +@Data +public class BaseColumn { + + /** + * 列配置 描述 -对应数据库字段描述 + */ + private String title; + + /** + * 列配置 名称 -对应数据库字段名 + */ + private String field; + + public BaseColumn(){} + + public BaseColumn(String title,String field){ + this.title = title; + this.field = field; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java new file mode 100644 index 00000000..891575df --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/CommonProperty.java @@ -0,0 +1,195 @@ +package com.jero.common.util.jsonschema; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.system.vo.DictModel; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * 验证通用属性 + */ +public abstract class CommonProperty implements Serializable{ + + private static final long serialVersionUID = -426159949502493187L; + + + protected String key; + + + /** + *

此关键字的值必须是字符串或数组。如果它是一个数组,那么数组的元素必须是字符串,并且必须是唯一的。 + *

字符串值必须是六种基本类型之一(“null”,“boolean”,“object”,“array”,“number”或“string”),或“integer”,它匹配任何数字,零分数部分。 + *

当且仅当实例位于为此关键字列出的任何集合中时,实例才会验证。 + * + */ + protected String type; + + /** + * 对应JsonSchema的enum + *

该关键字的值必须是一个数组。这个数组应该至少有一个元素。数组中的元素应该是唯一的。如果实例的值等于此关键字的数组值中的某个元素,则实例将对此关键字成功验证。 + * 数组中的元素可以是任何值,包括null + * + * { + * "type": "string", + * "enum": ["1", "2", "3"] 需要的话可以通过这个include转一下 + * } + */ + protected List include; + + /** + * 对应JsonSchema的const + *

此关键字的值可以是任何类型,包括null。 + * 如果实例的值等于关键字的值,则实例将针对此关键字成功验证。 + */ + protected Object constant; + + //三个自定义 属性 + protected String view;// 展示类型 + protected String title;//数据库字段备注 + protected Integer order;//字段显示排序 + + protected boolean disabled;//是否禁用 + + protected String defVal; // 字段默认值 + + protected String fieldExtendJson;//扩展参数 + + protected Integer dbPointLength;//小数点 + + public String getDefVal() { + return defVal; + } + + public void setDefVal(String defVal) { + this.defVal = defVal; + } + + public boolean isDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + public String getView() { + return view; + } + + public void setView(String view) { + this.view = view; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public List getInclude() { + return include; + } + + public void setInclude(List include) { + this.include = include; + } + + public Object getConstant() { + return constant; + } + + public void setConstant(Object constant) { + this.constant = constant; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public Integer getOrder() { + return order; + } + + public void setOrder(Integer order) { + this.order = order; + } + + public String getFieldExtendJson() { + return fieldExtendJson; + } + + public void setFieldExtendJson(String fieldExtendJson) { + this.fieldExtendJson = fieldExtendJson; + } + + public Integer getDbPointLength() { + return dbPointLength; + } + + public void setDbPointLength(Integer dbPointLength) { + this.dbPointLength = dbPointLength; + } + + /** + * 返回一个map有两个key + *

key ---> Property JSON的key + *

prop --> JSON object + * @return + */ + public abstract Map getPropertyJson(); + + public JSONObject getCommonJson() { + JSONObject json = new JSONObject(); + json.put("type", type); + if(include!=null && include.size()>0) { + json.put("enum", include); + } + if(constant!=null) { + json.put("const", constant); + } + if(title!=null) { + json.put("title", title); + } + if(order!=null) { + json.put("order", order); + } + if(view==null) { + json.put("view", "input"); + }else { + json.put("view", view); + } + if(disabled) { + String str = "{\"widgetattrs\":{\"disabled\":true}}"; + JSONObject ui = JSONObject.parseObject(str); + json.put("ui", ui); + } + if (defVal!=null && defVal.length()>0) { + json.put("defVal", defVal); + } + if(fieldExtendJson != null){ + json.put("fieldExtendJson", fieldExtendJson); + } + if(dbPointLength !=null ) { + json.put("dbPointLength", dbPointLength); + } + return json; + } + + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonSchemaDescrip.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonSchemaDescrip.java new file mode 100644 index 00000000..e75797fb --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonSchemaDescrip.java @@ -0,0 +1,87 @@ +package com.jero.common.util.jsonschema; + +import java.io.Serializable; +import java.util.List; + +/** + * JsonSchema 模式类 + * < http://json-schema.org/draft-07/schema# > + */ +public class JsonSchemaDescrip implements Serializable{ + + /** + * + */ + private static final long serialVersionUID = 7682073117441544718L; + + + private String $schema = "http://json-schema.org/draft-07/schema#"; + + /** + * 用它给我们的模式提供了标题。 + */ + private String title; + + /** + * 关于模式的描述。 + */ + private String description; + + /** + *type 关键字在我们的 JSON 数据上定义了第一个约束:必须是一个 JSON 对象。 可以直接设置成object + */ + private String type; + + private List required; + + + public List getRequired() { + return required; + } + + public void setRequired(List required) { + this.required = required; + } + + public String get$schema() { + return $schema; + } + + public void set$schema(String $schema) { + this.$schema = $schema; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public JsonSchemaDescrip() {} + + public JsonSchemaDescrip(List required) { + this.description="我是一个jsonschema description"; + this.title="我是一个jsonschema title"; + this.type="object"; + this.required = required; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java new file mode 100644 index 00000000..91fab531 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/JsonschemaUtil.java @@ -0,0 +1,70 @@ +package com.jero.common.util.jsonschema; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class JsonschemaUtil { + + /** + * 生成JsonSchema + * + * @param descrip + * @param propertyList + * @return + */ + public static JSONObject getJsonSchema(JsonSchemaDescrip descrip, List propertyList) { + JSONObject obj = new JSONObject(); + obj.put("$schema", descrip.get$schema()); + obj.put("type", descrip.getType()); + obj.put("title", descrip.getTitle()); + + List requiredArr = descrip.getRequired(); + obj.put("required", requiredArr); + + JSONObject properties = new JSONObject(); + for (CommonProperty commonProperty : propertyList) { + Map map = commonProperty.getPropertyJson(); + properties.put(map.get("key").toString(), map.get("prop")); + } + obj.put("properties", properties); + //鬼知道这里为什么报错 com.jero.modules.system.model.DictModel cannot be cast to com.jero.modules.system.model.DictModel + //log.info("---JSONSchema--->"+obj.toJSONString()); + return obj; + } + + /** + * 生成JsonSchema 用于子对象 + * @param title 子对象描述 + * @param requiredArr 子对象必填属性名集合 + * @param propertyList 子对象属性集合 + * @return + */ + public static JSONObject getSubJsonSchema(String title,List requiredArr,List propertyList) { + JSONObject obj = new JSONObject(); + obj.put("type", "object"); + obj.put("view", "tab"); + obj.put("title", title); + + if(requiredArr==null) { + requiredArr = new ArrayList(); + } + obj.put("required", requiredArr); + + JSONObject properties = new JSONObject(); + for (CommonProperty commonProperty : propertyList) { + Map map = commonProperty.getPropertyJson(); + properties.put(map.get("key").toString(), map.get("prop")); + } + obj.put("properties", properties); + //log.info("---JSONSchema--->"+obj.toString()); + return obj; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/DictProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/DictProperty.java new file mode 100644 index 00000000..7a235d9a --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/DictProperty.java @@ -0,0 +1,82 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.Map; + +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +/** + * 字典属性 + * @author 86729 + * + */ +public class DictProperty extends CommonProperty { + + private static final long serialVersionUID = 3786503639885610767L; + + //字典三属性 + private String dictCode; + private String dictTable; + private String dictText; + + public String getDictCode() { + return dictCode; + } + + public void setDictCode(String dictCode) { + this.dictCode = dictCode; + } + + public String getDictTable() { + return dictTable; + } + + public void setDictTable(String dictTable) { + this.dictTable = dictTable; + } + + public String getDictText() { + return dictText; + } + + public void setDictText(String dictText) { + this.dictText = dictText; + } + + public DictProperty() {} + + /** + * 构造器 + */ + public DictProperty(String key,String title,String dictTable,String dictCode,String dictText) { + this.type = "string"; + this.view = "sel_search"; + this.key = key; + this.title = title; + this.dictCode = dictCode; + this.dictTable= dictTable; + this.dictText= dictText; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + if(dictCode!=null) { + prop.put("dictCode",dictCode); + } + if(dictTable!=null) { + prop.put("dictTable",dictTable); + } + if(dictText!=null) { + prop.put("dictText",dictText); + } + map.put("prop",prop); + return map; + } + + //TODO 重构问题:数据字典 只是字符串类的还是有存储的数值类型?只有字符串请跳过这个 只改前端 +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/HiddenProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/HiddenProperty.java new file mode 100644 index 00000000..2cb95058 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/HiddenProperty.java @@ -0,0 +1,38 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.Map; + +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +/** + * 字典属性 + * @author 86729 + * + */ +public class HiddenProperty extends CommonProperty { + + private static final long serialVersionUID = -8939298551502162479L; + + public HiddenProperty() {} + + public HiddenProperty(String key,String title) { + this.type = "string"; + this.view = "hidden"; + this.key = key; + this.title = title; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + prop.put("hidden",true); + map.put("prop",prop); + return map; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java new file mode 100644 index 00000000..3815d477 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/LinkDownProperty.java @@ -0,0 +1,66 @@ +package com.jero.common.util.jsonschema.validate; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.util.jsonschema.BaseColumn; +import com.jero.common.util.jsonschema.CommonProperty; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 级联下拉 + */ +public class LinkDownProperty extends CommonProperty { + + /** + * 配置信息 + */ + String dictTable; + + /** + * 级联下拉组件 的其他级联列 + */ + List otherColumns; + + public String getDictTable(){ + return this.dictTable; + } + + public void setDictTable(String dictTable){ + this.dictTable = dictTable; + } + + public List getOtherColumns(){ + return this.otherColumns; + } + + public void setOtherColumns(List otherColumns){ + this.otherColumns = otherColumns; + } + + public LinkDownProperty() {} + + /** + * 构造器 + */ + public LinkDownProperty(String key,String title,String dictTable) { + this.type = "string"; + this.view = "link_down"; + this.key = key; + this.title = title; + this.dictTable= dictTable; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key", getKey()); + JSONObject prop = getCommonJson(); + JSONObject temp = JSONObject.parseObject(this.dictTable); + prop.put("config", temp); + prop.put("others", otherColumns); + map.put("prop", prop); + return map; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/NumberProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/NumberProperty.java new file mode 100644 index 00000000..174f595d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/NumberProperty.java @@ -0,0 +1,153 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.jero.common.system.vo.DictModel; +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +public class NumberProperty extends CommonProperty { + + private static final long serialVersionUID = -558615331436437200L; + + /** + * 倍数 + * 验证实例是否为此数值的倍数 + * “multipleOf”的值必须是一个数字,严格大于0。 + */ + private Integer multipleOf; + + /** + * 小于等于 + * “maximum”的值必须是一个数字,表示数字实例的包含上限。 + * 如果实例是数字,则仅当实例小于或等于“最大”时,此关键字才会生效。 + */ + private Integer maxinum; + + /** + * 小于 + * “exclusiveMaximum”的值必须是数字,表示数字实例的独占上限。 + * 如果实例是数字,则实例仅在其值严格小于(不等于)“exclusiveMaximum”时才有效。 + */ + private Integer exclusiveMaximum; + + /** + * 大于等于 + */ + private Integer minimum; + + /** + * 大于等于 + */ + private Integer exclusiveMinimum; + + private String pattern; + + public Integer getMultipleOf() { + return multipleOf; + } + + public void setMultipleOf(Integer multipleOf) { + this.multipleOf = multipleOf; + } + + public Integer getMaxinum() { + return maxinum; + } + + public void setMaxinum(Integer maxinum) { + this.maxinum = maxinum; + } + + public Integer getExclusiveMaximum() { + return exclusiveMaximum; + } + + public void setExclusiveMaximum(Integer exclusiveMaximum) { + this.exclusiveMaximum = exclusiveMaximum; + } + + public Integer getMinimum() { + return minimum; + } + + public void setMinimum(Integer minimum) { + this.minimum = minimum; + } + + public Integer getExclusiveMinimum() { + return exclusiveMinimum; + } + + public void setExclusiveMinimum(Integer exclusiveMinimum) { + this.exclusiveMinimum = exclusiveMinimum; + } + + public String getPattern() { + return pattern; + } + + public void setPattern(String pattern) { + this.pattern = pattern; + } + + public NumberProperty() {} + + /** + * 构造器 + * @param key 字段名 + * @param title 字段备注 + * @param type number和integer + */ + public NumberProperty(String key,String title,String type) { + this.key = key; + this.type = type; + this.title = title; + this.view = "number"; + } + + /** + * 列表类型的走这个构造器 字典里存储的都是字符串 没法走这个构造器 + * @param key + * @param type + * @param view list-checkbox-radio + * @param include + */ + public NumberProperty(String key,String title,String view,List include) { + this.type = "integer"; + this.key = key; + this.view = view; + this.title = title; + this.include = include; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + if(multipleOf!=null) { + prop.put("multipleOf",multipleOf); + } + if(maxinum!=null) { + prop.put("maxinum",maxinum); + } + if(exclusiveMaximum!=null) { + prop.put("exclusiveMaximum",exclusiveMaximum); + } + if(minimum!=null) { + prop.put("minimum",minimum); + } + if(exclusiveMinimum!=null) { + prop.put("exclusiveMinimum",exclusiveMinimum); + } + if(pattern!=null) { + prop.put("pattern",pattern); + } + map.put("prop",prop); + return map; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java new file mode 100644 index 00000000..b025d49b --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/PopupProperty.java @@ -0,0 +1,76 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +public class PopupProperty extends CommonProperty { + + private static final long serialVersionUID = -3200493311633999539L; + + private String code; + + private String destFields; + + private String orgFields; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getDestFields() { + return destFields; + } + + public void setDestFields(String destFields) { + this.destFields = destFields; + } + + public String getOrgFields() { + return orgFields; + } + + public void setOrgFields(String orgFields) { + this.orgFields = orgFields; + } + + public PopupProperty() {} + + public PopupProperty(String key,String title,String code,String destFields,String orgFields) { + this.view = "popup"; + this.type = "string"; + this.key = key; + this.title = title; + this.code = code; + this.destFields=destFields; + this.orgFields=orgFields; + } + + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + if(code!=null) { + prop.put("code",code); + } + if(destFields!=null) { + prop.put("destFields",destFields); + } + if(orgFields!=null) { + prop.put("orgFields",orgFields); + } + map.put("prop",prop); + return map; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/StringProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/StringProperty.java new file mode 100644 index 00000000..124740f7 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/StringProperty.java @@ -0,0 +1,119 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.jero.common.system.vo.DictModel; +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +public class StringProperty extends CommonProperty { + + private static final long serialVersionUID = -3200493311633999539L; + + private Integer maxLength; + + private Integer minLength; + + /** + * 根据ECMA 262正则表达式方言,该字符串应该是有效的正则表达式。 + */ + private String pattern; + + /** + * 错误提示信息 + */ + private String errorInfo; + + public Integer getMaxLength() { + return maxLength; + } + + + public void setMaxLength(Integer maxLength) { + this.maxLength = maxLength; + } + + public Integer getMinLength() { + return minLength; + } + + public void setMinLength(Integer minLength) { + this.minLength = minLength; + } + + public String getPattern() { + return pattern; + } + + public void setPattern(String pattern) { + this.pattern = pattern; + } + + public String getErrorInfo() { + return errorInfo; + } + + + public void setErrorInfo(String errorInfo) { + this.errorInfo = errorInfo; + } + + + public StringProperty() {} + + /** + * 一般字符串类型走这个构造器 + * @param key 字段名 + * @param title 字段备注 + * @param view 展示控件 + * @param maxLength 数据库字段最大长度 + */ + public StringProperty(String key,String title,String view,Integer maxLength) { + this.maxLength = maxLength; + this.key = key; + this.view = view; + this.title = title; + this.type = "string"; + } + + /** + * 列表类型的走这个构造器 + * @param key 字段名 + * @param title 字段备注 + * @param view 展示控件 list-checkbox-radio + * @param maxLength 数据库字段最大长度 + * @param include 数据字典 + */ + public StringProperty(String key,String title,String view,Integer maxLength,List include) { + this.maxLength = maxLength; + this.key = key; + this.view = view; + this.title = title; + this.type = "string"; + this.include = include; + } + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + if(maxLength!=null) { + prop.put("maxLength",maxLength); + } + if(minLength!=null) { + prop.put("minLength",minLength); + } + if(pattern!=null) { + prop.put("pattern",pattern); + } + if(errorInfo!=null) { + prop.put("errorInfo",errorInfo); + } + map.put("prop",prop); + return map; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java new file mode 100644 index 00000000..46ff15b2 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/SwitchProperty.java @@ -0,0 +1,46 @@ +package com.jero.common.util.jsonschema.validate; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jero.common.util.jsonschema.CommonProperty; + +import java.util.HashMap; +import java.util.Map; + +/** + * 开关 属性 + */ +public class SwitchProperty extends CommonProperty { + + //扩展参数配置信息 + private String extendStr; + + public SwitchProperty() {} + + /** + * 构造器 + */ + public SwitchProperty(String key, String title, String extendStr) { + this.type = "string"; + this.view = "switch"; + this.key = key; + this.title = title; + this.extendStr = extendStr; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + JSONArray array = new JSONArray(); + if(extendStr!=null) { + array = JSONArray.parseArray(extendStr); + prop.put("extendOption",array); + } + map.put("prop",prop); + return map; + } + + //TODO 重构问题:数据字典 只是字符串类的还是有存储的数值类型?只有字符串请跳过这个 只改前端 +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/TreeSelectProperty.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/TreeSelectProperty.java new file mode 100644 index 00000000..96160879 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/jsonschema/validate/TreeSelectProperty.java @@ -0,0 +1,146 @@ +package com.jero.common.util.jsonschema.validate; + +import java.util.HashMap; +import java.util.Map; + +import com.jero.common.util.jsonschema.CommonProperty; + +import com.alibaba.fastjson.JSONObject; + +/** + * 字典属性 + * @author 86729 + * + */ +public class TreeSelectProperty extends CommonProperty { + + private static final long serialVersionUID = 3786503639885610767L; + + private String dict;//表名,文本,id + private String pidField;//父级字段 默认pid + private String pidValue;//父级节点的值 暂时没用到 默认为0 + private String hasChildField; + private String textField;//树形下拉保存text值的字段名 + + /** + * 是不是pid 组件 1是 0否 + */ + private Integer pidComponent = 0; + + public String getDict() { + return dict; + } + + public void setDict(String dict) { + this.dict = dict; + } + + public String getPidField() { + return pidField; + } + + public void setPidField(String pidField) { + this.pidField = pidField; + } + + public String getPidValue() { + return pidValue; + } + + public void setPidValue(String pidValue) { + this.pidValue = pidValue; + } + + public String getHasChildField() { + return hasChildField; + } + + public void setHasChildField(String hasChildField) { + this.hasChildField = hasChildField; + } + + public TreeSelectProperty() {} + + public String getTextField() { + return textField; + } + + public void setTextField(String textField) { + this.textField = textField; + } + + public Integer getPidComponent() { + return pidComponent; + } + + public void setPidComponent(Integer pidComponent) { + this.pidComponent = pidComponent; + } + + /** + * 构造器 构造普通树形下拉 + */ + public TreeSelectProperty(String key,String title,String dict,String pidField,String pidValue) { + this.type = "string"; + this.view = "sel_tree"; + this.key = key; + this.title = title; + this.dict = dict; + this.pidField= pidField; + this.pidValue= pidValue; + } + + /** + * 分类字典下拉专用 + * @param key + * @param title + * @param pidValue + */ + public TreeSelectProperty(String key,String title,String pidValue) { + this.type = "string"; + this.view = "cat_tree"; + this.key = key; + this.title = title; + this.pidValue = pidValue; + } + + /** + * 分类字典 支持存储text 下拉专用 + * @param key + * @param title + * @param pidValue + * @param textField + */ + public TreeSelectProperty(String key,String title,String pidValue,String textField) { + this(key,title,pidValue); + this.textField = textField; + } + + @Override + public Map getPropertyJson() { + Map map = new HashMap<>(); + map.put("key",getKey()); + JSONObject prop = getCommonJson(); + if(dict!=null) { + prop.put("dict",dict); + } + if(pidField!=null) { + prop.put("pidField",pidField); + } + if(pidValue!=null) { + prop.put("pidValue",pidValue); + } + if(textField!=null) { + prop.put("textField",textField); + } + if(hasChildField!=null) { + prop.put("hasChildField",hasChildField); + } + if(pidComponent!=null) { + prop.put("pidComponent",pidComponent); + } + map.put("prop",prop); + return map; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java new file mode 100644 index 00000000..9ea519a7 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oConvertUtils.java @@ -0,0 +1,668 @@ +package com.jero.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.BeanUtils; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.SocketException; +import java.net.UnknownHostException; +import java.sql.Date; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * + * @Author 张代浩 + * + */ +@Slf4j +public class oConvertUtils { + public static boolean isEmpty(Object object) { + if (object == null) { + return (true); + } + if ("".equals(object)) { + return (true); + } + if ("null".equals(object)) { + return (true); + } + return (false); + } + + public static boolean isNotEmpty(Object object) { + if (object != null && !object.equals("") && !object.equals("null")) { + return (true); + } + return (false); + } + + public static String decode(String strIn, String sourceCode, String targetCode) { + String temp = code2code(strIn, sourceCode, targetCode); + return temp; + } + + public static String StrToUTF(String strIn, String sourceCode, String targetCode) { + strIn = ""; + try { + strIn = new String(strIn.getBytes("ISO-8859-1"), "GBK"); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return strIn; + + } + + private static String code2code(String strIn, String sourceCode, String targetCode) { + String strOut = null; + if (strIn == null || (strIn.trim()).equals("")) { + return strIn; + } + try { + byte[] b = strIn.getBytes(sourceCode); + for (int i = 0; i < b.length; i++) { + System.out.print(b[i] + " "); + } + strOut = new String(b, targetCode); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + return strOut; + } + + public static int getInt(String s, int defval) { + if (s == null || s == "") { + return (defval); + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return (defval); + } + } + + public static int getInt(String s) { + if (s == null || s == "") { + return 0; + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return 0; + } + } + + public static int getInt(String s, Integer df) { + if (s == null || s == "") { + return df; + } + try { + return (Integer.parseInt(s)); + } catch (NumberFormatException e) { + return 0; + } + } + + public static Integer[] getInts(String[] s) { + Integer[] integer = new Integer[s.length]; + if (s == null) { + return null; + } + for (int i = 0; i < s.length; i++) { + integer[i] = Integer.parseInt(s[i]); + } + return integer; + + } + + public static double getDouble(String s, double defval) { + if (s == null || s == "") { + return (defval); + } + try { + return (Double.parseDouble(s)); + } catch (NumberFormatException e) { + return (defval); + } + } + + public static double getDou(Double s, double defval) { + if (s == null) { + return (defval); + } + return s; + } + + /*public static Short getShort(String s) { + if (StringUtil.isNotEmpty(s)) { + return (Short.parseShort(s)); + } else { + return null; + } + }*/ + + public static int getInt(Object object, int defval) { + if (isEmpty(object)) { + return (defval); + } + try { + return (Integer.parseInt(object.toString())); + } catch (NumberFormatException e) { + return (defval); + } + } + + public static Integer getInt(Object object) { + if (isEmpty(object)) { + return null; + } + try { + return (Integer.parseInt(object.toString())); + } catch (NumberFormatException e) { + return null; + } + } + + public static int getInt(BigDecimal s, int defval) { + if (s == null) { + return (defval); + } + return s.intValue(); + } + + public static Integer[] getIntegerArry(String[] object) { + int len = object.length; + Integer[] result = new Integer[len]; + try { + for (int i = 0; i < len; i++) { + result[i] = new Integer(object[i].trim()); + } + return result; + } catch (NumberFormatException e) { + return null; + } + } + + public static String getString(String s) { + return (getString(s, "")); + } + + /** + * 转义成Unicode编码 + * @param s + * @return + */ + /*public static String escapeJava(Object s) { + return StringEscapeUtils.escapeJava(getString(s)); + }*/ + + public static String getString(Object object) { + if (isEmpty(object)) { + return ""; + } + return (object.toString().trim()); + } + + public static String getString(int i) { + return (String.valueOf(i)); + } + + public static String getString(float i) { + return (String.valueOf(i)); + } + + public static String getString(String s, String defval) { + if (isEmpty(s)) { + return (defval); + } + return (s.trim()); + } + + public static String getString(Object s, String defval) { + if (isEmpty(s)) { + return (defval); + } + return (s.toString().trim()); + } + + public static long stringToLong(String str) { + Long test = new Long(0); + try { + test = Long.valueOf(str); + } catch (Exception e) { + } + return test.longValue(); + } + + /** + * 获取本机IP + */ + public static String getIp() { + String ip = null; + try { + InetAddress address = InetAddress.getLocalHost(); + ip = address.getHostAddress(); + + } catch (UnknownHostException e) { + e.printStackTrace(); + } + return ip; + } + + /** + * 判断一个类是否为基本数据类型。 + * + * @param clazz + * 要判断的类。 + * @return true 表示为基本数据类型。 + */ + private static boolean isBaseDataType(Class clazz) throws Exception { + return (clazz.equals(String.class) || clazz.equals(Integer.class) || clazz.equals(Byte.class) || clazz.equals(Long.class) || clazz.equals(Double.class) || clazz.equals(Float.class) || clazz.equals(Character.class) || clazz.equals(Short.class) || clazz.equals(BigDecimal.class) || clazz.equals(BigInteger.class) || clazz.equals(Boolean.class) || clazz.equals(Date.class) || clazz.isPrimitive()); + } + + /** + * @param request + * IP + * @return IP Address + */ + public static String getIpAddrByRequest(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } + + /** + * @return 本机IP + * @throws SocketException + */ + public static String getRealIp() throws SocketException { + String localip = null;// 本地IP,如果没有配置外网IP则返回它 + String netip = null;// 外网IP + + Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip = null; + boolean finded = false;// 是否找到外网IP + while (netInterfaces.hasMoreElements() && !finded) { + NetworkInterface ni = netInterfaces.nextElement(); + Enumeration address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + ip = address.nextElement(); + if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 外网IP + netip = ip.getHostAddress(); + finded = true; + break; + } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) {// 内网IP + localip = ip.getHostAddress(); + } + } + } + + if (netip != null && !"".equals(netip)) { + return netip; + } else { + return localip; + } + } + + /** + * java去除字符串中的空格、回车、换行符、制表符 + * + * @param str + * @return + */ + public static String replaceBlank(String str) { + String dest = ""; + if (str != null) { + Pattern p = Pattern.compile("\\s*|\t|\r|\n"); + Matcher m = p.matcher(str); + dest = m.replaceAll(""); + } + return dest; + + } + + /** + * 判断元素是否在数组内 + * + * @param substring + * @param source + * @return + */ + public static boolean isIn(String substring, String[] source) { + if (source == null || source.length == 0) { + return false; + } + for (int i = 0; i < source.length; i++) { + String aSource = source[i]; + if (aSource.equals(substring)) { + return true; + } + } + return false; + } + + /** + * 获取Map对象 + */ + public static Map getHashMap() { + return new HashMap(); + } + + /** + * SET转换MAP + * + * @param str + * @return + */ + public static Map SetToMap(Set setobj) { + Map map = getHashMap(); + for (Iterator iterator = setobj.iterator(); iterator.hasNext();) { + Map.Entry entry = (Map.Entry) iterator.next(); + map.put(entry.getKey().toString(), entry.getValue() == null ? "" : entry.getValue().toString().trim()); + } + return map; + + } + + public static boolean isInnerIP(String ipAddress) { + boolean isInnerIp = false; + long ipNum = getIpNum(ipAddress); + /** + * 私有IP:A类 10.0.0.0-10.255.255.255 B类 172.16.0.0-172.31.255.255 C类 192.168.0.0-192.168.255.255 当然,还有127这个网段是环回地址 + **/ + long aBegin = getIpNum("10.0.0.0"); + long aEnd = getIpNum("10.255.255.255"); + long bBegin = getIpNum("172.16.0.0"); + long bEnd = getIpNum("172.31.255.255"); + long cBegin = getIpNum("192.168.0.0"); + long cEnd = getIpNum("192.168.255.255"); + isInnerIp = isInner(ipNum, aBegin, aEnd) || isInner(ipNum, bBegin, bEnd) || isInner(ipNum, cBegin, cEnd) || ipAddress.equals("127.0.0.1"); + return isInnerIp; + } + + private static long getIpNum(String ipAddress) { + String[] ip = ipAddress.split("\\."); + long a = Integer.parseInt(ip[0]); + long b = Integer.parseInt(ip[1]); + long c = Integer.parseInt(ip[2]); + long d = Integer.parseInt(ip[3]); + + long ipNum = a * 256 * 256 * 256 + b * 256 * 256 + c * 256 + d; + return ipNum; + } + + private static boolean isInner(long userIp, long begin, long end) { + return (userIp >= begin) && (userIp <= end); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->helloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelName(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + return name.substring(0, 1).toLowerCase() + name.substring(1).toLowerCase(); + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 处理真正的驼峰片段 + if (result.length() == 0) { + // 第一个驼峰片段,全部字母都小写 + result.append(camel.toLowerCase()); + } else { + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + } + return result.toString(); + } + + /** + * 将下划线大写方式命名的字符串转换为驼峰式。 + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world,test_id->helloWorld,testId + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNames(String names) { + if(names==null||names.equals("")){ + return null; + } + StringBuffer sf = new StringBuffer(); + String[] fs = names.split(","); + for (String field : fs) { + field = camelName(field); + sf.append(field + ","); + } + String result = sf.toString(); + return result.substring(0, result.length() - 1); + } + + //update-begin--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + /** + * 将下划线大写方式命名的字符串转换为驼峰式。(首字母写) + * 如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。
+ * 例如:hello_world->HelloWorld + * + * @param name + * 转换前的下划线大写方式命名的字符串 + * @return 转换后的驼峰式命名的字符串 + */ + public static String camelNameCapFirst(String name) { + StringBuilder result = new StringBuilder(); + // 快速检查 + if (name == null || name.isEmpty()) { + // 没必要转换 + return ""; + } else if (!name.contains("_")) { + // 不含下划线,仅将首字母小写 + return name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase(); + } + // 用下划线将原始字符串分割 + String camels[] = name.split("_"); + for (String camel : camels) { + // 跳过原始字符串中开头、结尾的下换线或双重下划线 + if (camel.isEmpty()) { + continue; + } + // 其他的驼峰片段,首字母大写 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + //update-end--Author:zhoujf Date:20180503 for:TASK #2500 【代码生成器】代码生成器开发一通用模板生成功能 + + /** + * 将驼峰命名转化成下划线 + * @param para + * @return + */ + public static String camelToUnderline(String para){ + if(para.length()<3){ + return para.toLowerCase(); + } + StringBuilder sb=new StringBuilder(para); + int temp=0;//定位 + //从第三个字符开始 避免命名不规范 + for(int i=2;i clazz = object.getClass(); + List fieldList = new ArrayList<>(); + while (clazz != null) { + fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); + clazz = clazz.getSuperclass(); + } + Field[] fields = new Field[fieldList.size()]; + fieldList.toArray(fields); + return fields; + } + + /** + * 将map的key全部转成小写 + * @param list + * @return + */ + public static List> toLowerCasePageList(List> list){ + List> select = new ArrayList<>(); + for (Map row : list) { + Map resultMap = new HashMap<>(); + Set keySet = row.keySet(); + for (String key : keySet) { + String newKey = key.toLowerCase(); + resultMap.put(newKey, row.get(key)); + } + select.add(resultMap); + } + return select; + } + + /** + * 将entityList转换成modelList + * @param fromList + * @param tClass + * @param + * @param + * @return + */ + public static List entityListToModelList(List fromList, Class tClass){ + if(fromList == null || fromList.isEmpty()){ + return null; + } + List tList = new ArrayList<>(); + for(F f : fromList){ + T t = entityToModel(f, tClass); + tList.add(t); + } + return tList; + } + + public static T entityToModel(F entity, Class modelClass) { + log.debug("entityToModel : Entity属性的值赋值到Model"); + Object model = null; + if (entity == null || modelClass ==null) { + return null; + } + + try { + model = modelClass.newInstance(); + } catch (InstantiationException e) { + log.error("entityToModel : 实例化异常", e); + } catch (IllegalAccessException e) { + log.error("entityToModel : 安全权限异常", e); + } + BeanUtils.copyProperties(entity, model); + return (T)model; + } + + /** + * 判断 list 是否为空 + * + * @param list + * @return true or false + * list == null : true + * list.size() == 0 : true + */ + public static boolean listIsEmpty(Collection list) { + return (list == null || list.size() == 0); + } + + /** + * 判断 list 是否不为空 + * + * @param list + * @return true or false + * list == null : false + * list.size() == 0 : false + */ + public static boolean listIsNotEmpty(Collection list) { + return !listIsEmpty(list); + } + + /** + * 读取静态文本内容 + * @param url + * @return + */ + public static String readStatic(String url) { + String json = ""; + try { + //换个写法,解决springboot读取jar包中文件的问题 + InputStream stream = oConvertUtils.class.getClassLoader().getResourceAsStream(url.replace("classpath:", "")); + json = IOUtils.toString(stream,"UTF-8"); + } catch (IOException e) { + log.error(e.getMessage(),e); + } + return json; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java new file mode 100644 index 00000000..052849ca --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/oss/OssBootUtil.java @@ -0,0 +1,329 @@ +package com.jero.common.util.oss; + +import com.aliyun.oss.ClientConfiguration; +import com.aliyun.oss.OSSClient; +import com.aliyun.oss.common.auth.DefaultCredentialProvider; +import com.aliyun.oss.model.CannedAccessControlList; +import com.aliyun.oss.model.OSSObject; +import com.aliyun.oss.model.PutObjectResult; +import lombok.extern.slf4j.Slf4j; +import org.apache.tomcat.util.http.fileupload.FileItemStream; +import com.jero.common.util.CommonUtils; +import com.jero.common.util.filter.StrAttackFilter; +import com.jero.common.util.oConvertUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLDecoder; +import java.util.Date; +import java.util.UUID; + +/** + * @Description: 阿里云 oss 上传工具类(高依赖版) + * @Date: 2019/5/10 + */ +@Slf4j +public class OssBootUtil { + + private static String endPoint; + private static String accessKeyId; + private static String accessKeySecret; + private static String bucketName; + private static String staticDomain; + + public static void setEndPoint(String endPoint) { + OssBootUtil.endPoint = endPoint; + } + + public static void setAccessKeyId(String accessKeyId) { + OssBootUtil.accessKeyId = accessKeyId; + } + + public static void setAccessKeySecret(String accessKeySecret) { + OssBootUtil.accessKeySecret = accessKeySecret; + } + + public static void setBucketName(String bucketName) { + OssBootUtil.bucketName = bucketName; + } + + public static void setStaticDomain(String staticDomain) { + OssBootUtil.staticDomain = staticDomain; + } + + public static String getStaticDomain() { + return staticDomain; + } + + public static String getEndPoint() { + return endPoint; + } + + public static String getAccessKeyId() { + return accessKeyId; + } + + public static String getAccessKeySecret() { + return accessKeySecret; + } + + public static String getBucketName() { + return bucketName; + } + + public static OSSClient getOssClient() { + return ossClient; + } + + /** + * oss 工具客户端 + */ + private static OSSClient ossClient = null; + + /** + * 上传文件至阿里云 OSS + * 文件上传成功,返回文件完整访问路径 + * 文件上传失败,返回 null + * + * @param file 待上传文件 + * @param fileDir 文件保存目录 + * @return oss 中的相对文件路径 + */ + public static String upload(MultipartFile file, String fileDir,String customBucket) { + String FILE_URL = null; + initOSS(endPoint, accessKeyId, accessKeySecret); + StringBuilder fileUrl = new StringBuilder(); + String newBucket = bucketName; + if(oConvertUtils.isNotEmpty(customBucket)){ + newBucket = customBucket; + } + try { + //判断桶是否存在,不存在则创建桶 + if(!ossClient.doesBucketExist(newBucket)){ + ossClient.createBucket(newBucket); + } + // 获取文件名 + String orgName = file.getOriginalFilename(); + if("" == orgName){ + orgName=file.getName(); + } + orgName = CommonUtils.getFileName(orgName); + String fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.indexOf(".")); + if (!fileDir.endsWith("/")) { + fileDir = fileDir.concat("/"); + } + //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 + fileDir=StrAttackFilter.filter(fileDir); + //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击 + fileUrl = fileUrl.append(fileDir + fileName); + + if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { + FILE_URL = staticDomain + "/" + fileUrl; + } else { + FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl; + } + PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream()); + // 设置权限(公开读) +// ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead); + if (result != null) { + log.info("------OSS文件上传成功------" + fileUrl); + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } + return FILE_URL; + } + + /** + * 获取原始URL + * @param url: 原始URL + * @Return: java.lang.String + */ + public static String getOriginalUrl(String url) { + String originalDomain = "https://" + bucketName + "." + endPoint; + if(url.indexOf(staticDomain)!=-1){ + url = url.replace(staticDomain,originalDomain); + } + return url; + } + + /** + * 文件上传 + * @param file + * @param fileDir + * @return + */ + public static String upload(MultipartFile file, String fileDir) { + return upload(file, fileDir,null); + } + + /** + * 上传文件至阿里云 OSS + * 文件上传成功,返回文件完整访问路径 + * 文件上传失败,返回 null + * + * @param file 待上传文件 + * @param fileDir 文件保存目录 + * @return oss 中的相对文件路径 + */ + public static String upload(FileItemStream file, String fileDir) { + String FILE_URL = null; + initOSS(endPoint, accessKeyId, accessKeySecret); + StringBuilder fileUrl = new StringBuilder(); + try { + String suffix = file.getName().substring(file.getName().lastIndexOf('.')); + String fileName = UUID.randomUUID().toString().replace("-", "") + suffix; + if (!fileDir.endsWith("/")) { + fileDir = fileDir.concat("/"); + } + fileDir = StrAttackFilter.filter(fileDir); + fileUrl = fileUrl.append(fileDir + fileName); + if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { + FILE_URL = staticDomain + "/" + fileUrl; + } else { + FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; + } + PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(), file.openStream()); + // 设置权限(公开读) + ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); + if (result != null) { + log.info("------OSS文件上传成功------" + fileUrl); + } + } catch (IOException e) { + e.printStackTrace(); + return null; + } + return FILE_URL; + } + + /** + * 删除文件 + * @param url + */ + public static void deleteUrl(String url) { + deleteUrl(url,null); + } + + /** + * 删除文件 + * @param url + */ + public static void deleteUrl(String url,String bucket) { + String newBucket = bucketName; + if(oConvertUtils.isNotEmpty(bucket)){ + newBucket = bucket; + } + String bucketUrl = ""; + if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { + bucketUrl = staticDomain + "/" ; + } else { + bucketUrl = "https://" + newBucket + "." + endPoint + "/"; + } + url = url.replace(bucketUrl,""); + ossClient.deleteObject(newBucket, url); + } + + /** + * 删除文件 + * @param fileName + */ + public static void delete(String fileName) { + ossClient.deleteObject(bucketName, fileName); + } + + /** + * 获取文件流 + * @param objectName + * @param bucket + * @return + */ + public static InputStream getOssFile(String objectName,String bucket){ + InputStream inputStream = null; + try{ + String newBucket = bucketName; + if(oConvertUtils.isNotEmpty(bucket)){ + newBucket = bucket; + } + initOSS(endPoint, accessKeyId, accessKeySecret); + OSSObject ossObject = ossClient.getObject(newBucket,objectName); + inputStream = new BufferedInputStream(ossObject.getObjectContent()); + }catch (Exception e){ + log.info("文件获取失败" + e.getMessage()); + } + return inputStream; + } + + /** + * 获取文件流 + * @param objectName + * @return + */ + public static InputStream getOssFile(String objectName){ + return getOssFile(objectName,null); + } + + /** + * 获取文件外链 + * @param bucketName + * @param objectName + * @param expires + * @return + */ + public static String getObjectURL(String bucketName, String objectName, Date expires) { + initOSS(endPoint, accessKeyId, accessKeySecret); + try{ + if(ossClient.doesObjectExist(bucketName,objectName)){ + URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires); + return URLDecoder.decode(url.toString(),"UTF-8"); + } + }catch (Exception e){ + log.info("文件路径获取失败" + e.getMessage()); + } + return null; + } + + /** + * 初始化 oss 客户端 + * + * @return + */ + private static OSSClient initOSS(String endpoint, String accessKeyId, String accessKeySecret) { + if (ossClient == null) { + ossClient = new OSSClient(endpoint, + new DefaultCredentialProvider(accessKeyId, accessKeySecret), + new ClientConfiguration()); + } + return ossClient; + } + + + /** + * 上传文件到oss + * @param stream + * @param relativePath + * @return + */ + public static String upload(InputStream stream, String relativePath) { + String FILE_URL = null; + String fileUrl = relativePath; + initOSS(endPoint, accessKeyId, accessKeySecret); + if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) { + FILE_URL = staticDomain + "/" + relativePath; + } else { + FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl; + } + PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream); + // 设置权限(公开读) + ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead); + if (result != null) { + log.info("------OSS文件上传成功------" + fileUrl); + } + return FILE_URL; + } + + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java new file mode 100644 index 00000000..677f2218 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/SecurityTools.java @@ -0,0 +1,77 @@ +package com.jero.common.util.security; + +import cn.hutool.core.codec.Base64Decoder; +import cn.hutool.core.codec.Base64Encoder; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.crypto.asymmetric.KeyType; +import cn.hutool.crypto.asymmetric.RSA; +import cn.hutool.crypto.asymmetric.Sign; +import cn.hutool.crypto.asymmetric.SignAlgorithm; +import cn.hutool.crypto.symmetric.AES; +import cn.hutool.json.JSONObject; +import com.jero.common.util.security.entity.*; + +import javax.crypto.SecretKey; +import java.security.KeyPair; + +public class SecurityTools { + public static final String ALGORITHM = "AES/ECB/PKCS5Padding"; + + public static SecurityResp valid(SecurityReq req) { + SecurityResp resp=new SecurityResp(); + String pubKey=req.getPubKey(); + String aesKey=req.getAesKey(); + String data=req.getData(); + String signData=req.getSignData(); + RSA rsa=new RSA(null, Base64Decoder.decode(pubKey)); + Sign sign= new Sign(SignAlgorithm.SHA1withRSA,null,pubKey); + + + + byte[] decryptAes = rsa.decrypt(aesKey, KeyType.PublicKey); + //log.info("rsa解密后的秘钥"+ Base64Encoder.encode(decryptAes)); + AES aes = SecureUtil.aes(decryptAes); + + String dencrptValue =aes.decryptStr(data); + //log.info("解密后报文"+dencrptValue); + resp.setData(new JSONObject(dencrptValue)); + + boolean verify = sign.verify(dencrptValue.getBytes(), Base64Decoder.decode(signData)); + resp.setSuccess(verify); + return resp; + } + + public static SecuritySignResp sign(SecuritySignReq req) { + SecretKey secretKey = SecureUtil.generateKey(ALGORITHM); + byte[] key= secretKey.getEncoded(); + String prikey=req.getPrikey(); + String data=req.getData(); + + AES aes = SecureUtil.aes(key); + aes.getSecretKey().getEncoded(); + String encrptData =aes.encryptBase64(data); + RSA rsa=new RSA(prikey,null); + byte[] encryptAesKey = rsa.encrypt(secretKey.getEncoded(), KeyType.PrivateKey); + //log.info(("rsa加密过的秘钥=="+Base64Encoder.encode(encryptAesKey)); + + Sign sign= new Sign(SignAlgorithm.SHA1withRSA,prikey,null); + byte[] signed = sign.sign(data.getBytes()); + + //log.info(("签名数据===》》"+Base64Encoder.encode(signed)); + + SecuritySignResp resp=new SecuritySignResp(); + resp.setAesKey(Base64Encoder.encode(encryptAesKey)); + resp.setData(encrptData); + resp.setSignData(Base64Encoder.encode(signed)); + return resp; + } + public static MyKeyPair generateKeyPair(){ + KeyPair keyPair= SecureUtil.generateKeyPair(SignAlgorithm.SHA1withRSA.getValue(),2048); + String priKey= Base64Encoder.encode(keyPair.getPrivate().getEncoded()); + String pubkey= Base64Encoder.encode(keyPair.getPublic().getEncoded()); + MyKeyPair resp=new MyKeyPair(); + resp.setPriKey(priKey); + resp.setPubKey(pubkey); + return resp; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/MyKeyPair.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/MyKeyPair.java new file mode 100644 index 00000000..c4827ea8 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/MyKeyPair.java @@ -0,0 +1,9 @@ +package com.jero.common.util.security.entity; + +import lombok.Data; + +@Data +public class MyKeyPair { + private String priKey; + private String pubKey; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityReq.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityReq.java new file mode 100644 index 00000000..270251cb --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityReq.java @@ -0,0 +1,11 @@ +package com.jero.common.util.security.entity; + +import lombok.Data; + +@Data +public class SecurityReq { + private String data; + private String pubKey; + private String signData; + private String aesKey; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityResp.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityResp.java new file mode 100644 index 00000000..2d2e99e7 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecurityResp.java @@ -0,0 +1,10 @@ +package com.jero.common.util.security.entity; + +import cn.hutool.json.JSONObject; +import lombok.Data; + +@Data +public class SecurityResp { + private Boolean success; + private JSONObject data; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignReq.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignReq.java new file mode 100644 index 00000000..1f66c53b --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignReq.java @@ -0,0 +1,9 @@ +package com.jero.common.util.security.entity; + +import lombok.Data; + +@Data +public class SecuritySignReq { + private String data; + private String prikey; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignResp.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignResp.java new file mode 100644 index 00000000..08302b84 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/security/entity/SecuritySignResp.java @@ -0,0 +1,10 @@ +package com.jero.common.util.security.entity; + +import lombok.Data; + +@Data +public class SecuritySignResp { + private String data; + private String signData; + private String aesKey; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java new file mode 100644 index 00000000..2ded51e4 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/ObjectParseUtil.java @@ -0,0 +1,60 @@ +package com.jero.common.util.superSearch; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +/** + * 判断类型,追加查询规则 + * + * @Author Scott + * @Date 2019年02月14日 + */ +public class ObjectParseUtil { + + /** + * + * @param queryWrapper QueryWrapper + * @param name 字段名字 + * @param rule 查询规则 + * @param value 查询条件值 + */ + public static void addCriteria(QueryWrapper queryWrapper, String name, QueryRuleEnum rule, Object value) { + if (value == null || rule == null) { + return; + } + switch (rule) { + case GT: + queryWrapper.gt(name, value); + break; + case GE: + queryWrapper.ge(name, value); + break; + case LT: + queryWrapper.lt(name, value); + break; + case LE: + queryWrapper.le(name, value); + break; + case EQ: + queryWrapper.eq(name, value); + break; + case NE: + queryWrapper.ne(name, value); + break; + case IN: + queryWrapper.in(name, (Object[]) value); + break; + case LIKE: + queryWrapper.like(name, value); + break; + case LEFT_LIKE: + queryWrapper.likeLeft(name, value); + break; + case RIGHT_LIKE: + queryWrapper.likeRight(name, value); + break; + default: + break; + } + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleEnum.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleEnum.java new file mode 100644 index 00000000..41f29532 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleEnum.java @@ -0,0 +1,60 @@ +package com.jero.common.util.superSearch; + +import com.jero.common.util.oConvertUtils; + +/** + * Query 规则 常量 + * @Author Scott + * @Date 2019年02月14日 + */ +public enum QueryRuleEnum { + + GT(">","大于"), + GE(">=","大于等于"), + LT("<","小于"), + LE("<=","小于等于"), + EQ("=","等于"), + NE("!=","不等于"), + IN("IN","包含"), + LIKE("LIKE","全模糊"), + LEFT_LIKE("LEFT_LIKE","左模糊"), + RIGHT_LIKE("RIGHT_LIKE","右模糊"), + SQL_RULES("EXTEND_SQL","自定义SQL片段"); + + private String value; + + private String msg; + + QueryRuleEnum(String value, String msg){ + this.value = value; + this.msg = msg; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public static QueryRuleEnum getByValue(String value){ + if(oConvertUtils.isEmpty(value)) { + return null; + } + for(QueryRuleEnum val :values()){ + if (val.getValue().equals(value)){ + return val; + } + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleVo.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleVo.java new file mode 100644 index 00000000..fed539fa --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/common/util/superSearch/QueryRuleVo.java @@ -0,0 +1,11 @@ +package com.jero.common.util.superSearch; + +import lombok.Data; + +@Data +public class QueryRuleVo { + + private String field; + private String rule; + private String val; +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiConfig.java new file mode 100644 index 00000000..85493b3d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiConfig.java @@ -0,0 +1,28 @@ +package com.jero.config; + +import org.jeecgframework.core.util.ApplicationContextUtil; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Author: Scott + * @Date: 2018/2/7 + * @description: autopoi 配置类 + */ + +@Configuration +public class AutoPoiConfig { + + /** + * excel注解字典参数支持(导入导出字典值,自动翻译) + * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") + * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; + * 2、导入的时候,会把男、女翻译成1,2存进数据库; + * @return + */ + @Bean + public ApplicationContextUtil applicationContextUtil() { + return new org.jeecgframework.core.util.ApplicationContextUtil(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java new file mode 100644 index 00000000..52608ae0 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/AutoPoiDictConfig.java @@ -0,0 +1,65 @@ +package com.jero.config; + +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.CommonAPI; +import com.jero.common.system.vo.DictModel; +import com.jero.common.util.oConvertUtils; +import org.jeecgframework.dict.service.AutoPoiDictServiceI; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; + +/** + * 描述:AutoPoi Excel注解支持字典参数设置 + * 举例: @Excel(name = "性别", width = 15, dicCode = "sex") + * 1、导出的时候会根据字典配置,把值1,2翻译成:男、女; + * 2、导入的时候,会把男、女翻译成1,2存进数据库; + * + * @Author:scott + * @since:2019-04-09 + * @Version:1.0 + */ +@Slf4j +@Service +public class AutoPoiDictConfig implements AutoPoiDictServiceI { + @Lazy + @Resource + private CommonAPI commonAPI; + + /** + * 通过字典查询easypoi,所需字典文本 + * + * @Author:scott + * @since:2019-04-09 + * @return + */ + @Override + public String[] queryDict(String dicTable, String dicCode, String dicText) { + List dictReplaces = new ArrayList(); + List dictList = null; + // step.1 如果没有字典表则使用系统字典表 + if (oConvertUtils.isEmpty(dicTable)) { + dictList = commonAPI.queryDictItemsByCode(dicCode); + } else { + try { + dicText = oConvertUtils.getString(dicText, dicCode); + dictList = commonAPI.queryTableDictItemsByCode(dicTable, dicText, dicCode); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + } + for (DictModel t : dictList) { + if(t!=null){ + dictReplaces.add(t.getText() + "_" + t.getValue()); + } + } + if (dictReplaces != null && dictReplaces.size() != 0) { + log.info("---AutoPoi--Get_DB_Dict------"+ dictReplaces.toString()); + return dictReplaces.toArray(new String[dictReplaces.size()]); + } + return null; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java new file mode 100644 index 00000000..ff33e8c0 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/JeroCloudCondition.java @@ -0,0 +1,22 @@ +package com.jero.config; + +import com.jero.common.constant.CommonConstant; +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; + +/** + * 微服务环境加载条件 + */ +public class JeroCloudCondition implements Condition { + + @Override + public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { + Object object = context.getEnvironment().getProperty(CommonConstant.CLOUD_SERVER_KEY); + //如果没有服务注册发现的配置 说明是单体应用 + if(object==null){ + return false; + } + return true; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/RestTemplateConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/RestTemplateConfig.java new file mode 100644 index 00000000..45707853 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/RestTemplateConfig.java @@ -0,0 +1,28 @@ +package com.jero.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.client.ClientHttpRequestFactory; +import org.springframework.http.client.SimpleClientHttpRequestFactory; +import org.springframework.web.client.RestTemplate; + +/** +* 优雅的http请求方式RestTemplate +* @Return: +*/ +@Configuration +public class RestTemplateConfig { + + @Bean + public RestTemplate restTemplate(ClientHttpRequestFactory factory) { + return new RestTemplate(factory); + } + + @Bean + public ClientHttpRequestFactory simpleClientHttpRequestFactory() { + SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory(); + factory.setReadTimeout(5000);//ms + factory.setConnectTimeout(15000);//ms + return factory; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java new file mode 100644 index 00000000..d7eb5054 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/StaticConfig.java @@ -0,0 +1,31 @@ +package com.jero.config; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 设置静态参数初始化 + */ +@Component +@Data +public class StaticConfig { + + @Value("${jero.oss.accessKey}") + private String accessKeyId; + + @Value("${jero.oss.secretKey}") + private String accessKeySecret; + + @Value(value = "${spring.mail.username}") + private String emailFrom; + + + /*@Bean + public void initStatic() { + DySmsHelper.setAccessKeyId(accessKeyId); + DySmsHelper.setAccessKeySecret(accessKeySecret); + EmailSendMsgHandle.setEmailFrom(emailFrom); + }*/ + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java new file mode 100644 index 00000000..36bce302 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/Swagger2Config.java @@ -0,0 +1,139 @@ +package com.jero.config; + + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.constant.CommonConstant; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import org.springframework.context.annotation.Import; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import springfox.bean.validators.configuration.BeanValidatorPluginsConfiguration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.ParameterBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.schema.ModelRef; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +/** + * @Author scott + */ +@Configuration +@EnableSwagger2 +@EnableKnife4j +@Import(BeanValidatorPluginsConfiguration.class) +public class Swagger2Config implements WebMvcConfigurer { + + /** + * + * 显示swagger-ui.html文档展示页,还必须注入swagger资源: + * + * @param registry + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + } + + /** + * swagger2的配置文件,这里可以配置swagger2的一些基本的内容,比如扫描的包等等 + * + * @return Docket + */ + @Bean(value = "defaultApi2") + public Docket defaultApi2() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + //此包路径下的类,才生成接口文档 + .apis(RequestHandlerSelectors.basePackage("com.jero")) + //加了ApiOperation注解的类,才生成接口文档 + .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) + .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + .paths(PathSelectors.any()) + .build() + .securitySchemes(Collections.singletonList(securityScheme())) + .securityContexts(securityContexts()); + //.globalOperationParameters(setHeaderToken()); + } + + /*** + * oauth2配置 + * 需要增加swagger授权回调地址 + * http://localhost:8888/webjars/springfox-swagger-ui/o2c.html + * @return + */ + @Bean + SecurityScheme securityScheme() { + return new ApiKey(CommonConstant.X_ACCESS_TOKEN, CommonConstant.X_ACCESS_TOKEN, "header"); + } + /** + * JWT token + * @return + */ + private List setHeaderToken() { + ParameterBuilder tokenPar = new ParameterBuilder(); + List pars = new ArrayList<>(); + tokenPar.name(CommonConstant.X_ACCESS_TOKEN).description("token").modelRef(new ModelRef("string")).parameterType("header").required(false).build(); + pars.add(tokenPar.build()); + return pars; + } + + /** + * api文档的详细信息函数,注意这里的注解引用的是哪个 + * + * @return + */ + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + // //大标题 + .title("jero-boot 后台服务API接口文档") + // 版本号 + .version("1.0") +// .termsOfServiceUrl("NO terms of service") + // 描述 + .description("后台API接口") + // 作者 + .contact("JERO团队") + .license("The Apache License, Version 2.0") + .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0.html") + .build(); + } + + /** + * 新增 securityContexts 保持登录状态 + */ + private List securityContexts() { + return new ArrayList( + Collections.singleton(SecurityContext.builder() + .securityReferences(defaultAuth()) + .forPaths(PathSelectors.regex("^(?!auth).*$")) + .build()) + ); + } + + private List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + return new ArrayList( + Collections.singleton(new SecurityReference(CommonConstant.X_ACCESS_TOKEN, authorizationScopes))); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebConfig.java new file mode 100644 index 00000000..f1406645 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebConfig.java @@ -0,0 +1,62 @@ +package com.jero.config; + +import com.jero.config.filter.cors.CorsFilter; +import com.jero.config.filter.csrf.CsrfFilter; +import com.jero.config.filter.xss.XssFilter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.List; + +/** + * @author hzwl + */ +@Configuration +public class WebConfig { + @Value("${jero.xssExcludedPages}") + private List xssExcluded; + + @Value("${jero.notFilter}") + private List notFilter; + + @Value("${jero.originIp}") + private String originIp; + + /** + * 白名单 + */ + @Value("${jero.whiteUrls}") + private List whiteUrls; + + @Bean + public FilterRegistrationBean csrfFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new CsrfFilter(whiteUrls)); + registration.addUrlPatterns("/*"); + registration.setName("csrfFilter"); + registration.setOrder(1); + return registration; + } + + @Bean + public FilterRegistrationBean corsFilter() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new CorsFilter(originIp,notFilter)); + registration.addUrlPatterns("/*"); + registration.setName("corsFilter"); + registration.setOrder(2); + return registration; + } + + @Bean + public FilterRegistrationBean xssFilter() { + FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>(); + filterRegistrationBean.setFilter(new XssFilter(xssExcluded)); + filterRegistrationBean.addUrlPatterns("/*"); + filterRegistrationBean.setOrder(3); + return filterRegistrationBean; + } + +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java new file mode 100644 index 00000000..bbb76537 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebMvcConfiguration.java @@ -0,0 +1,82 @@ +package com.jero.config; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.actuate.trace.http.InMemoryHttpTraceRepository; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Conditional; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; + +/** + * Spring Boot 2.0 解决跨域问题 + * + * @Author qinfeng + * + */ +@Configuration +public class WebMvcConfiguration implements WebMvcConfigurer { + + @Value("${jero.path.upload}") + private String upLoadPath; + @Value("${jero.path.webapp}") + private String webAppPath; + @Value("${spring.resource.static-locations}") + private String staticLocations; + + /** + * 静态资源的配置 - 使得可以从磁盘中读取 Html、图片、视频、音频等 + */ + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/**") + .addResourceLocations("file:" + upLoadPath + "//", "file:" + webAppPath + "//") + .addResourceLocations(staticLocations.split(",")); + } + + /** + * 方案一: 默认访问根路径跳转 doc.html页面 (swagger文档页面) + * 方案二: 访问根路径改成跳转 index.html页面 (简化部署方案: 可以把前端打包直接放到项目的 webapp,上面的配置) + */ + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("doc.html"); + } + + /** + * 添加Long转json精度丢失是配置 + * @Return: void + */ + @Override + public void configureMessageConverters(List> converters) { + MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); + ObjectMapper objectMapper = new ObjectMapper(); + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + objectMapper.registerModule(simpleModule); + jackson2HttpMessageConverter.setObjectMapper(objectMapper); + converters.add(jackson2HttpMessageConverter); + } + + /** + * SpringBootAdmin的Httptrace不见了 + * https://blog.csdn.net/u013810234/article/details/110097201 + */ + @Bean + public InMemoryHttpTraceRepository getInMemoryHttpTrace(){ + return new InMemoryHttpTraceRepository(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebSocketConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebSocketConfig.java new file mode 100644 index 00000000..fdd07440 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/WebSocketConfig.java @@ -0,0 +1,18 @@ +package com.jero.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +@Configuration +public class WebSocketConfig { + /** + * 注入ServerEndpointExporter, + * 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint + */ + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/cors/CorsFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/cors/CorsFilter.java new file mode 100644 index 00000000..bb797b9b --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/cors/CorsFilter.java @@ -0,0 +1,90 @@ +package com.jero.config.filter.cors; + + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +/** + * @author hzwl + * 设置响应信息 + */ +@WebFilter(urlPatterns = {"/verifyCode/**"}) +public class CorsFilter implements Filter { + + private static final Log LOGGER = LogFactory.getLog(CorsFilter.class); + + private final String originIp; + + private final List notFilter; + + public CorsFilter(String originIp, List notFilter) { + this.originIp = originIp; + this.notFilter = notFilter; + } + + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, + FilterChain chain) throws IOException, ServletException { + HttpServletRequest req = (HttpServletRequest) request; + + final String origin = ((HttpServletRequest) request).getHeader("Origin"); + //请求头与系统的origin不通则咔嚓 + if (Objects.nonNull(origin) && !originIp.contains(origin)){ + return; + } + //获取请求路径 + String url = req.getRequestURL().toString(); + if (!isMSBrowser(req)){ + for (String name : notFilter) { + //如果包含,不需要判断Origin是否合法 + if(url.contains(name)){ + responseInfo(request, response, chain); + return; + } + } + } + responseInfo(request, response, chain); + } + public boolean isMSBrowser(HttpServletRequest request) { + String[] IEBrowserSignals = {"MSIE", "Trident"}; + String userAgent = request.getHeader("User-Agent"); + for (String signal : IEBrowserSignals) { + if (userAgent.contains(signal)){ + return true; + } + } + return false; + } + private void responseInfo(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setHeader("Access-Control-Allow-Origin", originIp); + httpServletResponse.addHeader("Access-Control-Allow-Headers", "Authorization"); + httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS, PUT, DELETE"); + httpServletResponse.setHeader("Access-Control-Max-Age", "3600"); + httpServletResponse.setHeader("Content-Security-Policy", "upgrade-insecure-requests;connect-src *"); + httpServletResponse.setHeader("X-Content-Type-Options", "nosniff"); + httpServletResponse.setHeader("X-XSS-Protection", "1;mode=block"); + httpServletResponse.setHeader("Access-Control-Allow-Headers", "Origin, Accept, x-auth-token, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, authorization"); + chain.doFilter(request, response); + } + + @Override + public void destroy() { + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/csrf/CsrfFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/csrf/CsrfFilter.java new file mode 100644 index 00000000..28c481dc --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/csrf/CsrfFilter.java @@ -0,0 +1,124 @@ +package com.jero.config.filter.csrf; + +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.jero.common.api.vo.Result; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; + +/** + * 描述:跨站过滤器 + * + * @Author: 马志朝 + * @Date: 2021/4/16 14:09 + */ + +public class CsrfFilter implements Filter { + /** + * LOGGER + */ + private static final Log LOGGER = LogFactory.getLog(CsrfFilter.class); + + private final List whiteUrls; + + /** + * size + */ + private int size = 0; + + public CsrfFilter(List whiteUrls) { + this.whiteUrls = whiteUrls; + } + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + size = whiteUrls.size(); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException{ + //try { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse res = (HttpServletResponse) response; + // 获取请求url地址 + String url = req.getRequestURL().toString(); + // 获取来源 + String referurl = req.getHeader("Referer"); + if(isWhiteReq(referurl)){ + chain.doFilter(request, response); + }else{ + String log = ""; + String date = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); + String ip = getIp(req); + log = "跨站请求---->>>" + ip + "||" + date + "||" + referurl + "||" + url; + LOGGER.warn(log); + //发送错误信息 + JSONObject json = JSONUtil.parseObj(Result.error("监测到跨站请求,请求失败"), false); + res.setCharacterEncoding("UTF-8"); + res.setContentType("application/json; charset=utf-8"); + PrintWriter out = res.getWriter(); + out.append(json.toStringPretty()); + } + //} catch (Exception e) { + // LOGGER.error("doFilter", e); + //} + } + /** + * 判断是否是白名单 + */ + private boolean isWhiteReq(String referUrl) { + if (referUrl == null || "".equals(referUrl) || size == 0) { + return true; + } else { + String refHost = ""; + referUrl = referUrl.toLowerCase(); + if (referUrl.startsWith("http://")) { + refHost = referUrl.substring(7); + } else if (referUrl.startsWith("https://")) { + refHost = referUrl.substring(8); + } + for (String urlTemp : whiteUrls) { + if (refHost.contains(urlTemp.toLowerCase())) { + return true; + } + } + } + return false; + } + /** + * 获取登录用户IP地址 + * @param request + * @return + */ + public String getIp(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + if (ip.equals("0:0:0:0:0:0:0:1")) { + ip = "localhost"; + } + return ip; + } + @Override + public void destroy() { + + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/HTMLFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/HTMLFilter.java new file mode 100644 index 00000000..e067d1d9 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/HTMLFilter.java @@ -0,0 +1,446 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.jero.config.filter.xss; + +import cn.hutool.core.lang.Console; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author hzwl + */ +public final class HTMLFilter { + private static final int REGEX_FLAGS_SI = 34; + private static final Pattern P_COMMENTS = Pattern.compile("", 32); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", 34); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", 32); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", 34); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", 34); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", 34); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", 34); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", 34); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", 32); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']"); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap(); + private final Map> vAllowed; + private final Map vTagCounts; + private final String[] vSelfClosingTags; + private final String[] vNeedClosingTags; + private final String[] vDisallowed; + private final String[] vProtocolAtts; + private final String[] vAllowedProtocols; + private final String[] vRemoveBlanks; + private final String[] vAllowedEntities; + private final boolean stripComment; + private final boolean encodeQuotes; + private boolean vDebug; + private final boolean alwaysMakeTags; + + public HTMLFilter() { + this.vTagCounts = new HashMap(); + this.vDebug = false; + this.vAllowed = new HashMap(); + ArrayList a_atts = new ArrayList(); + a_atts.add("href"); + a_atts.add("target"); + this.vAllowed.put("a", a_atts); + ArrayList img_atts = new ArrayList(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + this.vAllowed.put("img", img_atts); + ArrayList no_atts = new ArrayList(); + this.vAllowed.put("b", no_atts); + this.vAllowed.put("strong", no_atts); + this.vAllowed.put("i", no_atts); + this.vAllowed.put("em", no_atts); + this.vSelfClosingTags = new String[]{"img"}; + this.vNeedClosingTags = new String[]{"a", "b", "strong", "i", "em"}; + this.vDisallowed = new String[0]; + this.vAllowedProtocols = new String[]{"http", "mailto", "https"}; + this.vProtocolAtts = new String[]{"src", "href"}; + this.vRemoveBlanks = new String[]{"a", "b", "strong", "i", "em"}; + this.vAllowedEntities = new String[]{"amp", "gt", "lt", "quot"}; + this.stripComment = true; + this.encodeQuotes = true; + this.alwaysMakeTags = true; + } + + public HTMLFilter(boolean debug) { + this(); + this.vDebug = debug; + } + + public HTMLFilter(Map conf) { + this.vTagCounts = new HashMap(); + this.vDebug = false; + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + this.vAllowed = Collections.unmodifiableMap((HashMap)conf.get("vAllowed")); + this.vSelfClosingTags = (String[])((String[])conf.get("vSelfClosingTags")); + this.vNeedClosingTags = (String[])((String[])conf.get("vNeedClosingTags")); + this.vDisallowed = (String[])((String[])conf.get("vDisallowed")); + this.vAllowedProtocols = (String[])((String[])conf.get("vAllowedProtocols")); + this.vProtocolAtts = (String[])((String[])conf.get("vProtocolAtts")); + this.vRemoveBlanks = (String[])((String[])conf.get("vRemoveBlanks")); + this.vAllowedEntities = (String[])((String[])conf.get("vAllowedEntities")); + this.stripComment = conf.containsKey("stripComment") ? (Boolean)conf.get("stripComment") : true; + this.encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean)conf.get("encodeQuotes") : true; + this.alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean)conf.get("alwaysMakeTags") : true; + } + + private void reset() { + this.vTagCounts.clear(); + } + + private void debug(String msg) { + if (this.vDebug) { + Console.log(msg); + } + + } + + public static String chr(int decimal) { + return String.valueOf((char)decimal); + } + + public static String htmlSpecialChars(String s) { +// String result = regexReplace(P_AMP, "&", s); + String result = regexReplace(P_QUOTE, """, s); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + public String filter(String input) { + this.reset(); + this.debug("************************************************"); + this.debug(" INPUT: " + input); + String s = this.escapeComments(input); + this.debug(" escapeComments: " + s); + s = this.balanceHTML(s); + this.debug(" balanceHTML: " + s); + s = this.checkTags(s); + this.debug(" checkTags: " + s); + s = this.processRemoveBlanks(s); + this.debug("processRemoveBlanks: " + s); +// s = this.validateEntities(s); +// this.debug(" validateEntites: " + s); + this.debug("************************************************\n\n"); + return s; + } + + public boolean isAlwaysMakeTags() { + return this.alwaysMakeTags; + } + + public boolean isStripComments() { + return this.stripComment; + } + + private String escapeComments(String s) { + Matcher m = P_COMMENTS.matcher(s); + StringBuffer buf = new StringBuffer(); + if (m.find()) { + String match = m.group(1); + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + + m.appendTail(buf); + return buf.toString(); + } + + private String balanceHTML(String s) { + if (this.alwaysMakeTags) { +/* s = regexReplace(P_END_ARROW, "", s); + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s);*/ + } else { + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) { + Matcher m = P_TAGS.matcher(s); + StringBuffer buf = new StringBuffer(); + + while(m.find()) { + String replaceStr = m.group(1); + replaceStr = this.processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + + m.appendTail(buf); + StringBuilder sBuilder = new StringBuilder(buf.toString()); + Iterator var5 = this.vTagCounts.keySet().iterator(); + + while(var5.hasNext()) { + String key = (String)var5.next(); + + for(int ii = 0; ii < (Integer)this.vTagCounts.get(key); ++ii) { + sBuilder.append(""); + } + } + + s = sBuilder.toString(); + return s; + } + + private String processRemoveBlanks(String s) { + String result = s; + String[] var3 = this.vRemoveBlanks; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + String tag = var3[var5]; + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + + result = regexReplace((Pattern)P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + + result = regexReplace((Pattern)P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(Pattern regex_pattern, String replacement, String s) { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(String s) { + Matcher m = P_END_TAG.matcher(s); + String name; + if (m.find()) { + name = m.group(1).toLowerCase(); + if (this.allowed(name) && !inArray(name, this.vSelfClosingTags) && this.vTagCounts.containsKey(name)) { + this.vTagCounts.put(name, (Integer)this.vTagCounts.get(name) - 1); + return ""; + } + } + + m = P_START_TAG.matcher(s); + if (!m.find()) { + m = P_COMMENT.matcher(s); + return !this.stripComment && m.find() ? "<" + m.group() + ">" : ""; + } else { + name = m.group(1).toLowerCase(); + String body = m.group(2); + String ending = m.group(3); + if (!this.allowed(name)) { + return ""; + } else { + StringBuilder params = new StringBuilder(); + Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + List paramNames = new ArrayList(); + ArrayList paramValues = new ArrayList(); + + while(m2.find()) { + paramNames.add(m2.group(1)); + paramValues.add(m2.group(3)); + } + + while(m3.find()) { + paramNames.add(m3.group(1)); + paramValues.add(m3.group(3)); + } + + for(int ii = 0; ii < paramNames.size(); ++ii) { + String paramName = ((String)paramNames.get(ii)).toLowerCase(); + String paramValue = (String)paramValues.get(ii); + if (this.allowedAttribute(name, paramName)) { + if (inArray(paramName, this.vProtocolAtts)) { + paramValue = this.processParamProtocol(paramValue); + } + + params.append(' ').append(paramName).append("=\"").append(paramValue).append("\""); + } + } + + if (inArray(name, this.vSelfClosingTags)) { + ending = " /"; + } + + if (inArray(name, this.vNeedClosingTags)) { + ending = ""; + } + + if (ending != null && ending.length() >= 1) { + ending = " /"; + } else if (this.vTagCounts.containsKey(name)) { + this.vTagCounts.put(name, (Integer)this.vTagCounts.get(name) + 1); + } else { + this.vTagCounts.put(name, 1); + } + + return "<" + name + params + ending + ">"; + } + } + } + + private String processParamProtocol(String s) { + s = this.decodeEntities(s); + Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) { + String protocol = m.group(1); + if (!inArray(protocol, this.vAllowedProtocols)) { + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) { + StringBuffer buf = new StringBuffer(); + Matcher m = P_ENTITY.matcher(s); + + String match; + int decimal; + while(m.find()) { + match = m.group(1); + decimal = Integer.decode(match); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + + m.appendTail(buf); + s = buf.toString(); + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + + while(m.find()) { + match = m.group(1); + decimal = Integer.valueOf(match, 16); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + + m.appendTail(buf); + s = buf.toString(); + buf = new StringBuffer(); +// m = P_ENCODE.matcher(s); + + while(m.find()) { + match = m.group(1); + decimal = Integer.valueOf(match, 16); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + + m.appendTail(buf); + s = buf.toString(); + s = this.validateEntities(s); + return s; + } + + private String validateEntities(String s) { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_ENTITIES.matcher(s); + + while(m.find()) { + String one = m.group(1); + String two = m.group(2); + m.appendReplacement(buf, Matcher.quoteReplacement(this.checkEntity(one, two))); + } + + m.appendTail(buf); + return this.encodeQuotes(buf.toString()); + } + + private String encodeQuotes(String s) { + if (!this.encodeQuotes) { + return s; + } else { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + + while(m.find()) { + String one = m.group(1); + String two = m.group(2); + String three = m.group(3); + m.appendReplacement(buf, Matcher.quoteReplacement(one + regexReplace(P_QUOTE, """, two) + three)); + } + + m.appendTail(buf); + return buf.toString(); + } + } + + private String checkEntity(String preamble, String term) { + return ";".equals(term) && this.isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(String entity) { + return inArray(entity, this.vAllowedEntities); + } + + private static boolean inArray(String s, String[] array) { + String[] var2 = array; + int var3 = array.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String item = var2[var4]; + if (item != null && item.equals(s)) { + return true; + } + } + + return false; + } + + private boolean allowed(String name) { + return (this.vAllowed.isEmpty() || this.vAllowed.containsKey(name)) && !inArray(name, this.vDisallowed); + } + + private boolean allowedAttribute(String name, String paramName) { + return this.allowed(name) && (this.vAllowed.isEmpty() || ((List)this.vAllowed.get(name)).contains(paramName)); + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/SqlFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/SqlFilter.java new file mode 100644 index 00000000..eb9ea6db --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/SqlFilter.java @@ -0,0 +1,34 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.jero.config.filter.xss; + +import org.apache.commons.lang.StringUtils; + +public class SqlFilter { + public SqlFilter() { + } + + public static String sqlInject(String str) { + if (StringUtils.isBlank(str)) { + return null; + } else { + str = StringUtils.replace(str, "\\n", "Line_Break"); + str = StringUtils.replace(str, "\\", ""); + String[] keywords = new String[]{"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"}; + String[] var2 = keywords; + int var3 = keywords.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String keyword = var2[var4]; + if (StringUtils.indexOfIgnoreCase(str, keyword + " ") != -1) { + throw new RuntimeException("包含非法字符"); + } + } + str = StringUtils.replace(str, "Line_Break", "\\n"); + return str; + } + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssFilter.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssFilter.java new file mode 100644 index 00000000..dca9b096 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssFilter.java @@ -0,0 +1,57 @@ +package com.jero.config.filter.xss; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.List; + +/** + * @author hzwl + */ +public class XssFilter implements Filter { + private final List excludedPages; + + public XssFilter(List excludedPages) { + this.excludedPages=excludedPages; + } + + @Override + public void init(FilterConfig config) throws ServletException { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + boolean isExcludedPage = false; + for (String excludedPage : excludedPages) { + if (((HttpServletRequest)request).getRequestURI().contains(excludedPage)) { + isExcludedPage = true; + break; + } + } + if (isExcludedPage) { + chain.doFilter(request, response); + } else { + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest)request); + chain.doFilter(xssRequest, response); + } + + } + + @Override + public void destroy() { + } + + + public static String filterNull(Object o) { + return o != null && !"null".equals(o.toString()) ? o.toString().trim() : ""; + } + + public static boolean isNotEmpty(Object o) { + if (o == null) { + return false; + } else { + return !"".equals(filterNull(o.toString())); + } + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssHttpServletRequestWrapper.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssHttpServletRequestWrapper.java new file mode 100644 index 00000000..7e554c1f --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/filter/xss/XssHttpServletRequestWrapper.java @@ -0,0 +1,134 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package com.jero.config.filter.xss; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * @author hzwl + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + HttpServletRequest orgRequest; + private static final HTMLFilter HTML_FILTER = new HTMLFilter(); + private static final SqlFilter sqlFilter = new SqlFilter(); + + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + this.orgRequest = request; + } + + @Override + public ServletInputStream getInputStream() throws IOException { + String type = super.getHeader("Content-Type"); + if (StringUtils.indexOfIgnoreCase(type, "application/json") < 0) { + return super.getInputStream(); + } else { + String json = IOUtils.toString(super.getInputStream(), "utf-8"); + if (StringUtils.isBlank(json)) { + return super.getInputStream(); + } else { + json = this.xssSqlEncode(json); + final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes("utf-8")); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return true; + } + @Override + public boolean isReady() { + return true; + } + @Override + public void setReadListener(ReadListener readListener) { + } + @Override + public int read() throws IOException { + return bis.read(); + } + }; + } + } + } + + @Override + public String getParameter(String name) { + String value = super.getParameter(this.xssSqlEncode(name)); + if (StringUtils.isNotBlank(value)) { + value = this.xssSqlEncode(value); + } + + return value; + } + + @Override + public String[] getParameterValues(String name) { + String[] parameters = super.getParameterValues(name); + if (parameters != null && parameters.length != 0) { + for(int i = 0; i < parameters.length; ++i) { + parameters[i] = this.xssSqlEncode(parameters[i]); + } + + return parameters; + } else { + return null; + } + } + + @Override + public Map getParameterMap() { + Map map = new LinkedHashMap(); + Map parameters = super.getParameterMap(); + Iterator var3 = parameters.keySet().iterator(); + + while(var3.hasNext()) { + String key = (String)var3.next(); + String[] values = (String[])parameters.get(key); + + for(int i = 0; i < values.length; ++i) { + values[i] = this.xssSqlEncode(values[i]); + } + + map.put(key, values); + } + + return map; + } + + @Override + public String getHeader(String name) { + String value = super.getHeader(this.xssSqlEncode(name)); + if (StringUtils.isNotBlank(value)) { + value = this.xssSqlEncode(value); + } + + return value; + } + + private String xssSqlEncode(String input) { + input=input.replaceAll("%5b","[").replaceAll("%5d","]"); + String htmlOutput= HTML_FILTER.filter(input); + return SqlFilter.sqlInject(htmlOutput); + } + + public HttpServletRequest getOrgRequest() { + return this.orgRequest; + } + + public static HttpServletRequest getOrgRequest(HttpServletRequest request) { + return request instanceof XssHttpServletRequestWrapper ? ((XssHttpServletRequestWrapper)request).getOrgRequest() : request; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/JeroTenantParser.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/JeroTenantParser.java new file mode 100644 index 00000000..4a3f856d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/JeroTenantParser.java @@ -0,0 +1,130 @@ +package com.jero.config.mybatis; + +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; +import net.sf.jsqlparser.expression.BinaryExpression; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.Parenthesis; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.expression.operators.conditional.OrExpression; +import net.sf.jsqlparser.expression.operators.relational.*; +import net.sf.jsqlparser.schema.Column; +import net.sf.jsqlparser.schema.Table; +import net.sf.jsqlparser.statement.select.*; + +import java.util.List; + +/** + * 复写租户条件 + */ +public class JeroTenantParser extends TenantSqlParser { + + /** + * @param expression + * @param table + * @return + */ + protected Expression processTableAlias(Expression expression, Table table) { + String tableAliasName; + if (table.getAlias() == null) { + tableAliasName = table.getName(); + } else { + tableAliasName = table.getAlias().getName(); + } + + // in + if (expression instanceof InExpression) { + InExpression in = (InExpression) expression; + if (in.getLeftExpression() instanceof Column) { + setTableAliasNameForColumn((Column) in.getLeftExpression(), tableAliasName); + } + + // 比较操作 + } else if (expression instanceof BinaryExpression) { + BinaryExpression compare = (BinaryExpression) expression; + if (compare.getLeftExpression() instanceof Column) { + setTableAliasNameForColumn((Column) compare.getLeftExpression(), tableAliasName); + } else if (compare.getRightExpression() instanceof Column) { + setTableAliasNameForColumn((Column) compare.getRightExpression(), tableAliasName); + } + + // between + } else if (expression instanceof Between) { + Between between = (Between) expression; + if (between.getLeftExpression() instanceof Column) { + setTableAliasNameForColumn((Column) between.getLeftExpression(), tableAliasName); + } + } + return expression; + } + + private void setTableAliasNameForColumn(Column column, String tableAliasName) { + column.setColumnName(tableAliasName + "." + column.getColumnName()); + } + + /** + * 默认是按 tenant_id=1 按等于条件追加 + * + * @param currentExpression 现有的条件:比如你原来的sql查询条件 + * @param table + * @return + */ + @Override + protected Expression builderExpression(Expression currentExpression, Table table) { + final Expression tenantExpression = this.getTenantHandler().getTenantId(true); + Expression appendExpression; + if (!(tenantExpression instanceof SupportsOldOracleJoinSyntax)) { + appendExpression = new EqualsTo(); + ((EqualsTo) appendExpression).setLeftExpression(this.getAliasColumn(table)); + ((EqualsTo) appendExpression).setRightExpression(tenantExpression); + } else { + appendExpression = processTableAlias(tenantExpression, table); + } + if (currentExpression == null) { + return appendExpression; + } + if (currentExpression instanceof BinaryExpression) { + BinaryExpression binaryExpression = (BinaryExpression) currentExpression; + if (binaryExpression.getLeftExpression() instanceof FromItem) { + processFromItem((FromItem) binaryExpression.getLeftExpression()); + } + if (binaryExpression.getRightExpression() instanceof FromItem) { + processFromItem((FromItem) binaryExpression.getRightExpression()); + } + } else if (currentExpression instanceof InExpression) { + InExpression inExp = (InExpression) currentExpression; + ItemsList rightItems = inExp.getRightItemsList(); + if (rightItems instanceof SubSelect) { + processSelectBody(((SubSelect) rightItems).getSelectBody()); + } + } + if (currentExpression instanceof OrExpression) { + return new AndExpression(new Parenthesis(currentExpression), appendExpression); + } else { + return new AndExpression(currentExpression, appendExpression); + } + } + + @Override + protected void processPlainSelect(PlainSelect plainSelect, boolean addColumn) { + FromItem fromItem = plainSelect.getFromItem(); + if (fromItem instanceof Table) { + Table fromTable = (Table) fromItem; + if (!this.getTenantHandler().doTableFilter(fromTable.getName())) { + plainSelect.setWhere(builderExpression(plainSelect.getWhere(), fromTable)); + if (addColumn) { + plainSelect.getSelectItems().add(new SelectExpressionItem(new Column(this.getTenantHandler().getTenantIdColumn()))); + } + } + } else { + processFromItem(fromItem); + } + List joins = plainSelect.getJoins(); + if (joins != null && joins.size() > 0) { + joins.forEach(j -> { + processJoin(j); + processFromItem(j.getRightItem()); + }); + } + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java new file mode 100644 index 00000000..8af57233 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisInterceptor.java @@ -0,0 +1,161 @@ +package com.jero.config.mybatis; + +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.binding.MapperMethod.ParamMap; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.*; +import org.apache.shiro.SecurityUtils; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.Date; +import java.util.Properties; + +/** + * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间 + * @Author scott + * @Date 2019-01-19 + * + */ +@Slf4j +@Component +@Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) +public class MybatisInterceptor implements Interceptor { + + @Override + public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + String sqlId = mappedStatement.getId(); + log.debug("------sqlId------" + sqlId); + SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); + Object parameter = invocation.getArgs()[1]; + log.debug("------sqlCommandType------" + sqlCommandType); + + if (parameter == null) { + return invocation.proceed(); + } + if (SqlCommandType.INSERT == sqlCommandType) { + LoginUser sysUser = this.getLoginUser(); + Field[] fields = oConvertUtils.getAllFields(parameter); + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + try { + if ("createBy".equals(field.getName())) { + field.setAccessible(true); + Object local_createBy = field.get(parameter); + field.setAccessible(false); + if (local_createBy == null || local_createBy.equals("")) { + if (sysUser != null) { + // 登录人账号 + field.setAccessible(true); + field.set(parameter, sysUser.getUsername()); + field.setAccessible(false); + } + } + } + // 注入创建时间 + if ("createTime".equals(field.getName())) { + field.setAccessible(true); + Object local_createDate = field.get(parameter); + field.setAccessible(false); + if (local_createDate == null || local_createDate.equals("")) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } + //注入部门编码 + if ("sysOrgCode".equals(field.getName())) { + field.setAccessible(true); + Object local_sysOrgCode = field.get(parameter); + field.setAccessible(false); + if (local_sysOrgCode == null || local_sysOrgCode.equals("")) { + // 获取登录用户信息 + if (sysUser != null) { + field.setAccessible(true); + field.set(parameter, sysUser.getOrgCode()); + field.setAccessible(false); + } + } + } + } catch (Exception e) { + } + } + } + if (SqlCommandType.UPDATE == sqlCommandType) { + LoginUser sysUser = this.getLoginUser(); + Field[] fields = null; + if (parameter instanceof ParamMap) { + ParamMap p = (ParamMap) parameter; + //update-begin-author:scott date:20190729 for:批量更新报错issues/IZA3Q-- + if (p.containsKey("et")) { + parameter = p.get("et"); + } else { + parameter = p.get("param1"); + } + //update-end-author:scott date:20190729 for:批量更新报错issues/IZA3Q- + + //update-begin-author:scott date:20190729 for:更新指定字段时报错 issues/#516- + if (parameter == null) { + return invocation.proceed(); + } + //update-end-author:scott date:20190729 for:更新指定字段时报错 issues/#516- + + fields = oConvertUtils.getAllFields(parameter); + } else { + fields = oConvertUtils.getAllFields(parameter); + } + + for (Field field : fields) { + log.debug("------field.name------" + field.getName()); + try { + if ("updateBy".equals(field.getName())) { + //获取登录用户信息 + if (sysUser != null) { + // 登录账号 + field.setAccessible(true); + field.set(parameter, sysUser.getUsername()); + field.setAccessible(false); + } + } + if ("updateTime".equals(field.getName())) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return invocation.proceed(); + } + + @Override + public Object plugin(Object target) { + return Plugin.wrap(target, this); + } + + @Override + public void setProperties(Properties properties) { + // TODO Auto-generated method stub + } + + //update-begin--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 + private LoginUser getLoginUser() { + LoginUser sysUser = null; + try { + sysUser = SecurityUtils.getSubject().getPrincipal() != null ? (LoginUser) SecurityUtils.getSubject().getPrincipal() : null; + } catch (Exception e) { + //e.printStackTrace(); + sysUser = null; + } + return sysUser; + } + //update-end--Author:scott Date:20191213 for:关于使用Quzrtz 开启线程任务, #465 + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusConfig.java new file mode 100644 index 00000000..d90d84df --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/MybatisPlusConfig.java @@ -0,0 +1,142 @@ +package com.jero.config.mybatis; + +import com.baomidou.mybatisplus.core.parser.ISqlParser; +import com.baomidou.mybatisplus.core.parser.ISqlParserFilter; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantHandler; +import com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.LongValue; +import net.sf.jsqlparser.expression.operators.relational.ExpressionList; +import net.sf.jsqlparser.expression.operators.relational.InExpression; +import net.sf.jsqlparser.schema.Column; +import org.apache.ibatis.reflection.MetaObject; +import com.jero.common.util.oConvertUtils; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.ArrayList; +import java.util.List; + +/** + * 单数据源配置(jero.datasource.open = false时生效) + * @Author zhoujf + * + */ +@Configuration +@MapperScan(value={"com.jero.**.mapper*"}) +public class MybatisPlusConfig { + + /** + * tenant_id 字段名 + */ + public static final String tenant_field = "tenant_id"; + + /** + * 有哪些表需要做多租户 这些表需要添加一个字段 ,字段名和tenant_field对应的值一样 + */ + private static final List tenantTable = new ArrayList(); + /** + * ddl 关键字 判断不走多租户的sql过滤 + */ + private static final List DDL_KEYWORD = new ArrayList(); + static { + tenantTable.add("jee_bug_danbiao"); + DDL_KEYWORD.add("alter"); + } + + /** + * 多租户属于 SQL 解析部分,依赖 MP 分页插件 + */ + @Bean + public PaginationInterceptor paginationInterceptor() { + PaginationInterceptor paginationInterceptor = new PaginationInterceptor().setLimit(-1); + //多租户配置 配置后每次执行sql会走一遍他的转化器 如果不需要多租户功能 可以将其注释 + tenantConfig(paginationInterceptor); + return paginationInterceptor; + } + + /** + * 多租户的配置 + * @param paginationInterceptor + */ + private void tenantConfig(PaginationInterceptor paginationInterceptor){ + /* + * 【测试多租户】 SQL 解析处理拦截器
+ * 这里固定写成住户 1 实际情况你可以从cookie读取,因此数据看不到 【 麻花藤 】 这条记录( 注意观察 SQL )
+ */ + List sqlParserList = new ArrayList<>(); + TenantSqlParser tenantSqlParser = new JeroTenantParser(); + tenantSqlParser.setTenantHandler(new TenantHandler() { + + @Override + public Expression getTenantId(boolean select) { + String tenant_id = oConvertUtils.getString(TenantContext.getTenant(),"0"); + return new LongValue(tenant_id); + } + @Override + public String getTenantIdColumn() { + return tenant_field; + } + + @Override + public boolean doTableFilter(String tableName) { + //true则不加租户条件查询 false则加 + // return excludeTable.contains(tableName); + if(tenantTable.contains(tableName)){ + return false; + } + return true; + } + + private Expression in(String ids){ + final InExpression inExpression = new InExpression(); + inExpression.setLeftExpression(new Column(getTenantIdColumn())); + final ExpressionList itemsList = new ExpressionList(); + final List inValues = new ArrayList<>(2); + for(String id:ids.split(",")){ + inValues.add(new LongValue(id)); + } + itemsList.setExpressions(inValues); + inExpression.setRightItemsList(itemsList); + return inExpression; + } + + }); + + sqlParserList.add(tenantSqlParser); + paginationInterceptor.setSqlParserList(sqlParserList); + paginationInterceptor.setSqlParserFilter(new ISqlParserFilter() { + @Override + public boolean doFilter(MetaObject metaObject) { + String sql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL); + for(String tableName: tenantTable){ + String sql_lowercase = sql.toLowerCase(); + if(sql_lowercase.indexOf(tableName.toLowerCase())>=0){ + for(String key: DDL_KEYWORD){ + if(sql_lowercase.indexOf(key)>=0){ + return true; + } + } + return false; + } + } + /*if ("mapper路径.方法名".equals(ms.getId())) { + //使用这种判断也可以避免走此过滤器 + return true; + }*/ + return true; + } + }); + } +// /** +// * mybatis-plus SQL执行效率插件【生产环境可以关闭】 +// */ +// @Bean +// public PerformanceInterceptor performanceInterceptor() { +// return new PerformanceInterceptor(); +// } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java new file mode 100644 index 00000000..035e6937 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/mybatis/TenantContext.java @@ -0,0 +1,25 @@ +package com.jero.config.mybatis; + +import lombok.extern.slf4j.Slf4j; + +/** + * 多租户 tenant_id存储器 + */ +@Slf4j +public class TenantContext { + + private static ThreadLocal currentTenant = new ThreadLocal<>(); + + public static void setTenant(String tenant) { + log.debug(" setting tenant to " + tenant); + currentTenant.set(tenant); + } + + public static String getTenant() { + return currentTenant.get(); + } + + public static void clear(){ + currentTenant.remove(); + } +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/MinioConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/MinioConfig.java new file mode 100644 index 00000000..490da96a --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/MinioConfig.java @@ -0,0 +1,38 @@ +package com.jero.config.oss; + +import lombok.extern.slf4j.Slf4j; +import com.jero.common.util.MinioUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Minio文件上传配置文件 + */ +@Slf4j +@Configuration +public class MinioConfig { + @Value(value = "${jero.minio.minio_url}") + private String minioUrl; + @Value(value = "${jero.minio.minio_name}") + private String minioName; + @Value(value = "${jero.minio.minio_pass}") + private String minioPass; + @Value(value = "${jero.minio.bucketName}") + private String bucketName; + + @Bean + public void initMinio(){ + if(!minioUrl.startsWith("http")){ + minioUrl = "http://" + minioUrl; + } + if(!minioUrl.endsWith("/")){ + minioUrl = minioUrl.concat("/"); + } + MinioUtil.setMinioUrl(minioUrl); + MinioUtil.setMinioName(minioName); + MinioUtil.setMinioPass(minioPass); + MinioUtil.setBucketName(bucketName); + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/OssConfiguration.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/OssConfiguration.java new file mode 100644 index 00000000..1913c69c --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/oss/OssConfiguration.java @@ -0,0 +1,34 @@ +package com.jero.config.oss; + +import com.jero.common.util.oss.OssBootUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * 云存储 配置 + */ +@Configuration +public class OssConfiguration { + + @Value("${jero.oss.endpoint}") + private String endpoint; + @Value("${jero.oss.accessKey}") + private String accessKeyId; + @Value("${jero.oss.secretKey}") + private String accessKeySecret; + @Value("${jero.oss.bucketName}") + private String bucketName; + @Value("${jero.oss.staticDomain}") + private String staticDomain; + + + @Bean + public void initOssBootConfiguration() { + OssBootUtil.setEndPoint(endpoint); + OssBootUtil.setAccessKeyId(accessKeyId); + OssBootUtil.setAccessKeySecret(accessKeySecret); + OssBootUtil.setBucketName(bucketName); + OssBootUtil.setStaticDomain(staticDomain); + } +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java new file mode 100644 index 00000000..0a189bff --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/redis/RedisConfig.java @@ -0,0 +1,112 @@ +package com.jero.config.redis; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectMapper.DefaultTyping; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.constant.CacheConstant; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.*; + +import javax.annotation.Resource; +import java.time.Duration; + +import static java.util.Collections.singletonMap; + +/** +* 开启缓存支持 +* @Return: +*/ +@Slf4j +@EnableCaching +@Configuration +public class RedisConfig extends CachingConfigurerSupport { + + @Resource + private LettuceConnectionFactory lettuceConnectionFactory; + +// /** +// * @description 自定义的缓存key的生成策略 若想使用这个key +// * 只需要讲注解上keyGenerator的值设置为keyGenerator即可
+// * @return 自定义策略生成的key +// */ +// @Override +// @Bean +// public KeyGenerator keyGenerator() { +// return new KeyGenerator() { +// @Override +// public Object generate(Object target, Method method, Object... params) { +// StringBuilder sb = new StringBuilder(); +// sb.append(target.getClass().getName()); +// sb.append(method.getDeclaringClass().getName()); +// Arrays.stream(params).map(Object::toString).forEach(sb::append); +// return sb.toString(); +// } +// }; +// } + + /** + * RedisTemplate配置 + * + * @param lettuceConnectionFactory + * @return + */ + @Bean + public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + log.info(" --- redis config init --- "); + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, Visibility.ANY); + om.enableDefaultTyping(DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + // 配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer);// key序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化 + redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化 + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + /** + * 缓存配置管理器 + * + * @param factory + * @return + */ + @Bean + public CacheManager cacheManager(LettuceConnectionFactory factory) { + // 配置序列化(缓存默认有效期 6小时) + RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(6)); + RedisCacheConfiguration redisCacheConfiguration = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); + + // 以锁写入的方式创建RedisCacheWriter对象 + //RedisCacheWriter writer = RedisCacheWriter.lockingRedisCacheWriter(factory); + // 创建默认缓存配置对象 + /* 默认配置,设置缓存有效期 1小时*/ + //RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(1)); + /* 自定义配置test:demo 的超时时间为 5分钟*/ + RedisCacheManager cacheManager = RedisCacheManager.builder(RedisCacheWriter.lockingRedisCacheWriter(factory)).cacheDefaults(redisCacheConfiguration) + .withInitialCacheConfigurations(singletonMap(CacheConstant.TEST_DEMO_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(5)).disableCachingNullValues())) + .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_RANKING, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) + .withInitialCacheConfigurations(singletonMap(CacheConstant.PLUGIN_MALL_PAGE_LIST, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofHours(24)).disableCachingNullValues())) + .transactionAware().build(); + return cacheManager; + } + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java new file mode 100644 index 00000000..a632fbc1 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/JwtToken.java @@ -0,0 +1,28 @@ +package com.jero.config.shiro; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * @Author Scott + * @create 2018-07-12 15:19 + * @desc + **/ +public class JwtToken implements AuthenticationToken { + + private static final long serialVersionUID = 1L; + private String token; + + public JwtToken(String token) { + this.token = token; + } + + @Override + public Object getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java new file mode 100644 index 00000000..3ebbdd6d --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/config/shiro/ShiroConfig.java @@ -0,0 +1,252 @@ +package com.jero.config.shiro; + +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.crazycake.shiro.IRedisManager; +import org.crazycake.shiro.RedisCacheManager; +import org.crazycake.shiro.RedisClusterManager; +import org.crazycake.shiro.RedisManager; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.oConvertUtils; +import com.jero.config.shiro.filters.CustomShiroFilterFactoryBean; +import com.jero.config.shiro.filters.JwtFilter; +import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.DependsOn; +import org.springframework.core.env.Environment; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.util.StringUtils; +import redis.clients.jedis.HostAndPort; +import redis.clients.jedis.JedisCluster; + +import javax.annotation.Resource; +import javax.servlet.Filter; +import java.util.*; + +/** + * @author: Scott + * @date: 2018/2/7 + * @description: shiro 配置类 + */ + +@Slf4j +@Configuration +public class ShiroConfig { + + @Value("${jero.shiro.excludeUrls}") + private String excludeUrls; + @Resource + LettuceConnectionFactory lettuceConnectionFactory; + @Autowired + private Environment env; + + + /** + * Filter Chain定义说明 + * + * 1、一个URL可以配置多个Filter,使用逗号分隔 + * 2、当设置多个过滤器时,全部验证通过,才视为通过 + * 3、部分过滤器可指定参数,如perms,roles + */ + @Bean("shiroFilter") + public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { + CustomShiroFilterFactoryBean shiroFilterFactoryBean = new CustomShiroFilterFactoryBean(); + shiroFilterFactoryBean.setSecurityManager(securityManager); + // 拦截器 + Map filterChainDefinitionMap = new LinkedHashMap(); + if(oConvertUtils.isNotEmpty(excludeUrls)){ + String[] permissionUrl = excludeUrls.split(","); + for(String url : permissionUrl){ + filterChainDefinitionMap.put(url,"anon"); + } + } + // 配置不会被拦截的链接 顺序判断 + filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录 + filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除 + filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除 + filterChainDefinitionMap.put("/sys/getRSAPublicKey", "anon"); //获取RSA公钥接口排除 + filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除 + filterChainDefinitionMap.put("/sys/mLogin", "anon"); //登录接口排除 + filterChainDefinitionMap.put("/sys/logout", "anon"); //登出接口排除 + filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //第三方登录 + filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //获取加密串 + filterChainDefinitionMap.put("/sys/sms", "anon");//短信验证码 + filterChainDefinitionMap.put("/sys/phoneLogin", "anon");//手机登录 + filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//校验用户是否存在 + filterChainDefinitionMap.put("/sys/user/register", "anon");//用户注册 + filterChainDefinitionMap.put("/sys/user/querySysUser", "anon");//根据手机号获取用户信息 + filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//用户忘记密码验证手机号 + filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//用户更改密码 + filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码 + filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token + filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览 + filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件 + filterChainDefinitionMap.put("/", "anon"); + filterChainDefinitionMap.put("/doc.html", "anon"); + filterChainDefinitionMap.put("/**/*.js", "anon"); + filterChainDefinitionMap.put("/**/*.css", "anon"); + filterChainDefinitionMap.put("/**/*.html", "anon"); + filterChainDefinitionMap.put("/**/*.svg", "anon"); + filterChainDefinitionMap.put("/**/*.pdf", "anon"); + filterChainDefinitionMap.put("/**/*.jpg", "anon"); + filterChainDefinitionMap.put("/**/*.png", "anon"); + filterChainDefinitionMap.put("/**/*.ico", "anon"); + + filterChainDefinitionMap.put("/**/*.ttf", "anon"); + filterChainDefinitionMap.put("/**/*.woff", "anon"); + filterChainDefinitionMap.put("/**/*.woff2", "anon"); + + filterChainDefinitionMap.put("/druid/**", "anon"); + filterChainDefinitionMap.put("/swagger-ui.html", "anon"); + filterChainDefinitionMap.put("/swagger**/**", "anon"); + filterChainDefinitionMap.put("/webjars/**", "anon"); + filterChainDefinitionMap.put("/v2/**", "anon"); + + //积木报表排除 + filterChainDefinitionMap.put("/jmreport/**", "anon"); + filterChainDefinitionMap.put("/**/*.js.map", "anon"); + filterChainDefinitionMap.put("/**/*.css.map", "anon"); + //大屏设计器排除 + filterChainDefinitionMap.put("/bigscreen/**", "anon"); + + //测试示例 + filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); //大屏模板例子 + //filterChainDefinitionMap.put("/test/JeroDemo/rabbitMqClientTest/**", "anon"); //MQ测试 + //filterChainDefinitionMap.put("/test/JeroDemo/html", "anon"); //模板页面 + //filterChainDefinitionMap.put("/test/JeroDemo/redis/**", "anon"); //redis测试 + + //websocket排除 + filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告 + filterChainDefinitionMap.put("/newsWebsocket/**", "anon");//CMS模块 + filterChainDefinitionMap.put("/vxeSocket/**", "anon");//JVxeTable无痕刷新示例 + filterChainDefinitionMap.put("/eoaSocket/**","anon");//我的聊天 + + //性能监控 TODO 存在安全漏洞泄露TOEKN(durid连接池也有) + filterChainDefinitionMap.put("/actuator/**", "anon"); + + // 添加自己的过滤器并且取名为jwt + Map filterMap = new HashMap(1); + //如果cloudServer为空 则说明是单体 需要加载跨域配置 + Object cloudServer = env.getProperty(CommonConstant.CLOUD_SERVER_KEY); + filterMap.put("jwt", new JwtFilter(cloudServer==null)); + shiroFilterFactoryBean.setFilters(filterMap); + // + + insert into sys_log (id, log_type, log_content, method, operate_type, request_param, ip, userid, username, cost_time, create_time) + values( + #{dto.id,jdbcType=VARCHAR}, + #{dto.logType,jdbcType=INTEGER}, + #{dto.logContent,jdbcType=VARCHAR}, + #{dto.method,jdbcType=VARCHAR}, + #{dto.operateType,jdbcType=INTEGER}, + #{dto.requestParam,jdbcType=VARCHAR}, + #{dto.ip,jdbcType=VARCHAR}, + #{dto.userid,jdbcType=VARCHAR}, + #{dto.username,jdbcType=VARCHAR}, + #{dto.costTime,jdbcType=BIGINT}, + #{dto.createTime,jdbcType=TIMESTAMP} + ) + + + \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java new file mode 100644 index 00000000..81733b55 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/BaseCommonService.java @@ -0,0 +1,34 @@ +package com.jero.modules.base.service; + +import com.jero.common.api.dto.LogDTO; +import com.jero.common.system.vo.LoginUser; + +/** + * common接口 + */ +public interface BaseCommonService { + + /** + * 保存日志 + * @param logDTO + */ + void addLog(LogDTO logDTO); + + /** + * 保存日志 + * @param LogContent + * @param logType + * @param operateType + * @param user + */ + void addLog(String LogContent, Integer logType, Integer operateType, LoginUser user); + + /** + * 保存日志 + * @param LogContent + * @param logType + * @param operateType + */ + void addLog(String LogContent, Integer logType, Integer operateType); + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java new file mode 100644 index 00000000..8c93f605 --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/java/com/jero/modules/base/service/impl/BaseCommonServiceImpl.java @@ -0,0 +1,91 @@ +package com.jero.modules.base.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.IdWorker; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.dto.LogDTO; +import com.jero.common.constant.CacheConstant; +import com.jero.modules.base.mapper.BaseCommonMapper; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.system.vo.SysPermissionDataRuleModel; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.common.util.IPUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.PathMatcher; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service +@Slf4j +public class BaseCommonServiceImpl implements BaseCommonService { + + @Resource + private BaseCommonMapper baseCommonMapper; + + @Override + public void addLog(LogDTO logDTO) { + if(oConvertUtils.isEmpty(logDTO.getId())){ + logDTO.setId(String.valueOf(IdWorker.getId())); + } + //保存日志(异常捕获处理,防止数据太大存储失败,导致业务失败)JT-238 + try { + baseCommonMapper.saveLog(logDTO); + } catch (Exception e) { + log.warn(" LogContent length : "+logDTO.getLogContent().length()); + log.warn(e.getMessage()); + } + } + + @Override + public void addLog(String logContent, Integer logType, Integer operatetype, LoginUser user) { + LogDTO sysLog = new LogDTO(); + sysLog.setId(String.valueOf(IdWorker.getId())); + //注解上的描述,操作日志内容 + sysLog.setLogContent(logContent); + sysLog.setLogType(logType); + sysLog.setOperateType(operatetype); + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //设置IP地址 + sysLog.setIp(IPUtils.getIpAddr(request)); + } catch (Exception e) { + sysLog.setIp("127.0.0.1"); + } + //获取登录用户信息 + if(user==null){ + try { + user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + } catch (Exception e) { + //e.printStackTrace(); + } + } + if(user!=null){ + sysLog.setUserid(user.getUsername()); + sysLog.setUsername(user.getRealname()); + } + sysLog.setCreateTime(new Date()); + //保存日志(异常捕获处理,防止数据太大存储失败,导致业务失败)JT-238 + try { + baseCommonMapper.saveLog(sysLog); + } catch (Exception e) { + log.warn(" LogContent length : "+sysLog.getLogContent().length()); + log.warn(e.getMessage()); + } + } + + @Override + public void addLog(String logContent, Integer logType, Integer operateType) { + addLog(logContent, logType, operateType, null); + } + + + +} diff --git a/jero-boot-base/jero-boot-base-core/src/main/resources/static/pca.json b/jero-boot-base/jero-boot-base-core/src/main/resources/static/pca.json new file mode 100644 index 00000000..777dc3df --- /dev/null +++ b/jero-boot-base/jero-boot-base-core/src/main/resources/static/pca.json @@ -0,0 +1,51 @@ +{ + "86":{ + "110000":"北京市", + "120000":"天津市", + "130000":"河北省", + "140000":"山西省", + "150000":"内蒙古自治区", + "210000":"辽宁省", + "220000":"吉林省", + "230000":"黑龙江省", + "310000":"上海市", + "320000":"江苏省", + "330000":"浙江省", + "340000":"安徽省", + "350000":"福建省", + "360000":"江西省", + "370000":"山东省", + "410000":"河南省", + "420000":"湖北省", + "430000":"湖南省", + "440000":"广东省", + "450000":"广西壮族自治区", + "460000":"海南省", + "500000":"重庆市", + "510000":"四川省", + "520000":"贵州省", + "530000":"云南省", + "540000":"西藏自治区", + "610000":"陕西省", + "620000":"甘肃省", + "630000":"青海省", + "640000":"宁夏回族自治区", + "650000":"新疆维吾尔自治区", + "710000":"台湾省", + "910000":"港澳" + }, + "110000":{"110100":"市辖区"}, + "110100":{"110101":"东城区","110102":"西城区","110105":"朝阳区","110106":"丰台区","110107":"石景山区","110108":"海淀区","110109":"门头沟区","110111":"房山区","110112":"通州区","110113":"顺义区","110114":"昌平区","110115":"大兴区","110116":"怀柔区","110117":"平谷区","110118":"密云区","110119":"延庆区"}, + "120000":{"120100":"市辖区"}, + "120100":{"120101":"和平区","120102":"河东区","120103":"河西区","120104":"南开区","120105":"河北区","120106":"红桥区","120110":"东丽区","120111":"西青区","120112":"津南区","120113":"北辰区","120114":"武清区","120115":"宝坻区","120116":"滨海新区","120117":"宁河区","120118":"静海区","120119":"蓟州区"},"130000":{"130100":"石家庄市","130200":"唐山市","130300":"秦皇岛市","130400":"邯郸市","130500":"邢台市","130600":"保定市","130700":"张家口市","130800":"承德市","130900":"沧州市","131000":"廊坊市","131100":"衡水市","139001":"定州市","139002":"辛集市"},"130100":{"130102":"长安区","130104":"桥西区","130105":"新华区","130107":"井陉矿区","130108":"裕华区","130109":"藁城区","130110":"鹿泉区","130111":"栾城区","130121":"井陉县","130123":"正定县","130125":"行唐县","130126":"灵寿县","130127":"高邑县","130128":"深泽县","130129":"赞皇县","130130":"无极县","130131":"平山县","130132":"元氏县","130133":"赵县","130183":"晋州市","130184":"新乐市"},"130200":{"130202":"路南区","130203":"路北区","130204":"古冶区","130205":"开平区","130207":"丰南区","130208":"丰润区","130209":"曹妃甸区","130223":"滦县","130224":"滦南县","130225":"乐亭县","130227":"迁西县","130229":"玉田县","130281":"遵化市","130283":"迁安市"},"130300":{"130302":"海港区","130303":"山海关区","130304":"北戴河区","130306":"抚宁区","130321":"青龙满族自治县","130322":"昌黎县","130324":"卢龙县"},"130400":{"130402":"邯山区","130403":"丛台区","130404":"复兴区","130406":"峰峰矿区","130421":"邯郸县","130423":"临漳县","130424":"成安县","130425":"大名县","130426":"涉县","130427":"磁县","130428":"肥乡县","130429":"永年县","130430":"邱县","130431":"鸡泽县","130432":"广平县","130433":"馆陶县","130434":"魏县","130435":"曲周县","130481":"武安市"},"130500":{"130502":"桥东区","130503":"桥西区","130521":"邢台县","130522":"临城县","130523":"内丘县","130524":"柏乡县","130525":"隆尧县","130526":"任县","130527":"南和县","130528":"宁晋县","130529":"巨鹿县","130530":"新河县","130531":"广宗县","130532":"平乡县","130533":"威县","130534":"清河县","130535":"临西县","130581":"南宫市","130582":"沙河市"},"130600":{"130602":"竞秀区","130606":"莲池区","130607":"满城区","130608":"清苑区","130609":"徐水区","130623":"涞水县","130624":"阜平县","130626":"定兴县","130627":"唐县","130628":"高阳县","130629":"容城县","130630":"涞源县","130631":"望都县","130632":"安新县","130633":"易县","130634":"曲阳县","130635":"蠡县","130636":"顺平县","130637":"博野县","130638":"雄县","130681":"涿州市","130683":"安国市","130684":"高碑店市"},"130700":{"130702":"桥东区","130703":"桥西区","130705":"宣化区","130706":"下花园区","130708":"万全区","130709":"崇礼区","130722":"张北县","130723":"康保县","130724":"沽源县","130725":"尚义县","130726":"蔚县","130727":"阳原县","130728":"怀安县","130730":"怀来县","130731":"涿鹿县","130732":"赤城县"},"130800":{"130802":"双桥区","130803":"双滦区","130804":"鹰手营子矿区","130821":"承德县","130822":"兴隆县","130823":"平泉县","130824":"滦平县","130825":"隆化县","130826":"丰宁满族自治县","130827":"宽城满族自治县","130828":"围场满族蒙古族自治县"},"130900":{"130902":"新华区","130903":"运河区","130921":"沧县","130922":"青县","130923":"东光县","130924":"海兴县","130925":"盐山县","130926":"肃宁县","130927":"南皮县","130928":"吴桥县","130929":"献县","130930":"孟村回族自治县","130981":"泊头市","130982":"任丘市","130983":"黄骅市","130984":"河间市"},"131000":{"131002":"安次区","131003":"广阳区","131022":"固安县","131023":"永清县","131024":"香河县","131025":"大城县","131026":"文安县","131028":"大厂回族自治县","131081":"霸州市","131082":"三河市"},"131100":{"131102":"桃城区","131103":"冀州区","131121":"枣强县","131122":"武邑县","131123":"武强县","131124":"饶阳县","131125":"安平县","131126":"故城县","131127":"景县","131128":"阜城县","131182":"深州市"},"139001":{"1390011":"留早镇","13900111":"邢邑镇","139001001":"南城区街道","139001002":"北城区街道","139001003":"西城区街道","139001004":"长安路街道","139001101":"清风店镇","139001102":"庞村镇","139001103":"砖路镇","139001104":"明月店镇","139001105":"叮咛店镇","139001106":"东亭镇","139001107":"大辛庄镇","139001108":"东旺镇","139001109":"高蓬镇","139001111":"李亲顾镇","139001112":"子位镇","139001113":"开元镇","139001115":"周村镇","139001116":"息冢镇","139001203":"东留春乡","139001204":"号头庄回族乡","139001205":"杨家庄乡","139001206":"大鹿庄乡","139001208":"西城乡"},"139002":{"1390021":"辛集镇","1390022":"天宫营乡","1390025":"辛集经济开发区","139002101":"旧城镇","139002102":"张古庄镇","139002103":"位伯镇","139002104":"新垒头镇","139002105":"新城镇","139002106":"南智邱镇","139002107":"王口镇","139002201":"前营乡","139002202":"马庄乡","139002203":"和睦井乡","139002204":"田家庄乡","139002205":"中里厢乡","139002206":"小辛庄乡"},"140000":{"140100":"太原市","140200":"大同市","140300":"阳泉市","140400":"长治市","140500":"晋城市","140600":"朔州市","140700":"晋中市","140800":"运城市","140900":"忻州市","141000":"临汾市","141100":"吕梁市"},"140100":{"140105":"小店区","140106":"迎泽区","140107":"杏花岭区","140108":"尖草坪区","140109":"万柏林区","140110":"晋源区","140121":"清徐县","140122":"阳曲县","140123":"娄烦县","140181":"古交市"},"140200":{"140202":"城区","140203":"矿区","140211":"南郊区","140212":"新荣区","140221":"阳高县","140222":"天镇县","140223":"广灵县","140224":"灵丘县","140225":"浑源县","140226":"左云县","140227":"大同县"},"140300":{"140302":"城区","140303":"矿区","140311":"郊区","140321":"平定县","140322":"盂县"},"140400":{"140402":"城区","140411":"郊区","140421":"长治县","140423":"襄垣县","140424":"屯留县","140425":"平顺县","140426":"黎城县","140427":"壶关县","140428":"长子县","140429":"武乡县","140430":"沁县","140431":"沁源县","140481":"潞城市"},"140500":{"140502":"城区","140521":"沁水县","140522":"阳城县","140524":"陵川县","140525":"泽州县","140581":"高平市"},"140600":{"140602":"朔城区","140603":"平鲁区","140621":"山阴县","140622":"应县","140623":"右玉县","140624":"怀仁县"},"140700":{"140702":"榆次区","140721":"榆社县","140722":"左权县","140723":"和顺县","140724":"昔阳县","140725":"寿阳县","140726":"太谷县","140727":"祁县","140728":"平遥县","140729":"灵石县","140781":"介休市"},"140800":{"140802":"盐湖区","140821":"临猗县","140822":"万荣县","140823":"闻喜县","140824":"稷山县","140825":"新绛县","140826":"绛县","140827":"垣曲县","140828":"夏县","140829":"平陆县","140830":"芮城县","140881":"永济市","140882":"河津市"},"140900":{"140902":"忻府区","140921":"定襄县","140922":"五台县","140923":"代县","140924":"繁峙县","140925":"宁武县","140926":"静乐县","140927":"神池县","140928":"五寨县","140929":"岢岚县","140930":"河曲县","140931":"保德县","140932":"偏关县","140981":"原平市"}, + "141000":{"141002":"尧都区","141021":"曲沃县","141022":"翼城县","141023":"襄汾县","141024":"洪洞县","141025":"古县","141026":"安泽县","141027":"浮山县","141028":"吉县","141029":"乡宁县","141030":"大宁县","141031":"隰县","141032":"永和县","141033":"蒲县","141034":"汾西县","141081":"侯马市","141082":"霍州市"},"141100":{"141102":"离石区","141121":"文水县","141122":"交城县","141123":"兴县","141124":"临县","141125":"柳林县","141126":"石楼县","141127":"岚县","141128":"方山县","141129":"中阳县","141130":"交口县","141181":"孝义市","141182":"汾阳市"},"150000":{"150100":"呼和浩特市","150200":"包头市","150300":"乌海市","150400":"赤峰市","150500":"通辽市","150600":"鄂尔多斯市","150700":"呼伦贝尔市","150800":"巴彦淖尔市","150900":"乌兰察布市","152200":"兴安盟","152500":"锡林郭勒盟","152900":"阿拉善盟"},"150100":{"150102":"新城区","150103":"回民区","150104":"玉泉区","150105":"赛罕区","150121":"土默特左旗","150122":"托克托县","150123":"和林格尔县","150124":"清水河县","150125":"武川县"},"150200":{"150202":"东河区","150203":"昆都仑区","150204":"青山区","150205":"石拐区","150206":"白云鄂博矿区","150207":"九原区","150221":"土默特右旗","150222":"固阳县","150223":"达尔罕茂明安联合旗"},"150300":{"150302":"海勃湾区","150303":"海南区","150304":"乌达区"},"150400":{"150402":"红山区","150403":"元宝山区","150404":"松山区","150421":"阿鲁科尔沁旗","150422":"巴林左旗","150423":"巴林右旗","150424":"林西县","150425":"克什克腾旗","150426":"翁牛特旗","150428":"喀喇沁旗","150429":"宁城县","150430":"敖汉旗"},"150500":{"150502":"科尔沁区","150521":"科尔沁左翼中旗","150522":"科尔沁左翼后旗","150523":"开鲁县","150524":"库伦旗","150525":"奈曼旗","150526":"扎鲁特旗","150581":"霍林郭勒市"},"150600":{"150602":"东胜区","150603":"康巴什区","150621":"达拉特旗","150622":"准格尔旗","150623":"鄂托克前旗","150624":"鄂托克旗","150625":"杭锦旗","150626":"乌审旗","150627":"伊金霍洛旗"},"150700":{"150702":"海拉尔区","150703":"扎赉诺尔区","150721":"阿荣旗","150722":"莫力达瓦达斡尔族自治旗","150723":"鄂伦春自治旗","150724":"鄂温克族自治旗","150725":"陈巴尔虎旗","150726":"新巴尔虎左旗","150727":"新巴尔虎右旗","150781":"满洲里市","150782":"牙克石市","150783":"扎兰屯市","150784":"额尔古纳市","150785":"根河市"},"150800":{"150802":"临河区","150821":"五原县","150822":"磴口县","150823":"乌拉特前旗","150824":"乌拉特中旗","150825":"乌拉特后旗","150826":"杭锦后旗"},"150900":{"150902":"集宁区","150921":"卓资县","150922":"化德县","150923":"商都县","150924":"兴和县","150925":"凉城县","150926":"察哈尔右翼前旗","150927":"察哈尔右翼中旗","150928":"察哈尔右翼后旗","150929":"四子王旗","150981":"丰镇市"},"152200":{"152201":"乌兰浩特市","152202":"阿尔山市","152221":"科尔沁右翼前旗","152222":"科尔沁右翼中旗","152223":"扎赉特旗","152224":"突泉县"},"152500":{"152501":"二连浩特市","152502":"锡林浩特市","152522":"阿巴嘎旗","152523":"苏尼特左旗","152524":"苏尼特右旗","152525":"东乌珠穆沁旗","152526":"西乌珠穆沁旗","152527":"太仆寺旗","152528":"镶黄旗","152529":"正镶白旗","152530":"正蓝旗","152531":"多伦县"},"152900":{"152921":"阿拉善左旗","152922":"阿拉善右旗","152923":"额济纳旗"},"210000":{"210100":"沈阳市","210200":"大连市","210300":"鞍山市","210400":"抚顺市","210500":"本溪市","210600":"丹东市","210700":"锦州市","210800":"营口市","210900":"阜新市","211000":"辽阳市","211100":"盘锦市","211200":"铁岭市","211300":"朝阳市","211400":"葫芦岛市"},"210100":{"210102":"和平区","210103":"沈河区","210104":"大东区","210105":"皇姑区","210106":"铁西区","210111":"苏家屯区","210112":"浑南区","210113":"沈北新区","210114":"于洪区","210115":"辽中区","210123":"康平县","210124":"法库县","210181":"新民市"},"210200":{"210202":"中山区","210203":"西岗区","210204":"沙河口区","210211":"甘井子区","210212":"旅顺口区","210213":"金州区","210214":"普兰店区","210224":"长海县","210281":"瓦房店市","210283":"庄河市"},"210300":{"210302":"铁东区","210303":"铁西区","210304":"立山区","210311":"千山区","210321":"台安县","210323":"岫岩满族自治县","210381":"海城市"},"210400":{"210402":"新抚区","210403":"东洲区","210404":"望花区","210411":"顺城区","210421":"抚顺县","210422":"新宾满族自治县","210423":"清原满族自治县"},"210500":{"210502":"平山区","210503":"溪湖区","210504":"明山区","210505":"南芬区","210521":"本溪满族自治县","210522":"桓仁满族自治县"},"210600":{"210602":"元宝区","210603":"振兴区","210604":"振安区","210624":"宽甸满族自治县","210681":"东港市","210682":"凤城市"},"210700":{"210702":"古塔区","210703":"凌河区","210711":"太和区","210726":"黑山县","210727":"义县","210781":"凌海市","210782":"北镇市"},"210800":{"210802":"站前区","210803":"西市区","210804":"鲅鱼圈区","210811":"老边区","210881":"盖州市","210882":"大石桥市"},"210900":{"210902":"海州区","210903":"新邱区","210904":"太平区","210905":"清河门区","210911":"细河区","210921":"阜新蒙古族自治县","210922":"彰武县"},"211000":{"211002":"白塔区","211003":"文圣区","211004":"宏伟区","211005":"弓长岭区","211011":"太子河区","211021":"辽阳县","211081":"灯塔市"},"211100":{"211102":"双台子区","211103":"兴隆台区","211104":"大洼区","211122":"盘山县"},"211200":{"211202":"银州区","211204":"清河区","211221":"铁岭县","211223":"西丰县","211224":"昌图县","211281":"调兵山市","211282":"开原市"},"211300":{"211302":"双塔区","211303":"龙城区","211321":"朝阳县","211322":"建平县","211324":"喀喇沁左翼蒙古族自治县","211381":"北票市","211382":"凌源市"},"211400":{"211402":"连山区","211403":"龙港区","211404":"南票区","211421":"绥中县","211422":"建昌县","211481":"兴城市"},"220000":{"220100":"长春市","220200":"吉林市","220300":"四平市","220400":"辽源市","220500":"通化市","220600":"白山市","220700":"松原市","220800":"白城市","222400":"延边朝鲜族自治州"},"220100":{"220102":"南关区","220103":"宽城区","220104":"朝阳区","220105":"二道区","220106":"绿园区","220112":"双阳区","220113":"九台区","220122":"农安县","220182":"榆树市","220183":"德惠市"},"220200":{"220202":"昌邑区","220203":"龙潭区","220204":"船营区","220211":"丰满区","220221":"永吉县","220281":"蛟河市","220282":"桦甸市","220283":"舒兰市","220284":"磐石市"},"220300":{"220302":"铁西区","220303":"铁东区","220322":"梨树县","220323":"伊通满族自治县","220381":"公主岭市","220382":"双辽市"},"220400":{"220402":"龙山区","220403":"西安区","220421":"东丰县","220422":"东辽县"},"220500":{"220502":"东昌区","220503":"二道江区","220521":"通化县","220523":"辉南县","220524":"柳河县","220581":"梅河口市","220582":"集安市"},"220600":{"220602":"浑江区","220605":"江源区","220621":"抚松县","220622":"靖宇县","220623":"长白朝鲜族自治县","220681":"临江市"},"220700":{"220702":"宁江区","220721":"前郭尔罗斯蒙古族自治县","220722":"长岭县","220723":"乾安县","220781":"扶余市"},"220800":{"220802":"洮北区","220821":"镇赉县","220822":"通榆县","220881":"洮南市","220882":"大安市"},"222400":{"222401":"延吉市","222402":"图们市","222403":"敦化市","222404":"珲春市","222405":"龙井市","222406":"和龙市","222424":"汪清县","222426":"安图县"},"230000":{"230100":"哈尔滨市","230200":"齐齐哈尔市","230300":"鸡西市","230400":"鹤岗市","230500":"双鸭山市","230600":"大庆市","230700":"伊春市","230800":"佳木斯市","230900":"七台河市","231000":"牡丹江市","231100":"黑河市","231200":"绥化市","232700":"大兴安岭地区"},"230100":{"230102":"道里区","230103":"南岗区","230104":"道外区","230108":"平房区","230109":"松北区","230110":"香坊区","230111":"呼兰区","230112":"阿城区","230113":"双城区","230123":"依兰县","230124":"方正县","230125":"宾县","230126":"巴彦县","230127":"木兰县","230128":"通河县","230129":"延寿县","230183":"尚志市","230184":"五常市"},"230200":{"230202":"龙沙区","230203":"建华区","230204":"铁锋区","230205":"昂昂溪区","230206":"富拉尔基区","230207":"碾子山区","230208":"梅里斯达斡尔族区","230221":"龙江县","230223":"依安县","230224":"泰来县","230225":"甘南县","230227":"富裕县","230229":"克山县","230230":"克东县","230231":"拜泉县","230281":"讷河市"},"230300":{"230302":"鸡冠区","230303":"恒山区","230304":"滴道区","230305":"梨树区","230306":"城子河区","230307":"麻山区","230321":"鸡东县","230381":"虎林市","230382":"密山市"},"230400":{"230402":"向阳区","230403":"工农区","230404":"南山区","230405":"兴安区","230406":"东山区","230407":"兴山区","230421":"萝北县","230422":"绥滨县"},"230500":{"230502":"尖山区","230503":"岭东区","230505":"四方台区","230506":"宝山区","230521":"集贤县","230522":"友谊县","230523":"宝清县","230524":"饶河县"},"230600":{"230602":"萨尔图区","230603":"龙凤区","230604":"让胡路区","230605":"红岗区","230606":"大同区","230621":"肇州县","230622":"肇源县","230623":"林甸县","230624":"杜尔伯特蒙古族自治县"},"230700":{"230702":"伊春区","230703":"南岔区","230704":"友好区","230705":"西林区","230706":"翠峦区","230707":"新青区","230708":"美溪区","230709":"金山屯区","230710":"五营区","230711":"乌马河区","230712":"汤旺河区","230713":"带岭区","230714":"乌伊岭区","230715":"红星区","230716":"上甘岭区","230722":"嘉荫县","230781":"铁力市"},"230800":{"230803":"向阳区","230804":"前进区","230805":"东风区","230811":"郊区","230822":"桦南县","230826":"桦川县","230828":"汤原县","230881":"同江市","230882":"富锦市","230883":"抚远市"},"230900":{"230902":"新兴区","230903":"桃山区","230904":"茄子河区","230921":"勃利县"},"231000":{"231002":"东安区","231003":"阳明区","231004":"爱民区","231005":"西安区","231025":"林口县","231081":"绥芬河市","231083":"海林市","231084":"宁安市","231085":"穆棱市","231086":"东宁市"},"231100":{"231102":"爱辉区","231121":"嫩江县","231123":"逊克县","231124":"孙吴县","231181":"北安市","231182":"五大连池市"},"231200":{"231202":"北林区","231221":"望奎县","231222":"兰西县","231223":"青冈县","231224":"庆安县","231225":"明水县","231226":"绥棱县","231281":"安达市","231282":"肇东市","231283":"海伦市"},"232700":{"232721":"呼玛县","232722":"塔河县","232723":"漠河县"},"310000":{"310100":"市辖区"}, + "310100":{"310101":"黄浦区","310104":"徐汇区","310105":"长宁区","310106":"静安区","310107":"普陀区","310109":"虹口区","310110":"杨浦区","310112":"闵行区","310113":"宝山区","310114":"嘉定区","310115":"浦东新区","310116":"金山区","310117":"松江区","310118":"青浦区","310120":"奉贤区","310151":"崇明区"},"320000":{"320100":"南京市","320200":"无锡市","320300":"徐州市","320400":"常州市","320500":"苏州市","320600":"南通市","320700":"连云港市","320800":"淮安市","320900":"盐城市","321000":"扬州市","321100":"镇江市","321200":"泰州市","321300":"宿迁市"},"320100":{"320102":"玄武区","320104":"秦淮区","320105":"建邺区","320106":"鼓楼区","320111":"浦口区","320113":"栖霞区","320114":"雨花台区","320115":"江宁区","320116":"六合区","320117":"溧水区","320118":"高淳区"}, + "320200":{"320205":"锡山区","320206":"惠山区","320211":"滨湖区","320213":"梁溪区","320214":"新吴区","320281":"江阴市","320282":"宜兴市"},"320300":{"320302":"鼓楼区","320303":"云龙区","320305":"贾汪区","320311":"泉山区","320312":"铜山区","320321":"丰县","320322":"沛县","320324":"睢宁县","320381":"新沂市","320382":"邳州市"}, + "320400":{"320402":"天宁区","320404":"钟楼区","320411":"新北区","320412":"武进区","320413":"金坛区","320481":"溧阳市"},"320500":{"320505":"虎丘区","320506":"吴中区","320507":"相城区","320508":"姑苏区","320509":"吴江区","320581":"常熟市","320582":"张家港市","320583":"昆山市","320585":"太仓市"},"320600":{"320602":"崇川区","320611":"港闸区","320612":"通州区","320621":"海安县","320623":"如东县","320681":"启东市","320682":"如皋市","320684":"海门市"},"320700":{"320703":"连云区","320706":"海州区","320707":"赣榆区","320722":"东海县","320723":"灌云县","320724":"灌南县"},"320800":{"320803":"淮安区","320804":"淮阴区","320812":"清江浦区","320813":"洪泽区","320826":"涟水县","320830":"盱眙县","320831":"金湖县"},"320900":{"320902":"亭湖区","320903":"盐都区","320904":"大丰区","320921":"响水县","320922":"滨海县","320923":"阜宁县","320924":"射阳县","320925":"建湖县","320981":"东台市"},"321000":{"321002":"广陵区","321003":"邗江区","321012":"江都区","321023":"宝应县","321081":"仪征市","321084":"高邮市"},"321100":{"321102":"京口区","321111":"润州区","321112":"丹徒区","321181":"丹阳市","321182":"扬中市","321183":"句容市"},"321200":{"321202":"海陵区","321203":"高港区","321204":"姜堰区","321281":"兴化市","321282":"靖江市","321283":"泰兴市"},"321300":{"321302":"宿城区","321311":"宿豫区","321322":"沭阳县","321323":"泗阳县","321324":"泗洪县"},"330000":{"330100":"杭州市","330200":"宁波市","330300":"温州市","330400":"嘉兴市","330500":"湖州市","330600":"绍兴市","330700":"金华市","330800":"衢州市","330900":"舟山市","331000":"台州市","331100":"丽水市"},"330100":{"330102":"上城区","330103":"下城区","330104":"江干区","330105":"拱墅区","330106":"西湖区","330108":"滨江区","330109":"萧山区","330110":"余杭区","330111":"富阳区","330122":"桐庐县","330127":"淳安县","330182":"建德市","330185":"临安市"},"330200":{"330203":"海曙区","330204":"江东区","330205":"江北区","330206":"北仑区","330211":"镇海区","330212":"鄞州区","330225":"象山县","330226":"宁海县","330281":"余姚市","330282":"慈溪市","330283":"奉化市"},"330300":{"330302":"鹿城区","330303":"龙湾区","330304":"瓯海区","330305":"洞头区","330324":"永嘉县","330326":"平阳县","330327":"苍南县","330328":"文成县","330329":"泰顺县","330381":"瑞安市","330382":"乐清市"},"330400":{"330402":"南湖区","330411":"秀洲区","330421":"嘉善县","330424":"海盐县","330481":"海宁市","330482":"平湖市","330483":"桐乡市"},"330500":{"330502":"吴兴区","330503":"南浔区","330521":"德清县","330522":"长兴县","330523":"安吉县"},"330600":{"330602":"越城区","330603":"柯桥区","330604":"上虞区","330624":"新昌县","330681":"诸暨市","330683":"嵊州市"},"330700":{"330702":"婺城区","330703":"金东区","330723":"武义县","330726":"浦江县","330727":"磐安县","330781":"兰溪市","330782":"义乌市","330783":"东阳市","330784":"永康市"},"330800":{"330802":"柯城区","330803":"衢江区","330822":"常山县","330824":"开化县","330825":"龙游县","330881":"江山市"},"330900":{"330902":"定海区","330903":"普陀区","330921":"岱山县","330922":"嵊泗县"},"331000":{"331002":"椒江区","331003":"黄岩区","331004":"路桥区","331021":"玉环县","331022":"三门县","331023":"天台县","331024":"仙居县","331081":"温岭市","331082":"临海市"},"331100":{"331102":"莲都区","331121":"青田县","331122":"缙云县","331123":"遂昌县","331124":"松阳县","331125":"云和县","331126":"庆元县","331127":"景宁畲族自治县","331181":"龙泉市"},"340000":{"340100":"合肥市","340200":"芜湖市","340300":"蚌埠市","340400":"淮南市","340500":"马鞍山市","340600":"淮北市","340700":"铜陵市","340800":"安庆市","341000":"黄山市","341100":"滁州市","341200":"阜阳市","341300":"宿州市","341500":"六安市","341600":"亳州市","341700":"池州市","341800":"宣城市"},"340100":{"340102":"瑶海区","340103":"庐阳区","340104":"蜀山区","340111":"包河区","340121":"长丰县","340122":"肥东县","340123":"肥西县","340124":"庐江县","340181":"巢湖市"},"340200":{"340202":"镜湖区","340203":"弋江区","340207":"鸠江区","340208":"三山区","340221":"芜湖县","340222":"繁昌县","340223":"南陵县","340225":"无为县"},"340300":{"340302":"龙子湖区","340303":"蚌山区","340304":"禹会区","340311":"淮上区","340321":"怀远县","340322":"五河县","340323":"固镇县"},"340400":{"340402":"大通区","340403":"田家庵区","340404":"谢家集区","340405":"八公山区","340406":"潘集区","340421":"凤台县","340422":"寿县"},"340500":{"340503":"花山区","340504":"雨山区","340506":"博望区","340521":"当涂县","340522":"含山县","340523":"和县"},"340600":{"340602":"杜集区","340603":"相山区","340604":"烈山区","340621":"濉溪县"},"340700":{"340705":"铜官区","340706":"义安区","340711":"郊区","340722":"枞阳县"},"340800":{"340802":"迎江区","340803":"大观区","340811":"宜秀区","340822":"怀宁县","340824":"潜山县","340825":"太湖县","340826":"宿松县","340827":"望江县","340828":"岳西县","340881":"桐城市"},"341000":{"341002":"屯溪区","341003":"黄山区","341004":"徽州区","341021":"歙县","341022":"休宁县","341023":"黟县","341024":"祁门县"},"341100":{"341102":"琅琊区","341103":"南谯区","341122":"来安县","341124":"全椒县","341125":"定远县","341126":"凤阳县","341181":"天长市","341182":"明光市"},"341200":{"341202":"颍州区","341203":"颍东区","341204":"颍泉区","341221":"临泉县","341222":"太和县","341225":"阜南县","341226":"颍上县","341282":"界首市"},"341300":{"341302":"埇桥区","341321":"砀山县","341322":"萧县","341323":"灵璧县","341324":"泗县"},"341500":{"341502":"金安区","341503":"裕安区","341504":"叶集区","341522":"霍邱县","341523":"舒城县","341524":"金寨县","341525":"霍山县"},"341600":{"341602":"谯城区","341621":"涡阳县","341622":"蒙城县","341623":"利辛县"},"341700":{"341702":"贵池区","341721":"东至县","341722":"石台县","341723":"青阳县"},"341800":{"341802":"宣州区","341821":"郎溪县","341822":"广德县","341823":"泾县","341824":"绩溪县","341825":"旌德县","341881":"宁国市"},"350000":{"350100":"福州市","350200":"厦门市","350300":"莆田市","350400":"三明市","350500":"泉州市","350600":"漳州市","350700":"南平市","350800":"龙岩市","350900":"宁德市"},"350100":{"350102":"鼓楼区","350103":"台江区","350104":"仓山区","350105":"马尾区","350111":"晋安区","350121":"闽侯县","350122":"连江县","350123":"罗源县","350124":"闽清县","350125":"永泰县","350128":"平潭县","350181":"福清市","350182":"长乐市"},"350200":{"350203":"思明区","350205":"海沧区","350206":"湖里区","350211":"集美区","350212":"同安区","350213":"翔安区"},"350300":{"350302":"城厢区","350303":"涵江区","350304":"荔城区","350305":"秀屿区","350322":"仙游县"},"350400":{"350402":"梅列区","350403":"三元区","350421":"明溪县","350423":"清流县","350424":"宁化县","350425":"大田县","350426":"尤溪县","350427":"沙县","350428":"将乐县","350429":"泰宁县","350430":"建宁县","350481":"永安市"},"350500":{"350502":"鲤城区","350503":"丰泽区","350504":"洛江区","350505":"泉港区","350521":"惠安县","350524":"安溪县","350525":"永春县","350526":"德化县","350527":"金门县","350581":"石狮市","350582":"晋江市","350583":"南安市"},"350600":{"350602":"芗城区","350603":"龙文区","350622":"云霄县","350623":"漳浦县","350624":"诏安县","350625":"长泰县","350626":"东山县","350627":"南靖县","350628":"平和县","350629":"华安县","350681":"龙海市"},"350700":{"350702":"延平区","350703":"建阳区","350721":"顺昌县","350722":"浦城县","350723":"光泽县","350724":"松溪县","350725":"政和县","350781":"邵武市","350782":"武夷山市","350783":"建瓯市"},"350800":{"350802":"新罗区","350803":"永定区","350821":"长汀县","350823":"上杭县","350824":"武平县","350825":"连城县","350881":"漳平市"},"350900":{"350902":"蕉城区","350921":"霞浦县","350922":"古田县","350923":"屏南县","350924":"寿宁县","350925":"周宁县","350926":"柘荣县","350981":"福安市","350982":"福鼎市"},"360000":{"360100":"南昌市","360200":"景德镇市","360300":"萍乡市","360400":"九江市","360500":"新余市","360600":"鹰潭市","360700":"赣州市","360800":"吉安市","360900":"宜春市","361000":"抚州市","361100":"上饶市"},"360100":{"360102":"东湖区","360103":"西湖区","360104":"青云谱区","360105":"湾里区","360111":"青山湖区","360112":"新建区","360121":"南昌县","360123":"安义县","360124":"进贤县"},"360200":{"360202":"昌江区","360203":"珠山区","360222":"浮梁县","360281":"乐平市"},"360300":{"360302":"安源区","360313":"湘东区","360321":"莲花县","360322":"上栗县","360323":"芦溪县"},"360400":{"360402":"濂溪区","360403":"浔阳区","360421":"九江县","360423":"武宁县","360424":"修水县","360425":"永修县","360426":"德安县","360428":"都昌县","360429":"湖口县","360430":"彭泽县","360481":"瑞昌市","360482":"共青城市","360483":"庐山市"},"360500":{"360502":"渝水区","360521":"分宜县"},"360600":{"360602":"月湖区","360622":"余江县","360681":"贵溪市"},"360700":{"360702":"章贡区","360703":"南康区","360721":"赣县","360722":"信丰县","360723":"大余县","360724":"上犹县","360725":"崇义县","360726":"安远县","360727":"龙南县","360728":"定南县","360729":"全南县","360730":"宁都县","360731":"于都县","360732":"兴国县","360733":"会昌县","360734":"寻乌县","360735":"石城县","360781":"瑞金市"},"360800":{"360802":"吉州区","360803":"青原区","360821":"吉安县","360822":"吉水县","360823":"峡江县","360824":"新干县","360825":"永丰县","360826":"泰和县","360827":"遂川县","360828":"万安县","360829":"安福县","360830":"永新县","360881":"井冈山市"},"360900":{"360902":"袁州区","360921":"奉新县","360922":"万载县","360923":"上高县","360924":"宜丰县","360925":"靖安县","360926":"铜鼓县","360981":"丰城市","360982":"樟树市","360983":"高安市"},"361000":{"361002":"临川区","361021":"南城县","361022":"黎川县","361023":"南丰县","361024":"崇仁县","361025":"乐安县","361026":"宜黄县","361027":"金溪县","361028":"资溪县","361029":"东乡县","361030":"广昌县"},"361100":{"361102":"信州区","361103":"广丰区","361121":"上饶县","361123":"玉山县","361124":"铅山县","361125":"横峰县","361126":"弋阳县","361127":"余干县","361128":"鄱阳县","361129":"万年县","361130":"婺源县","361181":"德兴市"},"370000":{"370100":"济南市","370200":"青岛市","370300":"淄博市","370400":"枣庄市","370500":"东营市","370600":"烟台市","370700":"潍坊市","370800":"济宁市","370900":"泰安市","371000":"威海市","371100":"日照市","371200":"莱芜市","371300":"临沂市","371400":"德州市","371500":"聊城市","371600":"滨州市","371700":"菏泽市"},"370100":{"370102":"历下区","370103":"市中区","370104":"槐荫区","370105":"天桥区","370112":"历城区","370113":"长清区","370124":"平阴县","370125":"济阳县","370126":"商河县","370181":"章丘市"},"370200":{"370202":"市南区","370203":"市北区","370211":"黄岛区","370212":"崂山区","370213":"李沧区","370214":"城阳区","370281":"胶州市","370282":"即墨市","370283":"平度市","370285":"莱西市"},"370300":{"370302":"淄川区","370303":"张店区","370304":"博山区","370305":"临淄区","370306":"周村区","370321":"桓台县","370322":"高青县","370323":"沂源县"},"370400":{"370402":"市中区","370403":"薛城区","370404":"峄城区","370405":"台儿庄区","370406":"山亭区","370481":"滕州市"},"370500":{"370502":"东营区","370503":"河口区","370505":"垦利区","370522":"利津县","370523":"广饶县"},"370600":{"370602":"芝罘区","370611":"福山区","370612":"牟平区","370613":"莱山区","370634":"长岛县","370681":"龙口市","370682":"莱阳市","370683":"莱州市","370684":"蓬莱市","370685":"招远市","370686":"栖霞市","370687":"海阳市"},"370700":{"370702":"潍城区","370703":"寒亭区","370704":"坊子区","370705":"奎文区","370724":"临朐县","370725":"昌乐县","370781":"青州市","370782":"诸城市","370783":"寿光市","370784":"安丘市","370785":"高密市","370786":"昌邑市"},"370800":{"370811":"任城区","370812":"兖州区","370826":"微山县","370827":"鱼台县","370828":"金乡县","370829":"嘉祥县","370830":"汶上县","370831":"泗水县","370832":"梁山县","370881":"曲阜市","370883":"邹城市"},"370900":{"370902":"泰山区","370911":"岱岳区","370921":"宁阳县","370923":"东平县","370982":"新泰市","370983":"肥城市"},"371000":{"371002":"环翠区","371003":"文登区","371082":"荣成市","371083":"乳山市"},"371100":{"371102":"东港区","371103":"岚山区","371121":"五莲县","371122":"莒县"},"371200":{"371202":"莱城区","371203":"钢城区"},"371300":{"371302":"兰山区","371311":"罗庄区","371312":"河东区","371321":"沂南县","371322":"郯城县","371323":"沂水县","371324":"兰陵县","371325":"费县","371326":"平邑县","371327":"莒南县","371328":"蒙阴县","371329":"临沭县"},"371400":{"371402":"德城区","371403":"陵城区","371422":"宁津县","371423":"庆云县","371424":"临邑县","371425":"齐河县","371426":"平原县","371427":"夏津县","371428":"武城县","371481":"乐陵市","371482":"禹城市"},"371500":{"371502":"东昌府区","371521":"阳谷县","371522":"莘县","371523":"茌平县","371524":"东阿县","371525":"冠县","371526":"高唐县","371581":"临清市"},"371600":{"371602":"滨城区","371603":"沾化区","371621":"惠民县","371622":"阳信县","371623":"无棣县","371625":"博兴县","371626":"邹平县"},"371700":{"371702":"牡丹区","371703":"定陶区","371721":"曹县","371722":"单县","371723":"成武县","371724":"巨野县","371725":"郓城县","371726":"鄄城县","371728":"东明县"},"410000":{"410100":"郑州市","410200":"开封市","410300":"洛阳市","410400":"平顶山市","410500":"安阳市","410600":"鹤壁市","410700":"新乡市","410800":"焦作市","410900":"濮阳市","411000":"许昌市","411100":"漯河市","411200":"三门峡市","411300":"南阳市","411400":"商丘市","411500":"信阳市","411600":"周口市","411700":"驻马店市","419001":"济源市"},"410100":{"410102":"中原区","410103":"二七区","410104":"管城回族区","410105":"金水区","410106":"上街区","410108":"惠济区","410122":"中牟县","410181":"巩义市","410182":"荥阳市","410183":"新密市","410184":"新郑市","410185":"登封市"},"410200":{"410202":"龙亭区","410203":"顺河回族区","410204":"鼓楼区","410205":"禹王台区","410211":"金明区","410212":"祥符区","410221":"杞县","410222":"通许县","410223":"尉氏县","410225":"兰考县"},"410300":{"410302":"老城区","410303":"西工区","410304":"瀍河回族区","410305":"涧西区","410306":"吉利区","410311":"洛龙区","410322":"孟津县","410323":"新安县","410324":"栾川县","410325":"嵩县","410326":"汝阳县","410327":"宜阳县","410328":"洛宁县","410329":"伊川县","410381":"偃师市"},"410400":{"410402":"新华区","410403":"卫东区","410404":"石龙区","410411":"湛河区","410421":"宝丰县","410422":"叶县","410423":"鲁山县","410425":"郏县","410481":"舞钢市","410482":"汝州市"},"410500":{"410502":"文峰区","410503":"北关区","410505":"殷都区","410506":"龙安区","410522":"安阳县","410523":"汤阴县","410526":"滑县","410527":"内黄县","410581":"林州市"},"410600":{"410602":"鹤山区","410603":"山城区","410611":"淇滨区","410621":"浚县","410622":"淇县"},"410700":{"410702":"红旗区","410703":"卫滨区","410704":"凤泉区","410711":"牧野区","410721":"新乡县","410724":"获嘉县","410725":"原阳县","410726":"延津县","410727":"封丘县","410728":"长垣县","410781":"卫辉市","410782":"辉县市"},"410800":{"410802":"解放区","410803":"中站区","410804":"马村区","410811":"山阳区","410821":"修武县","410822":"博爱县","410823":"武陟县","410825":"温县","410882":"沁阳市","410883":"孟州市"},"410900":{"410902":"华龙区","410922":"清丰县","410923":"南乐县","410926":"范县","410927":"台前县","410928":"濮阳县"},"411000":{"411002":"魏都区","411023":"许昌县","411024":"鄢陵县","411025":"襄城县","411081":"禹州市","411082":"长葛市"},"411100":{"411102":"源汇区","411103":"郾城区","411104":"召陵区","411121":"舞阳县","411122":"临颍县"},"411200":{"411202":"湖滨区","411203":"陕州区","411221":"渑池县","411224":"卢氏县","411281":"义马市","411282":"灵宝市"},"411300":{"411302":"宛城区","411303":"卧龙区","411321":"南召县","411322":"方城县","411323":"西峡县","411324":"镇平县","411325":"内乡县","411326":"淅川县","411327":"社旗县","411328":"唐河县","411329":"新野县","411330":"桐柏县","411381":"邓州市"},"411400":{"411402":"梁园区","411403":"睢阳区","411421":"民权县","411422":"睢县","411423":"宁陵县","411424":"柘城县","411425":"虞城县","411426":"夏邑县","411481":"永城市"},"411500":{"411502":"浉河区","411503":"平桥区","411521":"罗山县","411522":"光山县","411523":"新县","411524":"商城县","411525":"固始县","411526":"潢川县","411527":"淮滨县","411528":"息县"},"411600":{"411602":"川汇区","411621":"扶沟县","411622":"西华县","411623":"商水县","411624":"沈丘县","411625":"郸城县","411626":"淮阳县","411627":"太康县","411628":"鹿邑县","411681":"项城市"},"411700":{"411702":"驿城区","411721":"西平县","411722":"上蔡县","411723":"平舆县","411724":"正阳县","411725":"确山县","411726":"泌阳县","411727":"汝南县","411728":"遂平县","411729":"新蔡县"},"419001":{"4190011":"济源市克井镇","41900111":"济源市下冶镇","419001001":"济源市沁园街道","419001002":"济源市济水街道","419001003":"济源市北海街道","419001004":"济源市天坛街道","419001005":"济源市玉泉街道","419001101":"济源市五龙口镇","419001102":"济源市轵城镇","419001103":"济源市承留镇","419001104":"济源市邵原镇","419001105":"济源市坡头镇","419001106":"济源市梨林镇","419001107":"济源市大峪镇","419001108":"济源市思礼镇","419001109":"济源市王屋镇"},"420000":{"420100":"武汉市","420200":"黄石市","420300":"十堰市","420500":"宜昌市","420600":"襄阳市","420700":"鄂州市","420800":"荆门市","420900":"孝感市","421000":"荆州市","421100":"黄冈市","421200":"咸宁市","421300":"随州市","422800":"恩施土家族苗族自治州","429004":"仙桃市","429005":"潜江市","429006":"天门市","429021":"神农架林区"},"420100":{"420102":"江岸区","420103":"江汉区","420104":"硚口区","420105":"汉阳区","420106":"武昌区","420107":"青山区","420111":"洪山区","420112":"东西湖区","420113":"汉南区","420114":"蔡甸区","420115":"江夏区","420116":"黄陂区","420117":"新洲区"},"420200":{"420202":"黄石港区","420203":"西塞山区","420204":"下陆区","420205":"铁山区","420222":"阳新县","420281":"大冶市"},"420300":{"420302":"茅箭区","420303":"张湾区","420304":"郧阳区","420322":"郧西县","420323":"竹山县","420324":"竹溪县","420325":"房县","420381":"丹江口市"},"420500":{"420502":"西陵区","420503":"伍家岗区","420504":"点军区","420505":"猇亭区","420506":"夷陵区","420525":"远安县","420526":"兴山县","420527":"秭归县","420528":"长阳土家族自治县","420529":"五峰土家族自治县","420581":"宜都市","420582":"当阳市","420583":"枝江市"},"420600":{"420602":"襄城区","420606":"樊城区","420607":"襄州区","420624":"南漳县","420625":"谷城县","420626":"保康县","420682":"老河口市","420683":"枣阳市","420684":"宜城市"},"420700":{"420702":"梁子湖区","420703":"华容区","420704":"鄂城区"},"420800":{"420802":"东宝区","420804":"掇刀区","420821":"京山县","420822":"沙洋县","420881":"钟祥市"},"420900":{"420902":"孝南区","420921":"孝昌县","420922":"大悟县","420923":"云梦县","420981":"应城市","420982":"安陆市","420984":"汉川市"},"421000":{"421002":"沙市区","421003":"荆州区","421022":"公安县","421023":"监利县","421024":"江陵县","421081":"石首市","421083":"洪湖市","421087":"松滋市"},"421100":{"421102":"黄州区","421121":"团风县","421122":"红安县","421123":"罗田县","421124":"英山县","421125":"浠水县","421126":"蕲春县","421127":"黄梅县","421181":"麻城市","421182":"武穴市"},"421200":{"421202":"咸安区","421221":"嘉鱼县","421222":"通城县","421223":"崇阳县","421224":"通山县","421281":"赤壁市"},"421300":{"421303":"曾都区","421321":"随县","421381":"广水市"},"422800":{"422801":"恩施市","422802":"利川市","422822":"建始县","422823":"巴东县","422825":"宣恩县","422826":"咸丰县","422827":"来凤县","422828":"鹤峰县"},"429004":{"4290041":"郑场镇","4290044":"工业园区","42900411":"张沟镇","429004001":"沙嘴街道","429004002":"干河街道","429004003":"龙华山","429004101":"毛嘴镇","429004102":"豆河镇","429004103":"三伏潭镇","429004104":"胡场镇","429004105":"长倘口镇","429004106":"西流河镇","429004107":"沙湖镇","429004108":"杨林尾镇","429004109":"彭场镇","429004111":"郭河镇","429004112":"沔城回族镇","429004113":"通海口镇","429004114":"陈场镇","429004401":"九合垸原种场","429004402":"沙湖原种场","429004404":"五湖渔场","429004405":"赵西垸林场","429004407":"畜禽良种场","429004408":"排湖风景区"},"429005":{"4290051":"竹根滩镇","4290054":"江汉石油管理局","42900545":"周矶管理区","429005001":"园林","429005002":"杨市","429005003":"周矶","429005004":"广华","429005005":"泰丰","429005006":"高场","429005101":"渔洋镇","429005102":"王场镇","429005103":"高石碑镇","429005104":"熊口镇","429005105":"老新镇","429005106":"浩口镇","429005107":"积玉口镇","429005108":"张金镇","429005109":"龙湾镇","429005401":"潜江经济开发区","429005451":"后湖管理区","429005452":"熊口管理区","429005453":"总口管理区","429005454":"白鹭湖管理区","429005455":"运粮湖管理区","429005457":"浩口原种场"},"429006":{"4290061":"多宝镇","42900611":"麻洋镇","42900612":"石河镇","42900645":"蒋湖农场","429006001":"竟陵街道","429006002":"侨乡街道开发区","429006003":"杨林街道","429006101":"拖市镇","429006102":"张港镇","429006103":"蒋场镇","429006104":"汪场镇","429006105":"渔薪镇","429006106":"黄潭镇","429006107":"岳口镇","429006108":"横林镇","429006109":"彭市镇","429006111":"多祥镇","429006112":"干驿镇","429006113":"马湾镇","429006114":"卢市镇","429006115":"小板镇","429006116":"九真镇","429006118":"皂市镇","429006119":"胡市镇","429006121":"佛子山镇","429006201":"净潭乡","429006451":"白茅湖农场","429006452":"沉湖管委会"},"429021":{"4290211":"松柏镇","4290212":"宋洛乡","429021101":"阳日镇","429021102":"木鱼镇","429021103":"红坪镇","429021104":"新华镇","429021105":"九湖镇","429021202":"下谷坪土家族乡"},"430000":{"430100":"长沙市","430200":"株洲市","430300":"湘潭市","430400":"衡阳市","430500":"邵阳市","430600":"岳阳市","430700":"常德市","430800":"张家界市","430900":"益阳市","431000":"郴州市","431100":"永州市","431200":"怀化市","431300":"娄底市","433100":"湘西土家族苗族自治州"},"430100":{"430102":"芙蓉区","430103":"天心区","430104":"岳麓区","430105":"开福区","430111":"雨花区","430112":"望城区","430121":"长沙县","430124":"宁乡县","430181":"浏阳市"},"430200":{"430202":"荷塘区","430203":"芦淞区","430204":"石峰区","430211":"天元区","430221":"株洲县","430223":"攸县","430224":"茶陵县","430225":"炎陵县","430281":"醴陵市"},"430300":{"430302":"雨湖区","430304":"岳塘区","430321":"湘潭县","430381":"湘乡市","430382":"韶山市"},"430400":{"430405":"珠晖区","430406":"雁峰区","430407":"石鼓区","430408":"蒸湘区","430412":"南岳区","430421":"衡阳县","430422":"衡南县","430423":"衡山县","430424":"衡东县","430426":"祁东县","430481":"耒阳市","430482":"常宁市"},"430500":{"430502":"双清区","430503":"大祥区","430511":"北塔区","430521":"邵东县","430522":"新邵县","430523":"邵阳县","430524":"隆回县","430525":"洞口县","430527":"绥宁县","430528":"新宁县","430529":"城步苗族自治县","430581":"武冈市"},"430600":{"430602":"岳阳楼区","430603":"云溪区","430611":"君山区","430621":"岳阳县","430623":"华容县","430624":"湘阴县","430626":"平江县","430681":"汨罗市","430682":"临湘市"},"430700":{"430702":"武陵区","430703":"鼎城区","430721":"安乡县","430722":"汉寿县","430723":"澧县","430724":"临澧县","430725":"桃源县","430726":"石门县","430781":"津市市"},"430800":{"430802":"永定区","430811":"武陵源区","430821":"慈利县","430822":"桑植县"},"430900":{"430902":"资阳区","430903":"赫山区","430921":"南县","430922":"桃江县","430923":"安化县","430981":"沅江市"},"431000":{"431002":"北湖区","431003":"苏仙区","431021":"桂阳县","431022":"宜章县","431023":"永兴县","431024":"嘉禾县","431025":"临武县","431026":"汝城县","431027":"桂东县","431028":"安仁县","431081":"资兴市"},"431100":{"431102":"零陵区","431103":"冷水滩区","431121":"祁阳县","431122":"东安县","431123":"双牌县","431124":"道县","431125":"江永县","431126":"宁远县","431127":"蓝山县","431128":"新田县","431129":"江华瑶族自治县"},"431200":{"431202":"鹤城区","431221":"中方县","431222":"沅陵县","431223":"辰溪县","431224":"溆浦县","431225":"会同县","431226":"麻阳苗族自治县","431227":"新晃侗族自治县","431228":"芷江侗族自治县","431229":"靖州苗族侗族自治县","431230":"通道侗族自治县","431281":"洪江市"},"431300":{"431302":"娄星区","431321":"双峰县","431322":"新化县","431381":"冷水江市","431382":"涟源市"},"433100":{"433101":"吉首市","433122":"泸溪县","433123":"凤凰县","433124":"花垣县","433125":"保靖县","433126":"古丈县","433127":"永顺县","433130":"龙山县"},"440000":{"440100":"广州市","440200":"韶关市","440300":"深圳市","440400":"珠海市","440500":"汕头市","440600":"佛山市","440700":"江门市","440800":"湛江市","440900":"茂名市","441200":"肇庆市","441300":"惠州市","441400":"梅州市","441500":"汕尾市","441600":"河源市","441700":"阳江市","441800":"清远市","441900":"东莞市","442000":"中山市","445100":"潮州市","445200":"揭阳市","445300":"云浮市"},"440100":{"440103":"荔湾区","440104":"越秀区","440105":"海珠区","440106":"天河区","440111":"白云区","440112":"黄埔区","440113":"番禺区","440114":"花都区","440115":"南沙区","440117":"从化区","440118":"增城区"},"440200":{"440203":"武江区","440204":"浈江区","440205":"曲江区","440222":"始兴县","440224":"仁化县","440229":"翁源县","440232":"乳源瑶族自治县","440233":"新丰县","440281":"乐昌市","440282":"南雄市"},"440300":{"440303":"罗湖区","440304":"福田区","440305":"南山区","440306":"宝安区","440307":"龙岗区","440308":"盐田区"},"440400":{"440402":"香洲区","440403":"斗门区","440404":"金湾区"},"440500":{"440507":"龙湖区","440511":"金平区","440512":"濠江区","440513":"潮阳区","440514":"潮南区","440515":"澄海区","440523":"南澳县"},"440600":{"440604":"禅城区","440605":"南海区","440606":"顺德区","440607":"三水区","440608":"高明区"},"440700":{"440703":"蓬江区","440704":"江海区","440705":"新会区","440781":"台山市","440783":"开平市","440784":"鹤山市","440785":"恩平市"},"440800":{"440802":"赤坎区","440803":"霞山区","440804":"坡头区","440811":"麻章区","440823":"遂溪县","440825":"徐闻县","440881":"廉江市","440882":"雷州市","440883":"吴川市"},"440900":{"440902":"茂南区","440904":"电白区","440981":"高州市","440982":"化州市","440983":"信宜市"},"441200":{"441202":"端州区","441203":"鼎湖区","441204":"高要区","441223":"广宁县","441224":"怀集县","441225":"封开县","441226":"德庆县","441284":"四会市"},"441300":{"441302":"惠城区","441303":"惠阳区","441322":"博罗县","441323":"惠东县","441324":"龙门县"},"441400":{"441402":"梅江区","441403":"梅县区","441422":"大埔县","441423":"丰顺县","441424":"五华县","441426":"平远县","441427":"蕉岭县","441481":"兴宁市"},"441500":{"441502":"城区","441521":"海丰县","441523":"陆河县","441581":"陆丰市"},"441600":{"441602":"源城区","441621":"紫金县","441622":"龙川县","441623":"连平县","441624":"和平县","441625":"东源县"},"441700":{"441702":"江城区","441704":"阳东区","441721":"阳西县","441781":"阳春市"},"441800":{"441802":"清城区","441803":"清新区","441821":"佛冈县","441823":"阳山县","441825":"连山壮族瑶族自治县","441826":"连南瑶族自治县","441881":"英德市","441882":"连州市"},"441900":{"441900003":"东城街道","441900004":"南城街道","441900005":"万江街道","441900006":"莞城街道","441900101":"石碣镇","441900102":"石龙镇","441900103":"茶山镇","441900104":"石排镇","441900105":"企石镇","441900106":"横沥镇","441900107":"桥头镇","441900108":"谢岗镇","441900109":"东坑镇","441900110":"常平镇","441900111":"寮步镇","441900112":"樟木头镇","441900113":"大朗镇","441900114":"黄江镇","441900115":"清溪镇","441900116":"塘厦镇","441900117":"凤岗镇","441900118":"大岭山镇","441900119":"长安镇","441900121":"虎门镇","441900122":"厚街镇","441900123":"沙田镇","441900124":"道滘镇","441900125":"洪梅镇","441900126":"麻涌镇","441900127":"望牛墩镇","441900128":"中堂镇","441900129":"高埗镇","441900401":"松山湖管委会","441900402":"虎门港管委会","441900403":"东莞生态园"},"442000":{"442000001":"石岐区街道","442000002":"东区街道","442000003":"火炬开发区街道","442000004":"西区街道","442000005":"南区街道","442000006":"五桂山街道","442000100":"小榄镇","442000101":"黄圃镇","442000102":"民众镇","442000103":"东凤镇","442000104":"东升镇","442000105":"古镇镇","442000106":"沙溪镇","442000107":"坦洲镇","442000108":"港口镇","442000109":"三角镇","442000110":"横栏镇","442000111":"南头镇","442000112":"阜沙镇","442000113":"南朗镇","442000114":"三乡镇","442000115":"板芙镇","442000116":"大涌镇","442000117":"神湾镇"},"445100":{"445102":"湘桥区","445103":"潮安区","445122":"饶平县"},"445200":{"445202":"榕城区","445203":"揭东区","445222":"揭西县","445224":"惠来县","445281":"普宁市"},"445300":{"445302":"云城区","445303":"云安区","445321":"新兴县","445322":"郁南县","445381":"罗定市"},"450000":{"450100":"南宁市","450200":"柳州市","450300":"桂林市","450400":"梧州市","450500":"北海市","450600":"防城港市","450700":"钦州市","450800":"贵港市","450900":"玉林市","451000":"百色市","451100":"贺州市","451200":"河池市","451300":"来宾市","451400":"崇左市"},"450100":{"450102":"兴宁区","450103":"青秀区","450105":"江南区","450107":"西乡塘区","450108":"良庆区","450109":"邕宁区","450110":"武鸣区","450123":"隆安县","450124":"马山县","450125":"上林县","450126":"宾阳县","450127":"横县"},"450200":{"450202":"城中区","450203":"鱼峰区","450204":"柳南区","450205":"柳北区","450206":"柳江区","450222":"柳城县","450223":"鹿寨县","450224":"融安县","450225":"融水苗族自治县","450226":"三江侗族自治县"},"450300":{"450302":"秀峰区","450303":"叠彩区","450304":"象山区","450305":"七星区","450311":"雁山区","450312":"临桂区","450321":"阳朔县","450323":"灵川县","450324":"全州县","450325":"兴安县","450326":"永福县","450327":"灌阳县","450328":"龙胜各族自治县","450329":"资源县","450330":"平乐县","450331":"荔浦县","450332":"恭城瑶族自治县"},"450400":{"450403":"万秀区","450405":"长洲区","450406":"龙圩区","450421":"苍梧县","450422":"藤县","450423":"蒙山县","450481":"岑溪市"},"450500":{"450502":"海城区","450503":"银海区","450512":"铁山港区","450521":"合浦县"},"450600":{"450602":"港口区","450603":"防城区","450621":"上思县","450681":"东兴市"},"450700":{"450702":"钦南区","450703":"钦北区","450721":"灵山县","450722":"浦北县"},"450800":{"450802":"港北区","450803":"港南区","450804":"覃塘区","450821":"平南县","450881":"桂平市"},"450900":{"450902":"玉州区","450903":"福绵区","450921":"容县","450922":"陆川县","450923":"博白县","450924":"兴业县","450981":"北流市"},"451000":{"451002":"右江区","451021":"田阳县","451022":"田东县","451023":"平果县","451024":"德保县","451026":"那坡县","451027":"凌云县","451028":"乐业县","451029":"田林县","451030":"西林县","451031":"隆林各族自治县","451081":"靖西市"},"451100":{"451102":"八步区","451103":"平桂区","451121":"昭平县","451122":"钟山县","451123":"富川瑶族自治县"},"451200":{"451202":"金城江区","451221":"南丹县","451222":"天峨县","451223":"凤山县","451224":"东兰县","451225":"罗城仫佬族自治县","451226":"环江毛南族自治县","451227":"巴马瑶族自治县","451228":"都安瑶族自治县","451229":"大化瑶族自治县","451281":"宜州市"},"451300":{"451302":"兴宾区","451321":"忻城县","451322":"象州县","451323":"武宣县","451324":"金秀瑶族自治县","451381":"合山市"},"451400":{"451402":"江州区","451421":"扶绥县","451422":"宁明县","451423":"龙州县","451424":"大新县","451425":"天等县","451481":"凭祥市"},"460000":{"460100":"海口市","460200":"三亚市","460300":"三沙市","460400":"儋州市","469001":"五指山市","469002":"琼海市","469005":"文昌市","469006":"万宁市","469007":"东方市","469021":"定安县","469022":"屯昌县","469023":"澄迈县","469024":"临高县","469025":"白沙黎族自治县","469026":"昌江黎族自治县","469027":"乐东黎族自治县","469028":"陵水黎族自治县","469029":"保亭黎族苗族自治县","469030":"琼中黎族苗族自治县"},"460100":{"460105":"秀英区","460106":"龙华区","460107":"琼山区","460108":"美兰区"},"460200":{"460202":"海棠区","460203":"吉阳区","460204":"天涯区","460205":"崖州区"},"460300":{"460321":"西沙群岛","460322":"南沙群岛","460323":"中沙群岛的岛礁及其海域"},"460400":{"4604001":"那大镇","4604004":"国营西培农场","4604005":"华南热作学院","46040011":"三都镇","460400101":"和庆镇","460400102":"南丰镇","460400103":"大成镇","460400104":"雅星镇","460400105":"兰洋镇","460400106":"光村镇","460400107":"木棠镇","460400108":"海头镇","460400109":"峨蔓镇","460400111":"王五镇","460400112":"白马井镇","460400113":"中和镇","460400114":"排浦镇","460400115":"东成镇","460400116":"新州镇","460400404":"国营西联农场","460400405":"国营蓝洋农场","460400407":"国营八一农场","460400499":"洋浦经济开发区"},"469001":{"4690011":"通什镇","4690012":"畅好乡","4690014":"畅好农场","469001101":"南圣镇","469001102":"毛阳镇","469001103":"番阳镇","469001201":"毛道乡","469001202":"水满乡"},"469002":{"4690021":"嘉积镇","4690024":"国营东太农场","4690025":"彬村山华侨农场","46900211":"大路镇","469002101":"万泉镇","469002102":"石壁镇","469002103":"中原镇","469002104":"博鳌镇","469002105":"阳江镇","469002106":"龙江镇","469002107":"潭门镇","469002108":"塔洋镇","469002109":"长坡镇","469002111":"会山镇","469002402":"国营东红农场","469002403":"国营东升农场"},"469005":{"4690051":"文城镇","4690054":"国营东路农场","46900511":"昌洒镇","469005101":"重兴镇","469005102":"蓬莱镇","469005103":"会文镇","469005104":"东路镇","469005105":"潭牛镇","469005106":"东阁镇","469005107":"文教镇","469005108":"东郊镇","469005109":"龙楼镇","469005111":"翁田镇","469005112":"抱罗镇","469005113":"冯坡镇","469005114":"锦山镇","469005115":"铺前镇","469005116":"公坡镇","469005401":"国营南阳农场","469005402":"国营罗豆农场"},"469006":{"4690061":"万城镇","4690064":"国营东兴农场","4690065":"兴隆华侨农场","46900611":"南桥镇","469006101":"龙滚镇","469006102":"和乐镇","469006103":"后安镇","469006104":"大茂镇","469006105":"东澳镇","469006106":"礼纪镇","469006107":"长丰镇","469006108":"山根镇","469006109":"北大镇","469006111":"三更罗镇","469006401":"国营东和农场","469006404":"国营新中农场","469006501":"地方国营六连林场"},"469007":{"4690071":"八所镇","4690072":"天安乡","4690074":"国营广坝农场","4690075":"东方华侨农场","469007101":"东河镇","469007102":"大田镇","469007103":"感城镇","469007104":"板桥镇","469007105":"三家镇","469007106":"四更镇","469007107":"新龙镇","469007201":"江边乡"},"469021":{"4690211":"定城镇","4690214":"国营中瑞农场","469021101":"新竹镇","469021102":"龙湖镇","469021103":"黄竹镇","469021104":"雷鸣镇","469021105":"龙门镇","469021106":"龙河镇","469021107":"岭口镇","469021108":"翰林镇","469021109":"富文镇","469021401":"国营南海农场","469021402":"国营金鸡岭农场"},"469022":{"4690221":"屯城镇","4690224":"国营中建农场","469022101":"新兴镇","469022102":"枫木镇","469022103":"乌坡镇","469022104":"南吕镇","469022105":"南坤镇","469022106":"坡心镇","469022107":"西昌镇","469022401":"国营中坤农场"},"469023":{"4690231":"金江镇","4690234":"国营红光农场","46902311":"大丰镇","469023101":"老城镇","469023102":"瑞溪镇","469023103":"永发镇","469023104":"加乐镇","469023105":"文儒镇","469023106":"中兴镇","469023107":"仁兴镇","469023108":"福山镇","469023109":"桥头镇","469023402":"国营西达农场","469023405":"国营金安农场"},"469024":{"4690241":"临城镇","4690244":"国营红华农场","469024101":"波莲镇","469024102":"东英镇","469024103":"博厚镇","469024104":"皇桐镇","469024105":"多文镇","469024106":"和舍镇","469024107":"南宝镇","469024108":"新盈镇","469024109":"调楼镇","469024401":"国营加来农场"},"469025":{"4690251":"牙叉镇","4690252":"细水乡","469025101":"七坊镇","469025102":"邦溪镇","469025103":"打安镇","469025201":"元门乡","469025202":"南开乡","469025203":"阜龙乡","469025204":"青松乡","469025205":"金波乡","469025206":"荣邦乡","469025401":"国营白沙农场","469025404":"国营龙江农场","469025408":"国营邦溪农场"},"469026":{"4690261":"石碌镇","4690262":"王下乡","4690265":"国营霸王岭林场","469026101":"叉河镇","469026102":"十月田镇","469026103":"乌烈镇","469026104":"昌化镇","469026105":"海尾镇","469026106":"七叉镇","469026401":"国营红林农场","469026501":"海南矿业联合有限公司"},"469027":{"4690271":"抱由镇","4690275":"国营尖峰岭林业公司","46902711":"莺歌海镇","469027101":"万冲镇","469027102":"大安镇","469027103":"志仲镇","469027104":"千家镇","469027105":"九所镇","469027106":"利国镇","469027107":"黄流镇","469027108":"佛罗镇","469027109":"尖峰镇","469027401":"国营山荣农场","469027402":"国营乐光农场","469027405":"国营保国农场","469027501":"国营莺歌海盐场"},"469028":{"4690281":"椰林镇","4690282":"提蒙乡","4690284":"国营岭门农场","4690285":"国营吊罗山林业公司","469028101":"光坡镇","469028102":"三才镇","469028103":"英州镇","469028104":"隆广镇","469028105":"文罗镇","469028106":"本号镇","469028107":"新村镇","469028108":"黎安镇","469028201":"群英乡","469028401":"国营南平农场"},"469029":{"4690291":"保城镇","4690292":"六弓乡","469029101":"什玲镇","469029102":"加茂镇","469029103":"响水镇","469029104":"新政镇","469029105":"三道镇","469029201":"南林乡","469029202":"毛感乡","469029401":"国营新星农场","469029402":"海南保亭热带作物研究所","469029403":"国营金江农场","469029405":"国营三道农场"},"469030":{"4690301":"营根镇","4690302":"吊罗山乡","4690305":"海南黎母山省级自然保护区管理站","469030101":"湾岭镇","469030102":"黎母山镇","469030103":"和平镇","469030104":"长征镇","469030105":"红毛镇","469030106":"中平镇","469030201":"上安乡","469030202":"什运乡","469030402":"国营阳江农场","469030403":"国营乌石农场","469030406":"国营加钗农场","469030407":"国营长征农场"},"500000":{"500100":"市辖区","500228":"梁平县","500229":"城口县","500230":"丰都县","500231":"垫江县","500232":"武隆县","500233":"忠县","500235":"云阳县","500236":"奉节县","500237":"巫山县","500238":"巫溪县","500240":"石柱土家族自治县","500241":"秀山土家族苗族自治县","500242":"酉阳土家族苗族自治县","500243":"彭水苗族土家族自治县"},"500100":{"500101":"万州区","500102":"涪陵区","500103":"渝中区","500104":"大渡口区","500105":"江北区","500106":"沙坪坝区","500107":"九龙坡区","500108":"南岸区","500109":"北碚区","500110":"綦江区","500111":"大足区","500112":"渝北区","500113":"巴南区","500114":"黔江区","500115":"长寿区","500116":"江津区","500117":"合川区","500118":"永川区","500119":"南川区","500120":"璧山区","500151":"铜梁区","500152":"潼南区","500153":"荣昌区","500154":"开州区"},"500228":{"5002282":"安胜乡","5002284":"梁平县农场","50022811":"聚奎镇","50022812":"合兴镇","500228001":"梁平县梁山街道","500228002":"梁平县双桂街道","500228101":"仁贤镇","500228102":"礼让镇","500228103":"云龙镇","500228104":"屏锦镇","500228106":"袁驿镇","500228107":"新盛镇","500228108":"福禄镇","500228109":"金带镇","500228111":"明达镇","500228112":"荫平镇","500228113":"和林镇","500228114":"回龙镇","500228115":"碧山镇","500228116":"虎城镇","500228117":"七星镇","500228118":"龙门镇","500228119":"文化镇","500228121":"石安镇","500228122":"柏家镇","500228123":"大观镇","500228124":"竹山镇","500228125":"蟠龙镇","500228126":"星桥镇","500228127":"曲水镇","500228201":"铁门乡","500228202":"龙胜乡","500228203":"复平乡","500228205":"紫照乡","500228401":"梁平县双桂工业园区"},"500229":{"50022911":"咸宜镇","50022921":"双河乡","50022922":"厚坪乡","500229001":"葛城街道","500229002":"复兴街道","500229102":"巴山镇","500229103":"坪坝镇","500229104":"庙坝镇","500229105":"明通镇","500229106":"修齐镇","500229107":"高观镇","500229108":"高燕镇","500229109":"东安镇","500229111":"高楠镇","500229201":"龙田乡","500229202":"北屏乡","500229205":"左岚乡","500229208":"沿河乡","500229211":"蓼子乡","500229212":"鸡鸣乡","500229214":"周溪乡","500229216":"明中乡","500229217":"治平乡","500229219":"岚天乡","500229221":"河鱼乡"},"500230":{"500230":"名山街道","50023011":"兴义镇","50023012":"兴龙镇","50023021":"三建乡","500230101":"虎威镇","500230102":"社坛镇","500230103":"三元镇","500230104":"许明寺镇","500230105":"董家镇","500230106":"树人镇","500230107":"十直镇","500230109":"高家镇","500230111":"双路镇","500230112":"江池镇","500230113":"龙河镇","500230114":"武平镇","500230115":"包鸾镇","500230116":"湛普镇","500230118":"南天湖镇","500230119":"保合镇","500230121":"仁沙镇","500230122":"龙孔镇","500230123":"暨龙镇","500230124":"双龙镇","500230125":"仙女湖镇","500230202":"青龙乡","500230206":"太平坝乡","500230207":"都督乡","500230209":"栗子乡"},"500231":{"50023111":"太平镇","50023112":"裴兴镇","500231001":"桂溪街道","500231002":"桂阳街道","500231101":"新民镇","500231102":"沙坪镇","500231103":"周嘉镇","500231104":"普顺镇","500231105":"永安镇","500231106":"高安镇","500231107":"高峰镇","500231108":"五洞镇","500231109":"澄溪镇","500231111":"鹤游镇","500231112":"坪山镇","500231113":"砚台镇","500231114":"曹回镇","500231115":"杠家镇","500231116":"包家镇","500231117":"白家镇","500231118":"永平镇","500231119":"三溪镇","500231121":"黄沙镇","500231122":"长龙镇","500231202":"沙河乡","500231204":"大石乡"},"500232":{"5002321":"巷口镇","5002322":"凤来乡","50023211":"土坎镇","50023221":"后坪苗族土家族乡","500232101":"火炉镇","500232102":"白马镇","500232103":"鸭江镇","500232104":"长坝镇","500232105":"江口镇","500232106":"平桥镇","500232107":"羊角镇","500232108":"仙女山镇","500232109":"桐梓镇","500232111":"和顺镇","500232112":"双河镇","500232202":"庙垭乡","500232203":"石桥苗族土家族乡","500232205":"黄莺乡","500232206":"沧沟乡","500232207":"文复苗族土家族乡","500232208":"土地乡","500232209":"白云乡","500232211":"浩口苗族仡佬族乡","500232212":"接龙乡","500232213":"赵家乡","500232214":"大洞河乡"},"500233":{"50023311":"官坝镇","50023312":"白石镇","50023321":"兴峰乡","500233001":"忠州街道","500233002":"白公街道","500233101":"新生镇","500233102":"任家镇","500233103":"乌杨镇","500233104":"洋渡镇","500233105":"东溪镇","500233106":"复兴镇","500233107":"石宝镇","500233108":"汝溪镇","500233109":"野鹤镇","500233111":"石黄镇","500233112":"马灌镇","500233113":"金鸡镇","500233114":"新立镇","500233115":"双桂镇","500233116":"拔山镇","500233117":"花桥镇","500233118":"永丰镇","500233119":"三汇镇","500233122":"黄金镇","500233201":"善广乡","500233203":"石子乡","500233204":"磨子土家族乡","500233206":"涂井乡","500233208":"金声乡"},"500235":{"50023513":"桑坪镇","50023514":"蔈草镇","500235001":"双江街道","500235002":"青龙街道","500235003":"人和街道","500235004":"盘龙街道","500235105":"龙角镇","500235107":"故陵镇","500235108":"红狮镇","500235115":"路阳镇","500235116":"农坝镇","500235118":"渠马镇","500235121":"黄石镇","500235122":"巴阳镇","500235123":"沙市镇","500235124":"鱼泉镇","500235125":"凤鸣镇","500235127":"宝坪镇","500235128":"南溪镇","500235129":"双土镇","500235131":"江口镇","500235132":"高阳镇","500235133":"平安镇","500235135":"云阳镇","500235136":"云安镇","500235137":"栖霞镇","500235138":"双龙镇","500235139":"泥溪镇","500235141":"养鹿镇","500235142":"水口镇","500235143":"堰坪镇","500235144":"龙洞镇","500235145":"后叶镇","500235146":"耀灵镇","500235147":"大阳镇","500235208":"外郎乡","500235215":"新津乡","500235216":"普安乡","500235218":"洞鹿乡","500235219":"石门乡","500235239":"上坝乡","500235242":"清水土家族自治乡"},"500236":{"50023612":"康乐镇","50023613":"新民镇","50023627":"康坪乡","500236001":"永安街道","500236002":"鱼复街道","500236003":"夔门街道","500236117":"白帝镇","500236118":"草堂镇","500236119":"汾河镇","500236121":"大树镇","500236122":"竹园镇","500236123":"公平镇","500236124":"朱衣镇","500236125":"甲高镇","500236126":"羊市镇","500236127":"吐祥镇","500236128":"兴隆镇","500236129":"青龙镇","500236131":"永乐镇","500236132":"安坪镇","500236133":"五马镇","500236134":"青莲镇","500236265":"岩湾乡","500236266":"平安乡","500236267":"红土乡","500236269":"石岗乡","500236272":"太和土家族乡","500236274":"鹤峰乡","500236275":"冯坪乡","500236276":"长安土家族乡","500236277":"龙桥土家族乡","500236278":"云雾土家族乡"},"500237":{"5002372":"红椿乡","50023711":"铜鼓镇","50023721":"建坪乡","500237001":"高唐街道","500237002":"龙门街道","500237101":"庙宇镇","500237102":"大昌镇","500237103":"福田镇","500237104":"龙溪镇","500237105":"双龙镇","500237106":"官阳镇","500237107":"骡坪镇","500237108":"抱龙镇","500237109":"官渡镇","500237111":"巫峡镇","500237207":"两坪乡","500237208":"曲尺乡","500237211":"大溪乡","500237214":"金坪乡","500237216":"平河乡","500237219":"当阳乡","500237222":"竹贤乡","500237225":"三溪乡","500237227":"培石乡","500237229":"笃坪乡","500237231":"邓家乡"},"500238":{"5002381":"城厢镇","5002384":"红池坝经济开发区","50023811":"峰灵镇","50023821":"长桂乡","50023824":"双阳乡","500238001":"宁河街道","500238002":"柏杨街道","500238101":"凤凰镇","500238102":"宁厂镇","500238103":"上磺镇","500238104":"古路镇","500238105":"文峰镇","500238106":"徐家镇","500238107":"白鹿镇","500238108":"尖山镇","500238109":"下堡镇","500238111":"塘坊镇","500238112":"朝阳镇","500238113":"田坝镇","500238114":"通城镇","500238115":"菱角镇","500238116":"蒲莲镇","500238117":"土城镇","500238204":"胜利乡","500238207":"大河乡","500238208":"天星乡","500238226":"鱼鳞乡","500238227":"乌龙乡","500238234":"中岗乡","500238237":"花台乡","500238239":"兰英乡","500238242":"中梁乡","500238243":"天元乡"},"500240":{"500240":"下路街道","50024011":"龙沙镇","50024021":"石家乡","500240101":"西沱镇","500240103":"悦崃镇","500240104":"临溪镇","500240105":"黄水镇","500240106":"马武镇","500240107":"沙子镇","500240108":"王场镇","500240109":"沿溪镇","500240111":"鱼池镇","500240112":"三河镇","500240113":"大歇镇","500240114":"桥头镇","500240115":"万朝镇","500240116":"冷水镇","500240117":"黄鹤镇","500240203":"黎场乡","500240204":"三星乡","500240205":"六塘乡","500240207":"三益乡","500240208":"王家乡","500240209":"河嘴乡","500240212":"枫木乡","500240213":"中益乡","500240214":"洗新乡","500240216":"龙潭乡","500240217":"新乐乡","500240218":"金铃乡","500240219":"金竹乡"},"500241":{"50024111":"雅江镇","500241001":"中和街道","500241002":"乌杨街道","500241003":"平凯街道","500241102":"清溪场镇","500241103":"隘口镇","500241104":"溶溪镇","500241105":"官庄镇","500241106":"龙池镇","500241107":"石堤镇","500241108":"峨溶镇","500241109":"洪安镇","500241111":"石耶镇","500241112":"梅江镇","500241113":"兰桥镇","500241114":"膏田镇","500241115":"溪口镇","500241116":"妙泉镇","500241117":"宋农镇","500241118":"里仁镇","500241119":"钟灵镇","500241201":"孝溪乡","500241207":"海洋乡","500241208":"大溪乡","500241211":"涌洞乡","500241214":"中平乡","500241215":"岑溪乡"},"500242":{"5002422":"涂市乡","50024211":"泔溪镇","50024221":"后坪乡","50024222":"清泉乡","500242001":"桃花源街道","500242002":"钟多街道","500242101":"龙潭镇","500242102":"麻旺镇","500242103":"酉酬镇","500242104":"大溪镇","500242105":"兴隆镇","500242106":"黑水镇","500242107":"丁市镇","500242108":"龚滩镇","500242109":"李溪镇","500242111":"酉水河镇","500242112":"苍岭镇","500242113":"小河镇","500242114":"板溪镇","500242202":"铜鼓乡","500242204":"可大乡","500242205":"偏柏乡","500242206":"五福乡","500242207":"木叶乡","500242208":"毛坝乡","500242209":"花田乡","500242211":"天馆乡","500242212":"宜居乡","500242213":"万木乡","500242214":"两罾乡","500242215":"板桥乡","500242216":"官清乡","500242217":"南腰界乡","500242218":"车田乡","500242219":"腴地乡","500242221":"庙溪乡","500242222":"浪坪乡","500242223":"双泉乡","500242224":"楠木乡"},"500243":{"50024311":"万足镇","50024321":"走马乡","500243001":"汉葭街道","500243002":"绍庆街道","500243003":"靛水街道","500243101":"保家镇","500243102":"郁山镇","500243103":"高谷镇","500243104":"桑柘镇","500243105":"鹿角镇","500243106":"黄家镇","500243107":"普子镇","500243108":"龙射镇","500243109":"连湖镇","500243111":"平安镇","500243112":"长生镇","500243113":"新田镇","500243114":"鞍子镇","500243115":"太原镇","500243116":"龙溪镇","500243117":"梅子垭镇","500243118":"大同镇","500243201":"岩东乡","500243202":"鹿鸣乡","500243204":"棣棠乡","500243206":"三义乡","500243207":"联合乡","500243208":"石柳乡","500243211":"芦塘乡","500243213":"乔梓乡","500243217":"诸佛乡","500243219":"桐楼乡","500243222":"善感乡","500243223":"双龙乡","500243224":"石盘乡","500243225":"大垭乡","500243226":"润溪乡","500243227":"朗溪乡","500243228":"龙塘乡"},"510000":{"510100":"成都市","510300":"自贡市","510400":"攀枝花市","510500":"泸州市","510600":"德阳市","510700":"绵阳市","510800":"广元市","510900":"遂宁市","511000":"内江市","511100":"乐山市","511300":"南充市","511400":"眉山市","511500":"宜宾市","511600":"广安市","511700":"达州市","511800":"雅安市","511900":"巴中市","512000":"资阳市","513200":"阿坝藏族羌族自治州","513300":"甘孜藏族自治州","513400":"凉山彝族自治州"},"510100":{"510104":"锦江区","510105":"青羊区","510106":"金牛区","510107":"武侯区","510108":"成华区","510112":"龙泉驿区","510113":"青白江区","510114":"新都区","510115":"温江区","510116":"双流区","510121":"金堂县","510124":"郫县","510129":"大邑县","510131":"蒲江县","510132":"新津县","510181":"都江堰市","510182":"彭州市","510183":"邛崃市","510184":"崇州市","510185":"简阳市"},"510300":{"510302":"自流井区","510303":"贡井区","510304":"大安区","510311":"沿滩区","510321":"荣县","510322":"富顺县"},"510400":{"510402":"东区","510403":"西区","510411":"仁和区","510421":"米易县","510422":"盐边县"},"510500":{"510502":"江阳区","510503":"纳溪区","510504":"龙马潭区","510521":"泸县","510522":"合江县","510524":"叙永县","510525":"古蔺县"},"510600":{"510603":"旌阳区","510623":"中江县","510626":"罗江县","510681":"广汉市","510682":"什邡市","510683":"绵竹市"},"510700":{"510703":"涪城区","510704":"游仙区","510705":"安州区","510722":"三台县","510723":"盐亭县","510725":"梓潼县","510726":"北川羌族自治县","510727":"平武县","510781":"江油市"},"510800":{"510802":"利州区","510811":"昭化区","510812":"朝天区","510821":"旺苍县","510822":"青川县","510823":"剑阁县","510824":"苍溪县"},"510900":{"510903":"船山区","510904":"安居区","510921":"蓬溪县","510922":"射洪县","510923":"大英县"},"511000":{"511002":"市中区","511011":"东兴区","511024":"威远县","511025":"资中县","511028":"隆昌县"},"511100":{"511102":"市中区","511111":"沙湾区","511112":"五通桥区","511113":"金口河区","511123":"犍为县","511124":"井研县","511126":"夹江县","511129":"沐川县","511132":"峨边彝族自治县","511133":"马边彝族自治县","511181":"峨眉山市"},"511300":{"511302":"顺庆区","511303":"高坪区","511304":"嘉陵区","511321":"南部县","511322":"营山县","511323":"蓬安县","511324":"仪陇县","511325":"西充县","511381":"阆中市"},"511400":{"511402":"东坡区","511403":"彭山区","511421":"仁寿县","511423":"洪雅县","511424":"丹棱县","511425":"青神县"},"511500":{"511502":"翠屏区","511503":"南溪区","511521":"宜宾县","511523":"江安县","511524":"长宁县","511525":"高县","511526":"珙县","511527":"筠连县","511528":"兴文县","511529":"屏山县"},"511600":{"511602":"广安区","511603":"前锋区","511621":"岳池县","511622":"武胜县","511623":"邻水县","511681":"华蓥市"},"511700":{"511702":"通川区","511703":"达川区","511722":"宣汉县","511723":"开江县","511724":"大竹县","511725":"渠县","511781":"万源市"},"511800":{"511802":"雨城区","511803":"名山区","511822":"荥经县","511823":"汉源县","511824":"石棉县","511825":"天全县","511826":"芦山县","511827":"宝兴县"},"511900":{"511902":"巴州区","511903":"恩阳区","511921":"通江县","511922":"南江县","511923":"平昌县"},"512000":{"512002":"雁江区","512021":"安岳县","512022":"乐至县"},"513200":{"513201":"马尔康市","513221":"汶川县","513222":"理县","513223":"茂县","513224":"松潘县","513225":"九寨沟县","513226":"金川县","513227":"小金县","513228":"黑水县","513230":"壤塘县","513231":"阿坝县","513232":"若尔盖县","513233":"红原县"},"513300":{"513301":"康定市","513322":"泸定县","513323":"丹巴县","513324":"九龙县","513325":"雅江县","513326":"道孚县","513327":"炉霍县","513328":"甘孜县","513329":"新龙县","513330":"德格县","513331":"白玉县","513332":"石渠县","513333":"色达县","513334":"理塘县","513335":"巴塘县","513336":"乡城县","513337":"稻城县","513338":"得荣县"},"513400":{"513401":"西昌市","513422":"木里藏族自治县","513423":"盐源县","513424":"德昌县","513425":"会理县","513426":"会东县","513427":"宁南县","513428":"普格县","513429":"布拖县","513430":"金阳县","513431":"昭觉县","513432":"喜德县","513433":"冕宁县","513434":"越西县","513435":"甘洛县","513436":"美姑县","513437":"雷波县"},"520000":{"520100":"贵阳市","520200":"六盘水市","520300":"遵义市","520400":"安顺市","520500":"毕节市","520600":"铜仁市","522300":"黔西南布依族苗族自治州","522600":"黔东南苗族侗族自治州","522700":"黔南布依族苗族自治州"},"520100":{"520102":"南明区","520103":"云岩区","520111":"花溪区","520112":"乌当区","520113":"白云区","520115":"观山湖区","520121":"开阳县","520122":"息烽县","520123":"修文县","520181":"清镇市"},"520200":{"520201":"钟山区","520203":"六枝特区","520221":"水城县","520222":"盘县"},"520300":{"520302":"红花岗区","520303":"汇川区","520304":"播州区","520322":"桐梓县","520323":"绥阳县","520324":"正安县","520325":"道真仡佬族苗族自治县","520326":"务川仡佬族苗族自治县","520327":"凤冈县","520328":"湄潭县","520329":"余庆县","520330":"习水县","520381":"赤水市","520382":"仁怀市"},"520400":{"520402":"西秀区","520403":"平坝区","520422":"普定县","520423":"镇宁布依族苗族自治县","520424":"关岭布依族苗族自治县","520425":"紫云苗族布依族自治县"},"520500":{"520502":"七星关区","520521":"大方县","520522":"黔西县","520523":"金沙县","520524":"织金县","520525":"纳雍县","520526":"威宁彝族回族苗族自治县","520527":"赫章县"},"520600":{"520602":"碧江区","520603":"万山区","520621":"江口县","520622":"玉屏侗族自治县","520623":"石阡县","520624":"思南县","520625":"印江土家族苗族自治县","520626":"德江县","520627":"沿河土家族自治县","520628":"松桃苗族自治县"},"522300":{"522301":"兴义市","522322":"兴仁县","522323":"普安县","522324":"晴隆县","522325":"贞丰县","522326":"望谟县","522327":"册亨县","522328":"安龙县"},"522600":{"522601":"凯里市","522622":"黄平县","522623":"施秉县","522624":"三穗县","522625":"镇远县","522626":"岑巩县","522627":"天柱县","522628":"锦屏县","522629":"剑河县","522630":"台江县","522631":"黎平县","522632":"榕江县","522633":"从江县","522634":"雷山县","522635":"麻江县","522636":"丹寨县"},"522700":{"522701":"都匀市","522702":"福泉市","522722":"荔波县","522723":"贵定县","522725":"瓮安县","522726":"独山县","522727":"平塘县","522728":"罗甸县","522729":"长顺县","522730":"龙里县","522731":"惠水县","522732":"三都水族自治县"},"530000":{"530100":"昆明市","530300":"曲靖市","530400":"玉溪市","530500":"保山市","530600":"昭通市","530700":"丽江市","530800":"普洱市","530900":"临沧市","532300":"楚雄彝族自治州","532500":"红河哈尼族彝族自治州","532600":"文山壮族苗族自治州","532800":"西双版纳傣族自治州","532900":"大理白族自治州","533100":"德宏傣族景颇族自治州","533300":"怒江傈僳族自治州","533400":"迪庆藏族自治州"},"530100":{"530102":"五华区","530103":"盘龙区","530111":"官渡区","530112":"西山区","530113":"东川区","530114":"呈贡区","530122":"晋宁县","530124":"富民县","530125":"宜良县","530126":"石林彝族自治县","530127":"嵩明县","530128":"禄劝彝族苗族自治县","530129":"寻甸回族彝族自治县","530181":"安宁市"},"530300":{"530302":"麒麟区","530303":"沾益区","530321":"马龙县","530322":"陆良县","530323":"师宗县","530324":"罗平县","530325":"富源县","530326":"会泽县","530381":"宣威市"},"530400":{"530402":"红塔区","530403":"江川区","530422":"澄江县","530423":"通海县","530424":"华宁县","530425":"易门县","530426":"峨山彝族自治县","530427":"新平彝族傣族自治县","530428":"元江哈尼族彝族傣族自治县"},"530500":{"530502":"隆阳区","530521":"施甸县","530523":"龙陵县","530524":"昌宁县","530581":"腾冲市"},"530600":{"530602":"昭阳区","530621":"鲁甸县","530622":"巧家县","530623":"盐津县","530624":"大关县","530625":"永善县","530626":"绥江县","530627":"镇雄县","530628":"彝良县","530629":"威信县","530630":"水富县"},"530700":{"530702":"古城区","530721":"玉龙纳西族自治县","530722":"永胜县","530723":"华坪县","530724":"宁蒗彝族自治县"},"530800":{"530802":"思茅区","530821":"宁洱哈尼族彝族自治县","530822":"墨江哈尼族自治县","530823":"景东彝族自治县","530824":"景谷傣族彝族自治县","530825":"镇沅彝族哈尼族拉祜族自治县","530826":"江城哈尼族彝族自治县","530827":"孟连傣族拉祜族佤族自治县","530828":"澜沧拉祜族自治县","530829":"西盟佤族自治县"},"530900":{"530902":"临翔区","530921":"凤庆县","530922":"云县","530923":"永德县","530924":"镇康县","530925":"双江拉祜族佤族布朗族傣族自治县","530926":"耿马傣族佤族自治县","530927":"沧源佤族自治县"},"532300":{"532301":"楚雄市","532322":"双柏县","532323":"牟定县","532324":"南华县","532325":"姚安县","532326":"大姚县","532327":"永仁县","532328":"元谋县","532329":"武定县","532331":"禄丰县"},"532500":{"532501":"个旧市","532502":"开远市","532503":"蒙自市","532504":"弥勒市","532523":"屏边苗族自治县","532524":"建水县","532525":"石屏县","532527":"泸西县","532528":"元阳县","532529":"红河县","532530":"金平苗族瑶族傣族自治县","532531":"绿春县","532532":"河口瑶族自治县"},"532600":{"532601":"文山市","532622":"砚山县","532623":"西畴县","532624":"麻栗坡县","532625":"马关县","532626":"丘北县","532627":"广南县","532628":"富宁县"},"532800":{"532801":"景洪市","532822":"勐海县","532823":"勐腊县"},"532900":{"532901":"大理市","532922":"漾濞彝族自治县","532923":"祥云县","532924":"宾川县","532925":"弥渡县","532926":"南涧彝族自治县","532927":"巍山彝族回族自治县","532928":"永平县","532929":"云龙县","532930":"洱源县","532931":"剑川县","532932":"鹤庆县"},"533100":{"533102":"瑞丽市","533103":"芒市","533122":"梁河县","533123":"盈江县","533124":"陇川县"},"533300":{"533301":"泸水市","533323":"福贡县","533324":"贡山独龙族怒族自治县","533325":"兰坪白族普米族自治县"},"533400":{"533401":"香格里拉市","533422":"德钦县","533423":"维西傈僳族自治县"},"540000":{"540100":"拉萨市","540200":"日喀则市","540300":"昌都市","540400":"林芝市","540500":"山南市","542400":"那曲地区","542500":"阿里地区"},"540100":{"540102":"城关区","540103":"堆龙德庆区","540121":"林周县","540122":"当雄县","540123":"尼木县","540124":"曲水县","540126":"达孜县","540127":"墨竹工卡县"},"540200":{"540202":"桑珠孜区","540221":"南木林县","540222":"江孜县","540223":"定日县","540224":"萨迦县","540225":"拉孜县","540226":"昂仁县","540227":"谢通门县","540228":"白朗县","540229":"仁布县","540230":"康马县","540231":"定结县","540232":"仲巴县","540233":"亚东县","540234":"吉隆县","540235":"聂拉木县","540236":"萨嘎县","540237":"岗巴县"},"540300":{"540302":"卡若区","540321":"江达县","540322":"贡觉县","540323":"类乌齐县","540324":"丁青县","540325":"察雅县","540326":"八宿县","540327":"左贡县","540328":"芒康县","540329":"洛隆县","540330":"边坝县"},"540400":{"540402":"巴宜区","540421":"工布江达县","540422":"米林县","540423":"墨脱县","540424":"波密县","540425":"察隅县","540426":"朗县"},"540500":{"540502":"乃东区","540521":"扎囊县","540522":"贡嘎县","540523":"桑日县","540524":"琼结县","540525":"曲松县","540526":"措美县","540527":"洛扎县","540528":"加查县","540529":"隆子县","540530":"错那县","540531":"浪卡子县"},"542400":{"542421":"那曲县","542422":"嘉黎县","542423":"比如县","542424":"聂荣县","542425":"安多县","542426":"申扎县","542427":"索县","542428":"班戈县","542429":"巴青县","542430":"尼玛县","542431":"双湖县"},"542500":{"542521":"普兰县","542522":"札达县","542523":"噶尔县","542524":"日土县","542525":"革吉县","542526":"改则县","542527":"措勤县"},"610000":{"610100":"西安市","610200":"铜川市","610300":"宝鸡市","610400":"咸阳市","610500":"渭南市","610600":"延安市","610700":"汉中市","610800":"榆林市","610900":"安康市","611000":"商洛市"},"610100":{"610102":"新城区","610103":"碑林区","610104":"莲湖区","610111":"灞桥区","610112":"未央区","610113":"雁塔区","610114":"阎良区","610115":"临潼区","610116":"长安区","610117":"高陵区","610122":"蓝田县","610124":"周至县","610125":"户县"},"610200":{"610202":"王益区","610203":"印台区","610204":"耀州区","610222":"宜君县"},"610300":{"610302":"渭滨区","610303":"金台区","610304":"陈仓区","610322":"凤翔县","610323":"岐山县","610324":"扶风县","610326":"眉县","610327":"陇县","610328":"千阳县","610329":"麟游县","610330":"凤县","610331":"太白县"},"610400":{"610402":"秦都区","610403":"杨陵区","610404":"渭城区","610422":"三原县","610423":"泾阳县","610424":"乾县","610425":"礼泉县","610426":"永寿县","610427":"彬县","610428":"长武县","610429":"旬邑县","610430":"淳化县","610431":"武功县","610481":"兴平市"},"610500":{"610502":"临渭区","610503":"华州区","610522":"潼关县","610523":"大荔县","610524":"合阳县","610525":"澄城县","610526":"蒲城县","610527":"白水县","610528":"富平县","610581":"韩城市","610582":"华阴市"},"610600":{"610602":"宝塔区","610603":"安塞区","610621":"延长县","610622":"延川县","610623":"子长县","610625":"志丹县","610626":"吴起县","610627":"甘泉县","610628":"富县","610629":"洛川县","610630":"宜川县","610631":"黄龙县","610632":"黄陵县"},"610700":{"610702":"汉台区","610721":"南郑县","610722":"城固县","610723":"洋县","610724":"西乡县","610725":"勉县","610726":"宁强县","610727":"略阳县","610728":"镇巴县","610729":"留坝县","610730":"佛坪县"},"610800":{"610802":"榆阳区","610803":"横山区","610821":"神木县","610822":"府谷县","610824":"靖边县","610825":"定边县","610826":"绥德县","610827":"米脂县","610828":"佳县","610829":"吴堡县","610830":"清涧县","610831":"子洲县"},"610900":{"610902":"汉滨区","610921":"汉阴县","610922":"石泉县","610923":"宁陕县","610924":"紫阳县","610925":"岚皋县","610926":"平利县","610927":"镇坪县","610928":"旬阳县","610929":"白河县"},"611000":{"611002":"商州区","611021":"洛南县","611022":"丹凤县","611023":"商南县","611024":"山阳县","611025":"镇安县","611026":"柞水县"},"620000":{"620100":"兰州市","620200":"嘉峪关市","620300":"金昌市","620400":"白银市","620500":"天水市","620600":"武威市","620700":"张掖市","620800":"平凉市","620900":"酒泉市","621000":"庆阳市","621100":"定西市","621200":"陇南市","622900":"临夏回族自治州","623000":"甘南藏族自治州"},"620100":{"620102":"城关区","620103":"七里河区","620104":"西固区","620105":"安宁区","620111":"红古区","620121":"永登县","620122":"皋兰县","620123":"榆中县"},"620200":{},"620300":{"620302":"金川区","620321":"永昌县"},"620400":{"620402":"白银区","620403":"平川区","620421":"靖远县","620422":"会宁县","620423":"景泰县"},"620500":{"620502":"秦州区","620503":"麦积区","620521":"清水县","620522":"秦安县","620523":"甘谷县","620524":"武山县","620525":"张家川回族自治县"},"620600":{"620602":"凉州区","620621":"民勤县","620622":"古浪县","620623":"天祝藏族自治县"},"620700":{"620702":"甘州区","620721":"肃南裕固族自治县","620722":"民乐县","620723":"临泽县","620724":"高台县","620725":"山丹县"},"620800":{"620802":"崆峒区","620821":"泾川县","620822":"灵台县","620823":"崇信县","620824":"华亭县","620825":"庄浪县","620826":"静宁县"},"620900":{"620902":"肃州区","620921":"金塔县","620922":"瓜州县","620923":"肃北蒙古族自治县","620924":"阿克塞哈萨克族自治县","620981":"玉门市","620982":"敦煌市"},"621000":{"621002":"西峰区","621021":"庆城县","621022":"环县","621023":"华池县","621024":"合水县","621025":"正宁县","621026":"宁县","621027":"镇原县"},"621100":{"621102":"安定区","621121":"通渭县","621122":"陇西县","621123":"渭源县","621124":"临洮县","621125":"漳县","621126":"岷县"},"621200":{"621202":"武都区","621221":"成县","621222":"文县","621223":"宕昌县","621224":"康县","621225":"西和县","621226":"礼县","621227":"徽县","621228":"两当县"},"622900":{"622901":"临夏市","622921":"临夏县","622922":"康乐县","622923":"永靖县","622924":"广河县","622925":"和政县","622926":"东乡族自治县","622927":"积石山保安族东乡族撒拉族自治县"},"623000":{"623001":"合作市","623021":"临潭县","623022":"卓尼县","623023":"舟曲县","623024":"迭部县","623025":"玛曲县","623026":"碌曲县","623027":"夏河县"},"630000":{"630100":"西宁市","630200":"海东市","632200":"海北藏族自治州","632300":"黄南藏族自治州","632500":"海南藏族自治州","632600":"果洛藏族自治州","632700":"玉树藏族自治州","632800":"海西蒙古族藏族自治州"},"630100":{"630102":"城东区","630103":"城中区","630104":"城西区","630105":"城北区","630121":"大通回族土族自治县","630122":"湟中县","630123":"湟源县"},"630200":{"630202":"乐都区","630203":"平安区","630222":"民和回族土族自治县","630223":"互助土族自治县","630224":"化隆回族自治县","630225":"循化撒拉族自治县"},"632200":{"632221":"门源回族自治县","632222":"祁连县","632223":"海晏县","632224":"刚察县"},"632300":{"632321":"同仁县","632322":"尖扎县","632323":"泽库县","632324":"河南蒙古族自治县"},"632500":{"632521":"共和县","632522":"同德县","632523":"贵德县","632524":"兴海县","632525":"贵南县"},"632600":{"632621":"玛沁县","632622":"班玛县","632623":"甘德县","632624":"达日县","632625":"久治县","632626":"玛多县"},"632700":{"632701":"玉树市","632722":"杂多县","632723":"称多县","632724":"治多县","632725":"囊谦县","632726":"曲麻莱县"},"632800":{"632801":"格尔木市","632802":"德令哈市","632821":"乌兰县","632822":"都兰县","632823":"天峻县"},"640000":{"640100":"银川市","640200":"石嘴山市","640300":"吴忠市","640400":"固原市","640500":"中卫市"},"640100":{"640104":"兴庆区","640105":"西夏区","640106":"金凤区","640121":"永宁县","640122":"贺兰县","640181":"灵武市"},"640200":{"640202":"大武口区","640205":"惠农区","640221":"平罗县"},"640300":{"640302":"利通区","640303":"红寺堡区","640323":"盐池县","640324":"同心县","640381":"青铜峡市"},"640400":{"640402":"原州区","640422":"西吉县","640423":"隆德县","640424":"泾源县","640425":"彭阳县"},"640500":{"640502":"沙坡头区","640521":"中宁县","640522":"海原县"},"650000":{"650100":"乌鲁木齐市","650200":"克拉玛依市","650400":"吐鲁番市","650500":"哈密市","652300":"昌吉回族自治州","652700":"博尔塔拉蒙古自治州","652800":"巴音郭楞蒙古自治州","652900":"阿克苏地区","653000":"克孜勒苏柯尔克孜自治州","653100":"喀什地区","653200":"和田地区","654000":"伊犁哈萨克自治州","654200":"塔城地区","654300":"阿勒泰地区","659001":"石河子市","659002":"阿拉尔市","659003":"图木舒克市","659004":"五家渠市","659006":"铁门关市"},"650100":{"650102":"天山区","650103":"沙依巴克区","650104":"新市区","650105":"水磨沟区","650106":"头屯河区","650107":"达坂城区","650109":"米东区","650121":"乌鲁木齐县"},"650200":{"650202":"独山子区","650203":"克拉玛依区","650204":"白碱滩区","650205":"乌尔禾区"},"650400":{"650402":"高昌区","650421":"鄯善县","650422":"托克逊县"},"650500":{"650502":"伊州区","650521":"巴里坤哈萨克自治县","650522":"伊吾县"},"652300":{"652301":"昌吉市","652302":"阜康市","652323":"呼图壁县","652324":"玛纳斯县","652325":"奇台县","652327":"吉木萨尔县","652328":"木垒哈萨克自治县"},"652700":{"652701":"博乐市","652702":"阿拉山口市","652722":"精河县","652723":"温泉县"},"652800":{"652801":"库尔勒市","652822":"轮台县","652823":"尉犁县","652824":"若羌县","652825":"且末县","652826":"焉耆回族自治县","652827":"和静县","652828":"和硕县","652829":"博湖县"},"652900":{"652901":"阿克苏市","652922":"温宿县","652923":"库车县","652924":"沙雅县","652925":"新和县","652926":"拜城县","652927":"乌什县","652928":"阿瓦提县","652929":"柯坪县"},"653000":{"653001":"阿图什市","653022":"阿克陶县","653023":"阿合奇县","653024":"乌恰县"},"653100":{"653101":"喀什市","653121":"疏附县","653122":"疏勒县","653123":"英吉沙县","653124":"泽普县","653125":"莎车县","653126":"叶城县","653127":"麦盖提县","653128":"岳普湖县","653129":"伽师县","653130":"巴楚县","653131":"塔什库尔干塔吉克自治县"},"653200":{"653201":"和田市","653221":"和田县","653222":"墨玉县","653223":"皮山县","653224":"洛浦县","653225":"策勒县","653226":"于田县","653227":"民丰县"},"654000":{"654002":"伊宁市","654003":"奎屯市","654004":"霍尔果斯市","654021":"伊宁县","654022":"察布查尔锡伯自治县","654023":"霍城县","654024":"巩留县","654025":"新源县","654026":"昭苏县","654027":"特克斯县","654028":"尼勒克县"},"654200":{"654201":"塔城市","654202":"乌苏市","654221":"额敏县","654223":"沙湾县","654224":"托里县","654225":"裕民县","654226":"和布克赛尔蒙古自治县"},"654300":{"654301":"阿勒泰市","654321":"布尔津县","654322":"富蕴县","654323":"福海县","654324":"哈巴河县","654325":"青河县","654326":"吉木乃县"},"659001":{"6590011":"北泉镇","6590015":"兵团一五二团","659001001":"新城街道","659001002":"向阳街道","659001003":"红山街道","659001004":"老街街道","659001005":"东城街道","659001101":"石河子镇"},"659002":{"6590022":"托喀依乡","6590025":"兵团七团","65900252":"兵团三团","659002001":"金银川路街道","659002002":"幸福路街道","659002003":"青松路街道","659002004":"南口街道","659002402":"工业园区","659002501":"兵团八团","659002503":"兵团十团","659002504":"兵团十一团","659002505":"兵团十二团","659002506":"兵团十三团","659002507":"兵团十四团","659002509":"兵团十六团","659002511":"兵团第一师水利水电工程处","659002512":"兵团第一师塔里木灌区水利管理处","659002513":"阿拉尔农场","659002514":"兵团第一师幸福农场","659002515":"中心监狱","659002516":"兵团一团","659002517":"兵团农一师沙井子水利管理处","659002518":"西工业园区管理委员会","659002519":"兵团二团"},"659003":{"65900351":"兵团五十团","659003001":"齐干却勒街道","659003002":"前海街道","659003003":"永安坝街道","659003504":"兵团四十四团","659003509":"兵团四十九团","659003511":"兵团五十一团","659003513":"兵团五十三团","659003514":"兵团图木舒克市喀拉拜勒镇"},"659004":{"6590045":"兵团一零一团","659004001":"军垦路街道","659004002":"青湖路街道","659004003":"人民路街道","659004501":"兵团一零二团","659004502":"兵团一零三团"}, + "659006":{"6590061":"博古其镇","659006101":"双丰镇"}, + "710000":{"710100":"台湾省"}, + "710100":{"710101":"金门","710102":"连江","710103":"苗栗","710104":"南投","710105":"澎湖","710106":"屏东","710107":"台东","710108":"台中","710109":"台南","710110":"台北","710111":"桃园","710112":"云林","710113":"新北","710114":"彰化","710115":"嘉义","710116":"新竹","710117":"花莲","710118":"宜兰","710119":"高雄","710120":"基隆"}, + "910000":{"810000":"香港特别行政区","820000":"澳门特别行政区"}, + "810000":{"810101":"中西区","810102":"东区","810103":"九龙城区","810104":"观塘区","810105":"深水埗区","810106":"湾仔区","810107":"黄大仙区","810108":"油尖旺区","810109":"离岛区","810110":"葵青区","810111":"北区","810112":"西贡区","810113":"沙田区","810114":"屯门区","810115":"大埔区","810116":"荃湾区","810117":"元朗区","810118":"香港","810119":"九龙","810120":"新界"}, + "820000":{"820101":"离岛","820102":"澳门半岛","820103":"凼仔","820104":"路凼城","820105":"路环"} +} \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-tools/pom.xml b/jero-boot-base/jero-boot-base-tools/pom.xml new file mode 100644 index 00000000..961d9291 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/pom.xml @@ -0,0 +1,37 @@ + + + com.jero.boot + jero-boot-base + 2.4.2 + + 4.0.0 + 公共模块 + jero-boot-base-tools + + + + + org.springframework.boot + spring-boot-starter-web + true + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + cn.hutool + hutool-all + + + + commons-beanutils + commons-beanutils + + + + \ No newline at end of file diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/annotation/RabbitComponent.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/annotation/RabbitComponent.java new file mode 100644 index 00000000..3f548065 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/annotation/RabbitComponent.java @@ -0,0 +1,23 @@ +package com.jero.common.annotation; + +import org.springframework.core.annotation.AliasFor; +import org.springframework.stereotype.Component; + +import java.lang.annotation.*; + +/** + * @Author:zyf + * @Date:2019-07-31 10:43 + * @Description: 消息队列初始化注解 + **/ +@Documented +@Inherited +@Target({ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +@Component +public @interface RabbitComponent { + @AliasFor( + annotation = Component.class + ) + String value(); +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java new file mode 100644 index 00000000..c26e5484 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/base/BaseMap.java @@ -0,0 +1,141 @@ +package com.jero.common.base; + + +import cn.hutool.core.util.ObjectUtil; + +import org.apache.commons.beanutils.ConvertUtils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * 自定义Map + */ +public class BaseMap extends HashMap { + + private static final long serialVersionUID = 1L; + + + public BaseMap() { + + } + + public BaseMap(Map map) { + this.putAll(map); + } + + + @Override + public BaseMap put(String key, Object value) { + super.put(key, Optional.ofNullable(value).orElse("")); + return this; + } + + public BaseMap add(String key, Object value) { + super.put(key, Optional.ofNullable(value).orElse("")); + return this; + } + + @SuppressWarnings("unchecked") + public T get(String key) { + Object obj = super.get(key); + if (ObjectUtil.isNotEmpty(obj)) { + return (T) obj; + } else { + return null; + } + } + + @SuppressWarnings("unchecked") + public Boolean getBoolean(String key) { + Object obj = super.get(key); + if (ObjectUtil.isNotEmpty(obj)) { + return Boolean.valueOf(obj.toString()); + } else { + return false; + } + } + + public Long getLong(String key) { + Object v = get(key); + if (ObjectUtil.isNotEmpty(v)) { + return new Long(v.toString()); + } + return null; + } + + public Long[] getLongs(String key) { + Object v = get(key); + if (ObjectUtil.isNotEmpty(v)) { + return (Long[]) v; + } + return null; + } + + public List getListLong(String key) { + List list = get(key); + if (ObjectUtil.isNotEmpty(list)) { + return list.stream().map(e -> new Long(e)).collect(Collectors.toList()); + } else { + return null; + } + } + + public Long[] getLongIds(String key) { + Object ids = get(key); + if (ObjectUtil.isNotEmpty(ids)) { + return (Long[]) ConvertUtils.convert(ids.toString().split(","), Long.class); + } else { + return null; + } + } + + + public Integer getInt(String key, Integer def) { + Object v = get(key); + if (ObjectUtil.isNotEmpty(v)) { + return Integer.parseInt(v.toString()); + } else { + return def; + } + } + + public Integer getInt(String key) { + Object v = get(key); + if (ObjectUtil.isNotEmpty(v)) { + return Integer.parseInt(v.toString()); + } else { + return 0; + } + } + + public BigDecimal getBigDecimal(String key) { + Object v = get(key); + if (ObjectUtil.isNotEmpty(v)) { + return new BigDecimal(v.toString()); + } + return new BigDecimal("0"); + } + + + @SuppressWarnings("unchecked") + public T get(String key, T def) { + Object obj = super.get(key); + if (ObjectUtil.isEmpty(obj)) { + return def; + } + return (T) obj; + } + + public static BaseMap toBaseMap(Map obj) { + BaseMap map = new BaseMap(); + map.putAll(obj); + return map; + } + + +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java new file mode 100644 index 00000000..344cf6c6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/config/CommonConfig.java @@ -0,0 +1,22 @@ +package com.jero.common.config; + +import com.jero.common.util.SpringContextHolder; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class CommonConfig { + + /** + * Spring上下文工具配置 + * + * @return + */ + @Bean + @ConditionalOnMissingBean(SpringContextHolder.class) + public SpringContextHolder springContextHolder() { + SpringContextHolder holder = new SpringContextHolder(); + return holder; + } +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java new file mode 100644 index 00000000..b3a38066 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/constant/GlobalConstants.java @@ -0,0 +1,14 @@ +package com.jero.common.constant; + +public class GlobalConstants { + + /** + * 业务处理器beanName传递参数 + */ + public static final String HANDLER_NAME = "handlerName"; + + /** + * redis消息通道名称 + */ + public static final String REDIS_TOPIC_NAME="jero_redis_topic"; +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/clent/JeroRedisClient.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/clent/JeroRedisClient.java new file mode 100644 index 00000000..c88ab73c --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/clent/JeroRedisClient.java @@ -0,0 +1,43 @@ +package com.jero.common.modules.redis.clent; + +import com.jero.common.base.BaseMap; +import com.jero.common.constant.GlobalConstants; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.RedisTemplate; + +import javax.annotation.Resource; + +/** + * redis客户端 + */ +@Configuration +public class JeroRedisClient { + + @Resource(name = "starterRedisTemplate") + private RedisTemplate redisTemplate; + + + /** + * 发送消息 + * + * @param handlerName + * @param params + */ + public void sendMessage(String handlerName, BaseMap params) { + params.put(GlobalConstants.HANDLER_NAME, handlerName); + redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params); + } + + + /** + * 根据key查询缓存 + * + * @param key 键 + * @return 值 + */ + public T get(String key) { + return key == null ? null : (T) redisTemplate.opsForValue().get(key); + } + + +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java new file mode 100644 index 00000000..9972c92c --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/config/RedisConfiguration.java @@ -0,0 +1,93 @@ +package com.jero.common.modules.redis.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jero.common.modules.redis.prop.JeroRedisProperties; +import com.jero.common.modules.redis.service.RedisReceiver; +import com.jero.common.constant.GlobalConstants; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.listener.ChannelTopic; +import org.springframework.data.redis.listener.RedisMessageListenerContainer; +import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; +import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis配置 + * + */ +@Slf4j +@Configuration +@EnableConfigurationProperties(JeroRedisProperties.class) +@ConditionalOnProperty(value = "spring.redis.enabled", havingValue = "true", matchIfMissing = true) +public class RedisConfiguration { + + + /** + * RedisTemplate配置 + * + * @param lettuceConnectionFactory + * @return + */ + @Bean("starterRedisTemplate") + public RedisTemplate starterRedisTemplate(LettuceConnectionFactory lettuceConnectionFactory) { + log.info(" --- redis config init --- "); + // 设置序列化 + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper om = new ObjectMapper(); + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(om); + // 配置redisTemplate + RedisTemplate redisTemplate = new RedisTemplate(); + redisTemplate.setConnectionFactory(lettuceConnectionFactory); + RedisSerializer stringSerializer = new StringRedisSerializer(); + redisTemplate.setKeySerializer(stringSerializer);// key序列化 + redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);// value序列化 + redisTemplate.setHashKeySerializer(stringSerializer);// Hash key序列化 + redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);// Hash value序列化 + redisTemplate.afterPropertiesSet(); + return redisTemplate; + } + + /** + * redis 监听配置 + * + * @param redisConnectionFactory redis 配置 + * @return + */ + @Bean + public RedisMessageListenerContainer redisContainer(RedisConnectionFactory redisConnectionFactory, RedisReceiver redisReceiver, MessageListenerAdapter commonListenerAdapter) { + RedisMessageListenerContainer container = new RedisMessageListenerContainer(); + container.setConnectionFactory(redisConnectionFactory); + container.addMessageListener(commonListenerAdapter, new ChannelTopic(GlobalConstants.REDIS_TOPIC_NAME)); + return container; + } + + @Bean + MessageListenerAdapter commonListenerAdapter(RedisReceiver redisReceiver) { + MessageListenerAdapter messageListenerAdapter = new MessageListenerAdapter(redisReceiver, "onMessage"); + messageListenerAdapter.setSerializer(jacksonSerializer()); + return messageListenerAdapter; + } + + private Jackson2JsonRedisSerializer jacksonSerializer() { + Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jackson2JsonRedisSerializer.setObjectMapper(objectMapper); + return jackson2JsonRedisSerializer; + } + + +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/listener/JeroRedisListerer.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/listener/JeroRedisListerer.java new file mode 100644 index 00000000..7146f70c --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/listener/JeroRedisListerer.java @@ -0,0 +1,12 @@ +package com.jero.common.modules.redis.listener; + +import com.jero.common.base.BaseMap; + +/** + * 自定义消息监听 + */ +public interface JeroRedisListerer { + + void onMessage(BaseMap message); + +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java new file mode 100644 index 00000000..896c7648 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/prop/JeroRedisProperties.java @@ -0,0 +1,24 @@ +package com.jero.common.modules.redis.prop; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * redis配置 + * + * @author pangu + */ +@Getter +@Setter +@ConfigurationProperties(JeroRedisProperties.PREFIX) +public class JeroRedisProperties { + /** + * 前缀 + */ + public static final String PREFIX = "spring.redis"; + /** + * 是否开启Lettuce + */ + private Boolean enable = true; +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java new file mode 100644 index 00000000..9ddb04f6 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/modules/redis/service/RedisReceiver.java @@ -0,0 +1,30 @@ +package com.jero.common.modules.redis.service; + + +import cn.hutool.core.util.ObjectUtil; +import com.jero.common.base.BaseMap; +import com.jero.common.constant.GlobalConstants; +import com.jero.common.modules.redis.listener.JeroRedisListerer; +import com.jero.common.util.SpringContextHolder; +import lombok.Data; +import org.springframework.stereotype.Component; + +@Component +@Data +public class RedisReceiver { + + + /** + * 接受消息并调用业务逻辑处理器 + * + * @param params + */ + public void onMessage(BaseMap params) { + Object handlerName = params.get(GlobalConstants.HANDLER_NAME); + JeroRedisListerer messageListener = SpringContextHolder.getHandler(handlerName.toString(), JeroRedisListerer.class); + if (ObjectUtil.isNotEmpty(messageListener)) { + messageListener.onMessage(params); + } + } + +} diff --git a/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java new file mode 100644 index 00000000..2b5e7637 --- /dev/null +++ b/jero-boot-base/jero-boot-base-tools/src/main/java/com/jero/common/util/SpringContextHolder.java @@ -0,0 +1,81 @@ + +package com.jero.common.util; + +import cn.hutool.core.util.ObjectUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; + +/** + * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext. + * + * @author zyf + */ +@Slf4j +public class SpringContextHolder implements ApplicationContextAware { + private static ApplicationContext applicationContext; + + /** + * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量. + */ + @Override + public void setApplicationContext(ApplicationContext applicationContext) { + // NOSONAR + SpringContextHolder.applicationContext = applicationContext; + } + + /** + * 取得存储在静态变量中的ApplicationContext. + */ + public static ApplicationContext getApplicationContext() { + checkApplicationContext(); + return applicationContext; + } + + /** + * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(String name) { + checkApplicationContext(); + return (T) applicationContext.getBean(name); + } + + /** + * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getHandler(String name, Class cls) { + T t = null; + if (ObjectUtil.isNotEmpty(name)) { + checkApplicationContext(); + try { + t = applicationContext.getBean(name, cls); + } catch (Exception e) { + log.error("####################" + name + "未定义"); + } + } + return t; + } + + + /** + * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型. + */ + public static T getBean(Class clazz) { + checkApplicationContext(); + return applicationContext.getBean(clazz); + } + + /** + * 清除applicationContext静态变量. + */ + public static void cleanApplicationContext() { + applicationContext = null; + } + + private static void checkApplicationContext() { + if (applicationContext == null) { + throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder"); + } + } + +} \ No newline at end of file diff --git a/jero-boot-base/pom.xml b/jero-boot-base/pom.xml new file mode 100644 index 00000000..05e93b07 --- /dev/null +++ b/jero-boot-base/pom.xml @@ -0,0 +1,21 @@ + + + + com.jero.boot + jero-boot + 2.4.2 + + 4.0.0 + + jero-boot-base + pom + + + jero-boot-base-api + jero-boot-base-core + jero-boot-base-tools + + + \ No newline at end of file diff --git a/jero-boot-module-demo/pom.xml b/jero-boot-module-demo/pom.xml new file mode 100644 index 00000000..935a02e8 --- /dev/null +++ b/jero-boot-module-demo/pom.xml @@ -0,0 +1,32 @@ + + + + com.jero.boot + jero-boot + 2.4.2 + + 4.0.0 + + jero-boot-module-demo + + + + com.jero.boot + jero-boot-base-api + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/.gitattributes b/jero-boot-module-system/.gitattributes new file mode 100644 index 00000000..d479839e --- /dev/null +++ b/jero-boot-module-system/.gitattributes @@ -0,0 +1,4 @@ +*.js linguist-language=Java +*.css linguist-language=Java +*.html linguist-language=Java +*.vue linguist-language=Java diff --git a/jero-boot-module-system/Dockerfile b/jero-boot-module-system/Dockerfile new file mode 100644 index 00000000..28087e93 --- /dev/null +++ b/jero-boot-module-system/Dockerfile @@ -0,0 +1,15 @@ +FROM anapsix/alpine-java:8_server-jre_unlimited + +MAINTAINER test@163.com + +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime + +RUN mkdir -p /jero-boot + +WORKDIR /jero-boot + +EXPOSE 8080 + +ADD ./target/jero-boot-module-system-2.4.2.jar ./ + +CMD sleep 60;java -Djava.security.egd=file:/dev/./urandom -jar jero-boot-module-system-2.4.2.jar \ No newline at end of file diff --git a/jero-boot-module-system/pom.xml b/jero-boot-module-system/pom.xml new file mode 100644 index 00000000..71c24b6a --- /dev/null +++ b/jero-boot-module-system/pom.xml @@ -0,0 +1,56 @@ + + + com.jero.boot + jero-boot + 2.4.2 + + 4.0.0 + + jero-boot-module-system + + + + aliyun + aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + false + + + + jeecg + jeecg Repository + http://maven.jeecg.org/nexus/content/repositories/jeecg + + false + + + + + + + com.jero.boot + jero-boot-base-api + + + + + com.jimureport + spring-boot-starter-jimureport + 1.2.0 + + + autopoi-web + org.jeecgframework + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/config/init/SystemInitListener.java b/jero-boot-module-system/src/main/java/com/jero/config/init/SystemInitListener.java new file mode 100644 index 00000000..1eef933a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/config/init/SystemInitListener.java @@ -0,0 +1,41 @@ +package com.jero.config.init; + +import lombok.extern.slf4j.Slf4j; +import com.jero.common.constant.CacheConstant; +import com.jero.config.JeroCloudCondition; +import com.jero.modules.system.service.ISysGatewayRouteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.context.annotation.Conditional; +import org.springframework.core.Ordered; +import org.springframework.stereotype.Component; + +/** + * @desc: 启动程序,初始化路由配置 + * @author: flyme + */ +@Slf4j +@Component +@Conditional(JeroCloudCondition.class) +public class SystemInitListener implements ApplicationListener, Ordered { + + + @Autowired + private ISysGatewayRouteService sysGatewayRouteService; + + @Override + public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { + + log.info(" 服务已启动,初始化路由配置 ###################"); + if (applicationReadyEvent.getApplicationContext().getDisplayName().indexOf("AnnotationConfigServletWebServerApplicationContext") > -1) { + sysGatewayRouteService.addRoute2Redis(CacheConstant.GATEWAY_ROUTES); + } + + } + + @Override + public int getOrder() { + return 1; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/config/init/TomcatFactoryConfig.java b/jero-boot-module-system/src/main/java/com/jero/config/init/TomcatFactoryConfig.java new file mode 100644 index 00000000..8ca4f663 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/config/init/TomcatFactoryConfig.java @@ -0,0 +1,33 @@ +package com.jero.config.init; + +import org.apache.catalina.Context; +import org.apache.tomcat.util.scan.StandardJarScanner; +import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Description: TomcatFactoryConfig + * @author: scott + * @date: 2021年01月25日 11:40 + */ +@Configuration +public class TomcatFactoryConfig { + /** + * tomcat-embed-jasper引用后提示jar找不到的问题 + */ + @Bean + public TomcatServletWebServerFactory tomcatFactory() { + TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() { + @Override + protected void postProcessContext(Context context) { + ((StandardJarScanner) context.getJarScanner()).setScanManifest(false); + } + }; + factory.addConnectorCustomizers(connector -> { + connector.setProperty("relaxedPathChars", "[]{}"); + connector.setProperty("relaxedQueryChars", "[]{}"); + }); + return factory; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java b/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java new file mode 100644 index 00000000..b483d386 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/config/jimureport/JimuReportTokenService.java @@ -0,0 +1,41 @@ +package com.jero.config.jimureport; + +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.TokenUtils; +import org.jeecg.modules.jmreport.api.JmReportTokenServiceI; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** +* 自定义积木报表鉴权实现类(如果不进行自定义,则所有请求不做权限控制) + * 1.自定义获取登录token + * 2.自定义获取登录用户 +*/ +@Component +class JimuReportTokenService implements JmReportTokenServiceI { + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + @Lazy + private RedisUtil redisUtil; + + @Override + public String getToken(HttpServletRequest request) { + return TokenUtils.getTokenByRequest(request); + } + + @Override + public String getUsername(String token) { + return JwtUtil.getUsername(token); + } + + @Override + public Boolean verifyToken(String token) { + return TokenUtils.verifyToken(token, sysBaseAPI, redisUtil); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java b/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java new file mode 100644 index 00000000..0a69d5fd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/api/controller/SystemAPIController.java @@ -0,0 +1,553 @@ +package com.jero.modules.api.controller; + +import cn.hutool.db.Page; +import com.alibaba.fastjson.JSONObject; +import com.jero.common.api.dto.OnlineAuthDTO; +import com.jero.common.api.dto.message.*; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.vo.*; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; +import java.util.List; +import java.util.Set; + + +/** + * 服务化 system模块 对外接口请求类 + */ +@RestController +@RequestMapping("/sys/api") +public class SystemAPIController { + + @Autowired + private ISysBaseAPI sysBaseAPI; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysDepartService sysDepartService; + /** + * 发送系统消息 + * @param message 使用构造器赋值参数 如果不设置category(消息类型)则默认为2 发送系统消息 + */ + @PostMapping("/sendSysAnnouncement") + public void sendSysAnnouncement(@RequestBody MessageDTO message){ + sysBaseAPI.sendSysAnnouncement(message); + } + + /** + * 发送消息 附带业务参数 + * @param message 使用构造器赋值参数 + */ + @PostMapping("/sendBusAnnouncement") + public void sendBusAnnouncement(@RequestBody BusMessageDTO message){ + sysBaseAPI.sendBusAnnouncement(message); + } + + /** + * 通过模板发送消息 + * @param message 使用构造器赋值参数 + */ + @PostMapping("/sendTemplateAnnouncement") + public void sendTemplateAnnouncement(@RequestBody TemplateMessageDTO message){ + sysBaseAPI.sendTemplateAnnouncement(message); + } + + /** + * 通过模板发送消息 附带业务参数 + * @param message 使用构造器赋值参数 + */ + @PostMapping("/sendBusTemplateAnnouncement") + public void sendBusTemplateAnnouncement(@RequestBody BusTemplateMessageDTO message){ + sysBaseAPI.sendBusTemplateAnnouncement(message); + } + + /** + * 通过消息中心模板,生成推送内容 + * @param templateDTO 使用构造器赋值参数 + * @return + */ + @PostMapping("/parseTemplateByCode") + public String parseTemplateByCode(@RequestBody TemplateDTO templateDTO){ + return sysBaseAPI.parseTemplateByCode(templateDTO); + } + + /** + * 根据业务类型busType及业务busId修改消息已读 + */ + @GetMapping("/updateSysAnnounReadFlag") + public void updateSysAnnounReadFlag(@RequestParam("busType") String busType, @RequestParam("busId")String busId){ + sysBaseAPI.updateSysAnnounReadFlag(busType, busId); + } + + /** + * 根据用户账号查询用户信息 + * @param username + * @return + */ + @GetMapping("/getUserByName") + public LoginUser getUserByName(@RequestParam("username") String username){ + return sysBaseAPI.getUserByName(username); + } + + /** + * 根据用户id查询用户信息 + * @param id + * @return + */ + @GetMapping("/getUserById") + LoginUser getUserById(@RequestParam("id") String id){ + return sysBaseAPI.getUserById(id); + } + + /** + * 通过用户账号查询角色集合 + * @param username + * @return + */ + @GetMapping("/getRolesByUsername") + List getRolesByUsername(@RequestParam("username") String username){ + return sysBaseAPI.getRolesByUsername(username); + } + + /** + * 通过用户账号查询部门集合 + * @param username + * @return 部门 id + */ + @GetMapping("/getDepartIdsByUsername") + List getDepartIdsByUsername(@RequestParam("username") String username){ + return sysBaseAPI.getDepartIdsByUsername(username); + } + + /** + * 通过用户账号查询部门 name + * @param username + * @return 部门 name + */ + @GetMapping("/getDepartNamesByUsername") + List getDepartNamesByUsername(@RequestParam("username") String username){ + return sysBaseAPI.getDepartNamesByUsername(username); + } + + + /** + * 获取数据字典 + * @param code + * @return + */ + @GetMapping("/queryDictItemsByCode") + List queryDictItemsByCode(@RequestParam("code") String code){ + return sysBaseAPI.queryDictItemsByCode(code); + } + + /** 查询所有的父级字典,按照create_time排序 */ + @GetMapping("/queryAllDict") + List queryAllDict(){ + return sysBaseAPI.queryAllDict(); + } + + /** + * 查询所有分类字典 + * @return + */ + @GetMapping("/queryAllDSysCategory") + List queryAllDSysCategory(){ + return sysBaseAPI.queryAllDSysCategory(); + } + + /** + * 获取表数据字典 + * @param table + * @param text + * @param code + * @return + */ + @GetMapping("/queryTableDictItemsByCode") + List queryTableDictItemsByCode(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code){ + return sysBaseAPI.queryTableDictItemsByCode(table, text, code); + } + + /** + * 查询所有部门 作为字典信息 id -->value,departName -->text + * @return + */ + @GetMapping("/queryAllDepartBackDictModel") + List queryAllDepartBackDictModel(){ + return sysBaseAPI.queryAllDepartBackDictModel(); + } + + + /** + * 查询表字典 支持过滤数据 + * @param table + * @param text + * @param code + * @param filterSql + * @return + */ + @GetMapping("/queryFilterTableDictInfo") + List queryFilterTableDictInfo(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("filterSql") String filterSql){ + return sysBaseAPI.queryFilterTableDictInfo(table, text, code, filterSql); + } + + /** + * 查询指定table的 text code 获取字典,包含text和value + * @param table + * @param text + * @param code + * @param keyArray + * @return + */ + @Deprecated + @GetMapping("/queryTableDictByKeys") + public List queryTableDictByKeys(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("keyArray") String[] keyArray){ + return sysBaseAPI.queryTableDictByKeys(table, text, code, keyArray); + } + + /** + * 获取所有角色 带参 + * roleIds 默认选中角色 + * @return + */ + @GetMapping("/queryAllRole") + public List queryAllRole(@RequestParam(name = "roleIds",required = false)String[] roleIds){ + if(roleIds==null || roleIds.length==0){ + return sysBaseAPI.queryAllRole(); + }else{ + return sysBaseAPI.queryAllRole(roleIds); + } + } + + /** + * 通过用户账号查询角色Id集合 + * @param username + * @return + */ + @GetMapping("/getRoleIdsByUsername") + public List getRoleIdsByUsername(@RequestParam("username")String username){ + return sysBaseAPI.getRoleIdsByUsername(username); + } + + /** + * 通过部门编号查询部门id + * @param orgCode + * @return + */ + @GetMapping("/getDepartIdsByOrgCode") + public String getDepartIdsByOrgCode(@RequestParam("orgCode")String orgCode){ + return sysBaseAPI.getDepartIdsByOrgCode(orgCode); + } + + /** + * 查询所有部门 + * @return + */ + @GetMapping("/getAllSysDepart") + public List getAllSysDepart(){ + return sysBaseAPI.getAllSysDepart(); + } + + /** + * 根据 id 查询数据库中存储的 DynamicDataSourceModel + * + * @param dbSourceId + * @return + */ + @GetMapping("/getDynamicDbSourceById") + DynamicDataSourceModel getDynamicDbSourceById(@RequestParam("dbSourceId")String dbSourceId){ + return sysBaseAPI.getDynamicDbSourceById(dbSourceId); + } + + + + /** + * 根据部门Id获取部门负责人 + * @param deptId + * @return + */ + @GetMapping("/getDeptHeadByDepId") + public List getDeptHeadByDepId(@RequestParam("deptId") String deptId){ + return sysBaseAPI.getDeptHeadByDepId(deptId); + } + + /** + * 查找父级部门 + * @param departId + * @return + */ + @GetMapping("/getParentDepartId") + public DictModel getParentDepartId(@RequestParam("departId")String departId){ + return sysBaseAPI.getParentDepartId(departId); + } + + /** + * 根据 code 查询数据库中存储的 DynamicDataSourceModel + * + * @param dbSourceCode + * @return + */ + @GetMapping("/getDynamicDbSourceByCode") + public DynamicDataSourceModel getDynamicDbSourceByCode(@RequestParam("dbSourceCode") String dbSourceCode){ + return sysBaseAPI.getDynamicDbSourceByCode(dbSourceCode); + } + + /** + * 给指定用户发消息 + * @param userIds + * @param cmd + */ + @GetMapping("/sendWebSocketMsg") + public void sendWebSocketMsg(String[] userIds, String cmd){ + sysBaseAPI.sendWebSocketMsg(userIds, cmd); + } + + + /** + * 根据id获取所有参与用户 + * userIds + * @return + */ + @GetMapping("/queryAllUserByIds") + public List queryAllUserByIds(@RequestParam("userIds") String[] userIds){ + return sysBaseAPI.queryAllUserByIds(userIds); + } + + /** + * 查询所有用户 返回ComboModel + * @return + */ + @GetMapping("/queryAllUserBackCombo") + public List queryAllUserBackCombo(){ + return sysBaseAPI.queryAllUserBackCombo(); + } + + /** + * 分页查询用户 返回JSONObject + * @return + */ + @GetMapping("/queryAllUser") + public JSONObject queryAllUser(@RequestParam(name="userIds",required=false)String userIds, @RequestParam(name="pageNo",required=false) Integer pageNo,@RequestParam(name="pageSize",required=false) int pageSize){ + return sysBaseAPI.queryAllUser(userIds, pageNo, pageSize); + } + + + + /** + * 将会议签到信息推动到预览 + * userIds + * @return + * @param userId + */ + @GetMapping("/meetingSignWebsocket") + public void meetingSignWebsocket(@RequestParam("userId")String userId){ + sysBaseAPI.meetingSignWebsocket(userId); + } + + /** + * 根据name获取所有参与用户 + * userNames + * @return + */ + @GetMapping("/queryUserByNames") + public List queryUserByNames(@RequestParam("userNames")String[] userNames){ + return sysBaseAPI.queryUserByNames(userNames); + } + + /** + * 获取用户的角色集合 + * @param username + * @return + */ + @GetMapping("/getUserRoleSet") + public Set getUserRoleSet(@RequestParam("username")String username){ + return sysBaseAPI.getUserRoleSet(username); + } + + /** + * 获取用户的权限集合 + * @param username + * @return + */ + @GetMapping("/getUserPermissionSet") + public Set getUserPermissionSet(@RequestParam("username") String username){ + return sysBaseAPI.getUserPermissionSet(username); + } + + //----- + + /** + * 判断是否有online访问的权限 + * @param onlineAuthDTO + * @return + */ + @PostMapping("/hasOnlineAuth") + public boolean hasOnlineAuth(@RequestBody OnlineAuthDTO onlineAuthDTO){ + return sysBaseAPI.hasOnlineAuth(onlineAuthDTO); + } + + /** + * 查询用户角色信息 + * @param username + * @return + */ + @GetMapping("/queryUserRoles") + public Set queryUserRoles(@RequestParam("username") String username){ + return sysUserService.getUserRolesSet(username); + } + + + /** + * 查询用户权限信息 + * @param username + * @return + */ + @GetMapping("/queryUserAuths") + public Set queryUserAuths(@RequestParam("username") String username){ + return sysUserService.getUserPermissionsSet(username); + } + + /** + * 通过部门id获取部门全部信息 + */ + @GetMapping("/selectAllById") + public SysDepartModel selectAllById(@RequestParam("id") String id){ + return sysBaseAPI.selectAllById(id); + } + + /** + * 根据用户id查询用户所属公司下所有用户ids + * @param userId + * @return + */ + @GetMapping("/queryDeptUsersByUserId") + public List queryDeptUsersByUserId(@RequestParam("userId") String userId){ + return sysBaseAPI.queryDeptUsersByUserId(userId); + } + + + /** + * 查询数据权限 + * @return + */ + @GetMapping("/queryPermissionDataRule") + public List queryPermissionDataRule(@RequestParam("component") String component, @RequestParam("requestPath")String requestPath, @RequestParam("username") String username){ + return sysBaseAPI.queryPermissionDataRule(component, requestPath, username); + } + + /** + * 查询用户信息 + * @param username + * @return + */ + @GetMapping("/getCacheUser") + public SysUserCacheInfo getCacheUser(@RequestParam("username") String username){ + return sysBaseAPI.getCacheUser(username); + } + + /** + * 字典表的 翻译 + * @param table + * @param text + * @param code + * @param key + * @return + */ + @GetMapping("/translateDictFromTable") + public String translateDictFromTable(@RequestParam("table") String table, @RequestParam("text") String text, @RequestParam("code") String code, @RequestParam("key") String key){ + return sysBaseAPI.translateDictFromTable(table, text, code, key); + } + + /** + * 普通字典的翻译 + * @param code + * @param key + * @return + */ + @GetMapping("/translateDict") + public String translateDict(@RequestParam("code") String code, @RequestParam("key") String key){ + return sysBaseAPI.translateDict(code, key); + } + + + /** + * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * @param usernames + * @return + */ + @GetMapping("/queryUsersByUsernames") + List queryUsersByUsernames(String usernames){ + return this.sysBaseAPI.queryUsersByUsernames(usernames); + } + + /** + * 37根据多个用户id(逗号分隔),查询返回多个用户信息 + * @param usernames + * @return + */ + @GetMapping("/queryUsersByIds") + List queryUsersByIds(String ids){ + return this.sysBaseAPI.queryUsersByIds(ids); + } + + /** + * 38根据多个部门编码(逗号分隔),查询返回多个部门信息 + * @param orgCodes + * @return + */ + @GetMapping("/queryDepartsByOrgcodes") + List queryDepartsByOrgcodes(String orgCodes){ + return this.sysBaseAPI.queryDepartsByOrgcodes(orgCodes); + } + + /** + * 39根据多个部门ID(逗号分隔),查询返回多个部门信息 + * @param orgCodes + * @return + */ + @GetMapping("/queryDepartsByIds") + List queryDepartsByIds(String orgCodes){ + return this.sysBaseAPI.queryDepartsByIds(orgCodes); + } + + /** + * 40发送邮件消息 + * @param email + * @param title + * @param content + */ + @GetMapping("/sendEmailMsg") + public void sendEmailMsg(@RequestParam("email")String email,@RequestParam("title")String title,@RequestParam("content")String content){ + this.sysBaseAPI.sendEmailMsg(email,title,content); + }; + /** + * 根据部门id查询部门所有的父级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:50 + * @param departId 部门id + */ + @GetMapping("/listParentDepartsByDepId") + List listParentDepartsByDepId(@RequestParam("departId") String departId){ + return sysDepartService.listParentDepartsByDepId(departId); + } + + @GetMapping("/listSonDepartsByDepId") + /** + * 根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:54 + * @param departId 部门id + */ + List listSonDepartsByDepId(@RequestParam("departId") String departId){ + return sysDepartService.listSonDepartsByDepId(departId); + } + + + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java b/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java new file mode 100644 index 00000000..04109888 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/cas/controller/CasClientController.java @@ -0,0 +1,115 @@ +package com.jero.modules.cas.controller; + +import java.util.List; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import cn.hutool.crypto.SecureUtil; +import org.apache.commons.lang.StringUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.RedisUtil; +import com.jero.modules.cas.util.CASServiceUtil; +import com.jero.modules.cas.util.XmlUtils; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; + +import lombok.extern.slf4j.Slf4j; + +/** + *

+ * CAS单点登录客户端登录认证 + *

+ * + * @Author zhoujf + * @since 2018-12-20 + */ +@Slf4j +@RestController +@RequestMapping("/sys/cas/client") +public class CasClientController { + + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private RedisUtil redisUtil; + + @Value("${cas.prefixUrl}") + private String prefixUrl; + + + @GetMapping("/validateLogin") + public Object validateLogin(@RequestParam(name="ticket") String ticket, + @RequestParam(name="service") String service, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + Result result = new Result(); + log.info("Rest api login."); + try { + String validateUrl = prefixUrl+"/p3/serviceValidate"; + String res = CASServiceUtil.getSTValidate(validateUrl, ticket, service); + log.info("res."+res); + final String error = XmlUtils.getTextForElement(res, "authenticationFailure"); + if(StringUtils.isNotEmpty(error)) { + throw new Exception(error); + } + final String principal = XmlUtils.getTextForElement(res, "user"); + if (StringUtils.isEmpty(principal)) { + throw new Exception("No principal was found in the response from the CAS server."); + } + log.info("-------token----username---"+principal); + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(principal); + result = sysUserService.checkUserIsEffective(sysUser); + if(!result.isSuccess()) { + return result; + } + String token = JwtUtil.sign(sysUser.getUsername(), sysUser.getPassword()); + // 设置超时时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME*2 / 1000); + + //获取用户部门信息 + JSONObject obj = new JSONObject(); + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + obj.put("departs", departs); + if (departs == null || departs.size() == 0) { + obj.put("multi_depart", 0); + } else if (departs.size() == 1) { + sysUserService.updateUserDepart(principal, departs.get(0).getOrgCode()); + obj.put("multi_depart", 1); + } else { + obj.put("multi_depart", 2); + } + obj.put("token", token); + obj.put("userInfo", sysUser); + result.setResult(obj); + result.success("登录成功"); + + } catch (Exception e) { + //e.printStackTrace(); + result.error500(e.getMessage()); + } + return new HttpEntity<>(result); + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java new file mode 100644 index 00000000..54922900 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/CASServiceUtil.java @@ -0,0 +1,103 @@ +package com.jero.modules.cas.util; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.security.cert.X509Certificate; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; +import javax.net.ssl.X509TrustManager; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.socket.LayeredConnectionSocketFactory; +import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +public class CASServiceUtil { + + public static void main(String[] args) { + String serviceUrl = "https://cas.8f8.com.cn:8443/cas/p3/serviceValidate"; + String service = "http://localhost:3003/user/login"; + String ticket = "ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3"; + String res = getSTValidate(serviceUrl,ticket, service); + + System.out.println("---------res-----"+res); + } + + + /** + * 验证ST + */ + public static String getSTValidate(String url,String st, String service){ + try { + url = url+"?service="+service+"&ticket="+st; + CloseableHttpClient httpclient = createHttpClientWithNoSsl(); + HttpGet httpget = new HttpGet(url); + HttpResponse response = httpclient.execute(httpget); + String res = readResponse(response); + return res == null ? null : (res == "" ? null : res); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + + /** + * 读取 response body 内容为字符串 + * + * @param response + * @return + * @throws IOException + */ + private static String readResponse(HttpResponse response) throws IOException { + BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); + String result = new String(); + String line; + while ((line = in.readLine()) != null) { + result += line; + } + return result; + } + + + /** + * 创建模拟客户端(针对 https 客户端禁用 SSL 验证) + * + * @param cookieStore 缓存的 Cookies 信息 + * @return + * @throws Exception + */ + private static CloseableHttpClient createHttpClientWithNoSsl() throws Exception { + // Create a trust manager that does not validate certificate chains + TrustManager[] trustAllCerts = new TrustManager[]{ + new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return null; + } + + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + // don't check + } + + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + // don't check + } + } + }; + + SSLContext ctx = SSLContext.getInstance("TLS"); + ctx.init(null, trustAllCerts, null); + LayeredConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(ctx); + return HttpClients.custom() + .setSSLSocketFactory(sslSocketFactory) + .build(); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java b/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java new file mode 100644 index 00000000..f9e60b8f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/cas/util/XmlUtils.java @@ -0,0 +1,292 @@ +package com.jero.modules.cas.util; + + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import org.w3c.dom.Document; +import org.xml.sax.Attributes; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; + +import lombok.extern.slf4j.Slf4j; + +/** + * 解析cas,ST验证后的xml + * + */ +@Slf4j +public final class XmlUtils { + + /** + * Creates a new namespace-aware DOM document object by parsing the given XML. + * + * @param xml XML content. + * + * @return DOM document. + */ + public static Document newDocument(final String xml) { + final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + final Map features = new HashMap(); + features.put(XMLConstants.FEATURE_SECURE_PROCESSING, true); + features.put("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + for (final Map.Entry entry : features.entrySet()) { + try { + factory.setFeature(entry.getKey(), entry.getValue()); + } catch (ParserConfigurationException e) { + log.warn("Failed setting XML feature {}: {}", entry.getKey(), e); + } + } + factory.setNamespaceAware(true); + try { + return factory.newDocumentBuilder().parse(new InputSource(new StringReader(xml))); + } catch (Exception e) { + throw new RuntimeException("XML parsing error: " + e); + } + } + + /** + * Get an instance of an XML reader from the XMLReaderFactory. + * + * @return the XMLReader. + */ + public static XMLReader getXmlReader() { + try { + final XMLReader reader = SAXParserFactory.newInstance().newSAXParser().getXMLReader(); + reader.setFeature("http://xml.org/sax/features/namespaces", true); + reader.setFeature("http://xml.org/sax/features/namespace-prefixes", false); + reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false); + return reader; + } catch (final Exception e) { + throw new RuntimeException("Unable to create XMLReader", e); + } + } + + + /** + * Retrieve the text for a group of elements. Each text element is an entry + * in a list. + *

This method is currently optimized for the use case of two elements in a list. + * + * @param xmlAsString the xml response + * @param element the element to look for + * @return the list of text from the elements. + */ + public static List getTextForElements(final String xmlAsString, final String element) { + final List elements = new ArrayList(2); + final XMLReader reader = getXmlReader(); + + final DefaultHandler handler = new DefaultHandler() { + + private boolean foundElement = false; + + private StringBuilder buffer = new StringBuilder(); + + public void startElement(final String uri, final String localName, final String qName, + final Attributes attributes) throws SAXException { + if (localName.equals(element)) { + this.foundElement = true; + } + } + + public void endElement(final String uri, final String localName, final String qName) throws SAXException { + if (localName.equals(element)) { + this.foundElement = false; + elements.add(this.buffer.toString()); + this.buffer = new StringBuilder(); + } + } + + public void characters(char[] ch, int start, int length) throws SAXException { + if (this.foundElement) { + this.buffer.append(ch, start, length); + } + } + }; + + reader.setContentHandler(handler); + reader.setErrorHandler(handler); + + try { + reader.parse(new InputSource(new StringReader(xmlAsString))); + } catch (final Exception e) { + log.error(e.getMessage(), e); + return null; + } + + return elements; + } + + /** + * Retrieve the text for a specific element (when we know there is only + * one). + * + * @param xmlAsString the xml response + * @param element the element to look for + * @return the text value of the element. + */ + public static String getTextForElement(final String xmlAsString, final String element) { + final XMLReader reader = getXmlReader(); + final StringBuilder builder = new StringBuilder(); + + final DefaultHandler handler = new DefaultHandler() { + + private boolean foundElement = false; + + public void startElement(final String uri, final String localName, final String qName, + final Attributes attributes) throws SAXException { + if (localName.equals(element)) { + this.foundElement = true; + } + } + + public void endElement(final String uri, final String localName, final String qName) throws SAXException { + if (localName.equals(element)) { + this.foundElement = false; + } + } + + public void characters(char[] ch, int start, int length) throws SAXException { + if (this.foundElement) { + builder.append(ch, start, length); + } + } + }; + + reader.setContentHandler(handler); + reader.setErrorHandler(handler); + + try { + reader.parse(new InputSource(new StringReader(xmlAsString))); + } catch (final Exception e) { + log.error(e.getMessage(), e); + return null; + } + + return builder.toString(); + } + + + public static Map extractCustomAttributes(final String xml) { + final SAXParserFactory spf = SAXParserFactory.newInstance(); + spf.setNamespaceAware(true); + spf.setValidating(false); + try { + final SAXParser saxParser = spf.newSAXParser(); + final XMLReader xmlReader = saxParser.getXMLReader(); + final CustomAttributeHandler handler = new CustomAttributeHandler(); + xmlReader.setContentHandler(handler); + xmlReader.parse(new InputSource(new StringReader(xml))); + return handler.getAttributes(); + } catch (final Exception e) { + log.error(e.getMessage(), e); + return Collections.emptyMap(); + } + } + + private static class CustomAttributeHandler extends DefaultHandler { + + private Map attributes; + + private boolean foundAttributes; + + private String currentAttribute; + + private StringBuilder value; + + @Override + public void startDocument() throws SAXException { + this.attributes = new HashMap(); + } + + @Override + public void startElement(final String namespaceURI, final String localName, final String qName, + final Attributes attributes) throws SAXException { + if ("attributes".equals(localName)) { + this.foundAttributes = true; + } else if (this.foundAttributes) { + this.value = new StringBuilder(); + this.currentAttribute = localName; + } + } + + @Override + public void characters(final char[] chars, final int start, final int length) throws SAXException { + if (this.currentAttribute != null) { + value.append(chars, start, length); + } + } + + @Override + public void endElement(final String namespaceURI, final String localName, final String qName) + throws SAXException { + if ("attributes".equals(localName)) { + this.foundAttributes = false; + this.currentAttribute = null; + } else if (this.foundAttributes) { + final Object o = this.attributes.get(this.currentAttribute); + + if (o == null) { + this.attributes.put(this.currentAttribute, this.value.toString()); + } else { + final List items; + if (o instanceof List) { + items = (List) o; + } else { + items = new LinkedList(); + items.add(o); + this.attributes.put(this.currentAttribute, items); + } + items.add(this.value.toString()); + } + } + } + + public Map getAttributes() { + return this.attributes; + } + } + + + public static void main(String[] args) { + String result = "\r\n" + + " \r\n" + + " admin\r\n" + + " \r\n" + + " UsernamePasswordCredential\r\n" + + " true\r\n" + + " 2019-08-01T19:33:21.527+08:00[Asia/Shanghai]\r\n" + + " RestAuthenticationHandler\r\n" + + " RestAuthenticationHandler\r\n" + + " false\r\n" + + " \r\n" + + " \r\n" + + ""; + + String errorRes = "\r\n" + + " 未能够识别出目标 'ST-5-1g-9cNES6KXNRwq-GuRET103sm0-DESKTOP-VKLS8B3'票根\r\n" + + ""; + + String error = XmlUtils.getTextForElement(errorRes, "authenticationFailure"); + System.out.println("------"+error); + + String error2 = XmlUtils.getTextForElement(result, "authenticationFailure"); + System.out.println("------"+error2); + String principal = XmlUtils.getTextForElement(result, "user"); + System.out.println("---principal---"+principal); + Map attributes = XmlUtils.extractCustomAttributes(result); + System.out.println("---attributes---"+attributes); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java new file mode 100644 index 00000000..8f8474ef --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageController.java @@ -0,0 +1,145 @@ +package com.jero.modules.message.controller; + +import java.util.Arrays; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.message.entity.SysMessage; +import com.jero.modules.message.service.ISysMessageService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Description: 消息 + * @author: jero-boot + * @date: 2019-04-09 + * @version: V1.0 + */ +@Slf4j +@RestController +@RequestMapping("/sys/message/sysMessage") +public class SysMessageController extends JeroController { + @Autowired + private ISysMessageService sysMessageService; + + /** + * 分页列表查询 + * + * @param sysMessage + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/page") + public Result queryPageList(SysMessage sysMessage, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessage, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysMessageService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param sysMessage + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysMessage sysMessage) { + sysMessageService.save(sysMessage); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysMessage + * @return + */ + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysMessage sysMessage) { + sysMessageService.updateById(sysMessage); + return Result.OK("修改成功!"); + + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysMessageService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + + this.sysMessageService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysMessage sysMessage = sysMessageService.getById(id); + return Result.OK(sysMessage); + } + + /** + * 导出excel + * + * @param request + */ + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysMessage sysMessage) { + return super.exportXls(request,sysMessage,SysMessage.class, "推送消息模板"); + } + + /** + * excel导入 + * + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysMessage.class); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java new file mode 100644 index 00000000..b884c959 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/controller/SysMessageTemplateController.java @@ -0,0 +1,170 @@ +package com.jero.modules.message.controller; + +import java.util.Arrays; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.message.entity.MsgParams; +import com.jero.modules.message.entity.SysMessageTemplate; +import com.jero.modules.message.service.ISysMessageTemplateService; +import com.jero.modules.message.util.PushMsgUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.ModelAndView; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Description: 消息模板 + * @Author: jero-boot + * @Sate: 2019-04-09 + * @Version: V1.0 + */ +@Slf4j +@RestController +@RequestMapping("/sys/message/sysMessageTemplate") +public class SysMessageTemplateController extends JeroController { + @Autowired + private ISysMessageTemplateService sysMessageTemplateService; + @Autowired + private PushMsgUtil pushMsgUtil; + + /** + * 分页列表查询 + * + * @param sysMessageTemplate + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/page") + public Result queryPageList(SysMessageTemplate sysMessageTemplate, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysMessageTemplate, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysMessageTemplateService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param sysMessageTemplate + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysMessageTemplate sysMessageTemplate) { + sysMessageTemplateService.save(sysMessageTemplate); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysMessageTemplate + * @return + */ + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysMessageTemplate sysMessageTemplate) { + sysMessageTemplateService.updateById(sysMessageTemplate); + return Result.OK("更新成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysMessageTemplateService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysMessageTemplateService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysMessageTemplate sysMessageTemplate = sysMessageTemplateService.getById(id); + return Result.OK(sysMessageTemplate); + } + + /** + * 导出excel + * + * @param request + */ + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request,SysMessageTemplate sysMessageTemplate) { + return super.exportXls(request, sysMessageTemplate, SysMessageTemplate.class,"推送消息模板"); + } + + /** + * excel导入 + * + * @param request + * @param response + * @return + */ + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysMessageTemplate.class); + } + + /** + * 发送消息 + */ + @PostMapping(value = "/sendMsg") + public Result sendMessage(@RequestBody MsgParams msgParams) { + Result result = new Result(); + Map map = null; + try { + map = (Map) JSON.parse(msgParams.getTestData()); + } catch (Exception e) { + result.error500("解析Json出错!"); + return result; + } + boolean is_sendSuccess = pushMsgUtil.sendMessage(msgParams.getMsgType(), msgParams.getTemplateCode(), map, msgParams.getReceiver()); + if (is_sendSuccess) { + result.success("发送消息任务添加成功!"); + } else { + result.error500("发送消息任务添加失败!"); + } + return result; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/MsgParams.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/MsgParams.java new file mode 100644 index 00000000..b6b090c1 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/MsgParams.java @@ -0,0 +1,23 @@ +package com.jero.modules.message.entity; + +import java.io.Serializable; + +import lombok.Data; + +/** + * 发送消息实体 + */ +@Data +public class MsgParams implements Serializable { + + private static final long serialVersionUID = 1L; + /*消息类型*/ + private String msgType; + /*消息接收方*/ + private String receiver; + /*消息模板码*/ + private String templateCode; + /*测试数据*/ + private String testData; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessage.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessage.java new file mode 100644 index 00000000..5f19e77c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessage.java @@ -0,0 +1,60 @@ +package com.jero.modules.message.entity; + +import com.jero.common.aspect.annotation.Dict; +import com.jero.common.system.base.entity.JeroEntity; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 消息 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("sys_sms") +public class SysMessage extends JeroEntity { + /**推送内容*/ + @Excel(name = "推送内容", width = 15) + private java.lang.String esContent; + /**推送所需参数Json格式*/ + @Excel(name = "推送所需参数Json格式", width = 15) + private java.lang.String esParam; + /**接收人*/ + @Excel(name = "接收人", width = 15) + private java.lang.String esReceiver; + /**推送失败原因*/ + @Excel(name = "推送失败原因", width = 15) + private java.lang.String esResult; + /**发送次数*/ + @Excel(name = "发送次数", width = 15) + private java.lang.Integer esSendNum; + /**推送状态 0未推送 1推送成功 2推送失败*/ + @Excel(name = "推送状态 0未推送 1推送成功 2推送失败", width = 15) + @Dict(dicCode = "msgSendStatus") + private java.lang.String esSendStatus; + /**推送时间*/ + @Excel(name = "推送时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date esSendTime; + /**消息标题*/ + @Excel(name = "消息标题", width = 15) + private java.lang.String esTitle; + /**推送方式:1短信 2邮件 3微信*/ + @Excel(name = "推送方式:1短信 2邮件 3微信", width = 15) + @Dict(dicCode = "msgType") + private java.lang.String esType; + /**备注*/ + @Excel(name = "备注", width = 15) + private java.lang.String remark; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessageTemplate.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessageTemplate.java new file mode 100644 index 00000000..9e531b7f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/entity/SysMessageTemplate.java @@ -0,0 +1,38 @@ +package com.jero.modules.message.entity; + +import com.jero.common.system.base.entity.JeroEntity; +import org.jeecgframework.poi.excel.annotation.Excel; + +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 消息模板 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("sys_sms_template") +public class SysMessageTemplate extends JeroEntity { + /**模板CODE*/ + @Excel(name = "模板CODE", width = 15) + private java.lang.String templateCode; + /**模板标题*/ + @Excel(name = "模板标题", width = 30) + private java.lang.String templateName; + /**模板内容*/ + @Excel(name = "模板内容", width = 50) + private java.lang.String templateContent; + /**模板测试json*/ + @Excel(name = "模板测试json", width = 15) + private java.lang.String templateTestJson; + /**模板类型*/ + @Excel(name = "模板类型", width = 15) + private java.lang.String templateType; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java new file mode 100644 index 00000000..c8a48c94 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/ISendMsgHandle.java @@ -0,0 +1,6 @@ +package com.jero.modules.message.handle; + +public interface ISendMsgHandle { + + void SendMsg(String es_receiver, String es_title, String es_content); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgStatusEnum.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgStatusEnum.java new file mode 100644 index 00000000..d24252c6 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgStatusEnum.java @@ -0,0 +1,25 @@ +package com.jero.modules.message.handle.enums; + +/** + * 推送状态枚举 + */ +public enum SendMsgStatusEnum { + +//推送状态 0未推送 1推送成功 2推送失败 + WAIT("0"), SUCCESS("1"), FAIL("2"); + + private String code; + + private SendMsgStatusEnum(String code) { + this.code = code; + } + + public String getCode() { + return code; + } + + public void setStatusCode(String code) { + this.code = code; + } + +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgTypeEnum.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgTypeEnum.java new file mode 100644 index 00000000..2ef4d437 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/enums/SendMsgTypeEnum.java @@ -0,0 +1,51 @@ +package com.jero.modules.message.handle.enums; + +import com.jero.common.util.oConvertUtils; + +/** + * 发送消息类型枚举 + */ +public enum SendMsgTypeEnum { + +//推送方式:1短信 2邮件 3微信 + SMS("1", "com.jero.modules.message.handle.impl.SmsSendMsgHandle"), + EMAIL("2", "com.jero.modules.message.handle.impl.EmailSendMsgHandle"), + WX("3","com.jero.modules.message.handle.impl.WxSendMsgHandle"); + + private String type; + + private String implClass; + + private SendMsgTypeEnum(String type, String implClass) { + this.type = type; + this.implClass = implClass; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getImplClass() { + return implClass; + } + + public void setImplClass(String implClass) { + this.implClass = implClass; + } + + public static SendMsgTypeEnum getByType(String type) { + if (oConvertUtils.isEmpty(type)) { + return null; + } + for (SendMsgTypeEnum val : values()) { + if (val.getType().equals(type)) { + return val; + } + } + return null; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java new file mode 100644 index 00000000..776c760c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/EmailSendMsgHandle.java @@ -0,0 +1,45 @@ +package com.jero.modules.message.handle.impl; + +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import com.jero.config.StaticConfig; +import com.jero.modules.message.handle.ISendMsgHandle; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.mail.javamail.MimeMessageHelper; + +import javax.mail.MessagingException; +import javax.mail.internet.MimeMessage; + +public class EmailSendMsgHandle implements ISendMsgHandle { + static String emailFrom; + + public static void setEmailFrom(String emailFrom) { + EmailSendMsgHandle.emailFrom = emailFrom; + } + + @Override + public void SendMsg(String es_receiver, String es_title, String es_content) { + JavaMailSender mailSender = (JavaMailSender) SpringContextUtils.getBean("mailSender"); + MimeMessage message = mailSender.createMimeMessage(); + MimeMessageHelper helper = null; + //update-begin-author:taoyan date:20200811 for:配置类数据获取 + if(oConvertUtils.isEmpty(emailFrom)){ + StaticConfig staticConfig = SpringContextUtils.getBean(StaticConfig.class); + setEmailFrom(staticConfig.getEmailFrom()); + } + //update-end-author:taoyan date:20200811 for:配置类数据获取 + try { + helper = new MimeMessageHelper(message, true); + // 设置发送方邮箱地址 + helper.setFrom(emailFrom); + helper.setTo(es_receiver); + helper.setSubject(es_title); + helper.setText(es_content, true); + mailSender.send(message); + } catch (MessagingException e) { + e.printStackTrace(); + } + + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java new file mode 100644 index 00000000..113874ef --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/SmsSendMsgHandle.java @@ -0,0 +1,15 @@ +package com.jero.modules.message.handle.impl; + +import lombok.extern.slf4j.Slf4j; +import com.jero.modules.message.handle.ISendMsgHandle; + +@Slf4j +public class SmsSendMsgHandle implements ISendMsgHandle { + + @Override + public void SendMsg(String es_receiver, String es_title, String es_content) { + // TODO Auto-generated method stub + log.info("发短信"); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java new file mode 100644 index 00000000..33f76aa3 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/handle/impl/WxSendMsgHandle.java @@ -0,0 +1,14 @@ +package com.jero.modules.message.handle.impl; + +import lombok.extern.slf4j.Slf4j; +import com.jero.modules.message.handle.ISendMsgHandle; +@Slf4j +public class WxSendMsgHandle implements ISendMsgHandle { + + @Override + public void SendMsg(String es_receiver, String es_title, String es_content) { + // TODO Auto-generated method stub + log.info("发微信消息模板"); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java new file mode 100644 index 00000000..3bd006f4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/job/SendMsgJob.java @@ -0,0 +1,72 @@ +package com.jero.modules.message.job; + +import java.util.List; + +import com.jero.common.util.DateUtils; +import com.jero.modules.message.entity.SysMessage; +import com.jero.modules.message.handle.ISendMsgHandle; +import com.jero.modules.message.handle.enums.SendMsgStatusEnum; +import com.jero.modules.message.handle.enums.SendMsgTypeEnum; +import com.jero.modules.message.service.ISysMessageService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import lombok.extern.slf4j.Slf4j; + +/** + * 发送消息任务 + */ + +@Slf4j +public class SendMsgJob implements Job { + + @Autowired + private ISysMessageService sysMessageService; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + log.info(String.format(" jero-boot 发送消息任务 SendMsgJob ! 时间:" + DateUtils.getTimestamp())); + + // 1.读取消息中心数据,只查询未发送的和发送失败不超过次数的 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("es_send_status", SendMsgStatusEnum.WAIT.getCode()) + .or(i -> i.eq("es_send_status", SendMsgStatusEnum.FAIL.getCode()).lt("es_send_num", 6)); + List sysMessages = sysMessageService.list(queryWrapper); + System.out.println(sysMessages); + // 2.根据不同的类型走不通的发送实现类 + for (SysMessage sysMessage : sysMessages) { + ISendMsgHandle sendMsgHandle = null; + try { + if (sysMessage.getEsType().equals(SendMsgTypeEnum.EMAIL.getType())) { + sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.EMAIL.getImplClass()).newInstance(); + } else if (sysMessage.getEsType().equals(SendMsgTypeEnum.SMS.getType())) { + sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.SMS.getImplClass()).newInstance(); + } else if (sysMessage.getEsType().equals(SendMsgTypeEnum.WX.getType())) { + sendMsgHandle = (ISendMsgHandle) Class.forName(SendMsgTypeEnum.WX.getImplClass()).newInstance(); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + } + Integer sendNum = sysMessage.getEsSendNum(); + try { + sendMsgHandle.SendMsg(sysMessage.getEsReceiver(), sysMessage.getEsTitle(), + sysMessage.getEsContent().toString()); + // 发送消息成功 + sysMessage.setEsSendStatus(SendMsgStatusEnum.SUCCESS.getCode()); + } catch (Exception e) { + // 发送消息出现异常 + sysMessage.setEsSendStatus(SendMsgStatusEnum.FAIL.getCode()); + } + sysMessage.setEsSendNum(++sendNum); + // 发送结果回写到数据库 + sysMessageService.updateById(sysMessage); + } + + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java new file mode 100644 index 00000000..c8591222 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.message.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.message.entity.SysMessage; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 消息 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +public interface SysMessageMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageTemplateMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageTemplateMapper.java new file mode 100644 index 00000000..2d1851eb --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/SysMessageTemplateMapper.java @@ -0,0 +1,18 @@ +package com.jero.modules.message.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; +import com.jero.modules.message.entity.SysMessageTemplate; + +import java.util.List; + +/** + * @Description: 消息模板 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +public interface SysMessageTemplateMapper extends BaseMapper { + @Select("SELECT * FROM SYS_SMS_TEMPLATE WHERE TEMPLATE_CODE = #{code}") + List selectByCode(String code); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageMapper.xml new file mode 100644 index 00000000..910a18cd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageTemplateMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageTemplateMapper.xml new file mode 100644 index 00000000..aac7097a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/mapper/xml/SysMessageTemplateMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageService.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageService.java new file mode 100644 index 00000000..e056bb70 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageService.java @@ -0,0 +1,14 @@ +package com.jero.modules.message.service; + +import com.jero.common.system.base.service.JeroService; +import com.jero.modules.message.entity.SysMessage; + +/** + * @Description: 消息 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +public interface ISysMessageService extends JeroService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageTemplateService.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageTemplateService.java new file mode 100644 index 00000000..900aaa11 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/ISysMessageTemplateService.java @@ -0,0 +1,16 @@ +package com.jero.modules.message.service; + +import java.util.List; + +import com.jero.common.system.base.service.JeroService; +import com.jero.modules.message.entity.SysMessageTemplate; + +/** + * @Description: 消息模板 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +public interface ISysMessageTemplateService extends JeroService { + List selectByCode(String code); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageServiceImpl.java new file mode 100644 index 00000000..59d020a8 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageServiceImpl.java @@ -0,0 +1,18 @@ +package com.jero.modules.message.service.impl; + +import com.jero.common.system.base.service.impl.JeroServiceImpl; +import com.jero.modules.message.entity.SysMessage; +import com.jero.modules.message.mapper.SysMessageMapper; +import com.jero.modules.message.service.ISysMessageService; +import org.springframework.stereotype.Service; + +/** + * @Description: 消息 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +@Service +public class SysMessageServiceImpl extends JeroServiceImpl implements ISysMessageService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageTemplateServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageTemplateServiceImpl.java new file mode 100644 index 00000000..f0943e6b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/service/impl/SysMessageTemplateServiceImpl.java @@ -0,0 +1,28 @@ +package com.jero.modules.message.service.impl; + +import com.jero.common.system.base.service.impl.JeroServiceImpl; +import com.jero.modules.message.entity.SysMessageTemplate; +import com.jero.modules.message.mapper.SysMessageTemplateMapper; +import com.jero.modules.message.service.ISysMessageTemplateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.List; + +/** + * @Description: 消息模板 + * @Author: jero-boot + * @Date: 2019-04-09 + * @Version: V1.0 + */ +@Service +public class SysMessageTemplateServiceImpl extends JeroServiceImpl implements ISysMessageTemplateService { + + @Autowired + private SysMessageTemplateMapper sysMessageTemplateMapper; + + + @Override + public List selectByCode(String code) { + return sysMessageTemplateMapper.selectByCode(code); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java new file mode 100644 index 00000000..fb5e83b2 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/util/PushMsgUtil.java @@ -0,0 +1,80 @@ +package com.jero.modules.message.util; + +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; +import com.jero.modules.message.entity.SysMessage; +import com.jero.modules.message.entity.SysMessageTemplate; +import com.jero.modules.message.handle.enums.SendMsgStatusEnum; +import com.jero.modules.message.service.ISysMessageService; +import com.jero.modules.message.service.ISysMessageTemplateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; + +import java.io.IOException; +import java.io.StringWriter; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 消息生成工具 + */ + +@Component +public class PushMsgUtil { + + @Autowired + private ISysMessageService sysMessageService; + + @Autowired + private ISysMessageTemplateService sysMessageTemplateService; + + @Autowired + private Configuration freemarkerConfig; + /** + * @param msgType 消息类型 1短信 2邮件 3微信 + * @param templateCode 消息模板码 + * @param map 消息参数 + * @param sentTo 接收消息方 + */ + public boolean sendMessage(String msgType, String templateCode, Map map, String sentTo) { + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + SysMessage sysMessage = new SysMessage(); + if (sysSmsTemplates.size() > 0) { + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + sysMessage.setEsType(msgType); + sysMessage.setEsReceiver(sentTo); + //模板标题 + String title = sysSmsTemplate.getTemplateName(); + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + StringWriter stringWriter = new StringWriter(); + Template template = null; + try { + template = new Template("SysMessageTemplate", content, freemarkerConfig); + template.process(map, stringWriter); + } catch (IOException e) { + e.printStackTrace(); + return false; + } catch (TemplateException e) { + e.printStackTrace(); + return false; + } + content = stringWriter.toString(); + sysMessage.setEsTitle(title); + sysMessage.setEsContent(content); + sysMessage.setEsParam(JSONObject.toJSONString(map)); + sysMessage.setEsSendTime(new Date()); + sysMessage.setEsSendStatus(SendMsgStatusEnum.WAIT.getCode()); + sysMessage.setEsSendNum(0); + if(sysMessageService.save(sysMessage)) { + return true; + } + } + return false; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/SocketHandler.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/SocketHandler.java new file mode 100644 index 00000000..0357b632 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/SocketHandler.java @@ -0,0 +1,29 @@ +package com.jero.modules.message.websocket; + +import cn.hutool.core.util.ObjectUtil; +import com.jero.common.modules.redis.listener.JeroRedisListerer; +import com.jero.common.base.BaseMap; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 监听消息(采用redis发布订阅方式发送消息) + */ +@Component +public class SocketHandler implements JeroRedisListerer { + + @Autowired + private WebSocket webSocket; + + @Override + public void onMessage(BaseMap map) { + String userId = map.get("userId"); + String message = map.get("message"); + if (ObjectUtil.isNotEmpty(userId)) { + webSocket.pushMessage(userId, message); + } else { + webSocket.pushMessage(message); + } + + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java new file mode 100644 index 00000000..1a0bb8ca --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/TestSocketController.java @@ -0,0 +1,48 @@ +package com.jero.modules.message.websocket; + +import com.jero.common.api.vo.Result; +import com.jero.common.constant.WebsocketConst; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; + +@RestController +@RequestMapping("/sys/socketTest") +public class TestSocketController { + + @Autowired + private WebSocket webSocket; + + @PostMapping("/sendAll") + public Result sendAll(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String message = jsonObject.getString("message"); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, "M0001"); + obj.put(WebsocketConst.MSG_TXT, message); + webSocket.sendMessage(obj.toJSONString()); + result.setResult("群发!"); + return result; + } + + @PostMapping("/sendUser") + public Result sendUser(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String userId = jsonObject.getString("userId"); + String message = jsonObject.getString("message"); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_USER_ID, userId); + obj.put(WebsocketConst.MSG_ID, "M0001"); + obj.put(WebsocketConst.MSG_TXT, message); + webSocket.sendMessage(userId, obj.toJSONString()); + result.setResult("单发"); + return result; + } + +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java new file mode 100644 index 00000000..55b01827 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/message/websocket/WebSocket.java @@ -0,0 +1,150 @@ +package com.jero.modules.message.websocket; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CopyOnWriteArraySet; + +import javax.annotation.Resource; +import javax.websocket.OnClose; +import javax.websocket.OnMessage; +import javax.websocket.OnOpen; +import javax.websocket.Session; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; + +import com.jero.common.base.BaseMap; +import com.jero.common.constant.WebsocketConst; +import com.jero.common.modules.redis.clent.JeroRedisClient; +import org.springframework.stereotype.Component; + +import com.alibaba.fastjson.JSONObject; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Author scott + * @Date 2019/11/29 9:41 + * @Description: 此注解相当于设置访问URL + */ +@Component +@Slf4j +@ServerEndpoint("/websocket/{userId}") //此注解相当于设置访问URL +public class WebSocket { + + private Session session; + + private String userId; + + private static final String REDIS_TOPIC_NAME = "socketHandler"; + + @Resource + private JeroRedisClient jeroRedisClient; + + private static CopyOnWriteArraySet webSockets = new CopyOnWriteArraySet<>(); + private static Map sessionPool = new HashMap(); + + + @OnOpen + public void onOpen(Session session, @PathParam(value = "userId") String userId) { + try { + this.session = session; + this.userId = userId; + webSockets.add(this); + sessionPool.put(userId, session); + log.info("【websocket消息】有新的连接,总数为:" + webSockets.size()); + } catch (Exception e) { + } + } + + @OnClose + public void onClose() { + try { + webSockets.remove(this); + sessionPool.remove(this.userId); + log.info("【websocket消息】连接断开,总数为:" + webSockets.size()); + } catch (Exception e) { + } + } + + + /** + * 服务端推送消息 + * + * @param userId + * @param message + */ + public void pushMessage(String userId, String message) { + Session session = sessionPool.get(userId); + if (session != null && session.isOpen()) { + try { + log.info("【websocket消息】 单点消息:" + message); + session.getAsyncRemote().sendText(message); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + /** + * 服务器端推送消息 + */ + public void pushMessage(String message) { + try { + webSockets.forEach(ws -> ws.session.getAsyncRemote().sendText(message)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + @OnMessage + public void onMessage(String message) { + //todo 现在有个定时任务刷,应该去掉 + log.debug("【websocket消息】收到客户端消息:" + message); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK);//业务类型 + obj.put(WebsocketConst.MSG_TXT, "心跳响应");//消息内容 + for (WebSocket webSocket : webSockets) { + webSocket.pushMessage(message); + } + } + + /** + * 后台发送消息到redis + * + * @param message + */ + public void sendMessage(String message) { + log.info("【websocket消息】广播消息:" + message); + BaseMap baseMap = new BaseMap(); + baseMap.put("userId", ""); + baseMap.put("message", message); + jeroRedisClient.sendMessage(REDIS_TOPIC_NAME, baseMap); + } + + /** + * 此为单点消息 + * + * @param userId + * @param message + */ + public void sendMessage(String userId, String message) { + BaseMap baseMap = new BaseMap(); + baseMap.put("userId", userId); + baseMap.put("message", message); + jeroRedisClient.sendMessage(REDIS_TOPIC_NAME, baseMap); + } + + /** + * 此为单点消息(多人) + * + * @param userIds + * @param message + */ + public void sendMessage(String[] userIds, String message) { + for (String userId : userIds) { + sendMessage(userId, message); + } + } + +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java new file mode 100644 index 00000000..10e79edd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/controller/ActuatorRedisController.java @@ -0,0 +1,119 @@ +package com.jero.modules.monitor.controller; + +import com.alibaba.fastjson.JSONArray; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.modules.monitor.domain.RedisInfo; +import com.jero.modules.monitor.service.RedisService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.swing.filechooser.FileSystemView; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Slf4j +@RestController +@RequestMapping("/sys/actuator/redis") +public class ActuatorRedisController { + + @Autowired + private RedisService redisService; + + /** + * Redis详细信息 + * @return + * @throws Exception + */ + @GetMapping("/info") + public Result getRedisInfo() throws Exception { + List infoList = this.redisService.getRedisInfo(); + log.info(infoList.toString()); + return Result.OK(infoList); + } + + @GetMapping("/keysSize") + public Map getKeysSize() throws Exception { + return redisService.getKeysSize(); + } + + /** + * 获取redis key数量 for 报表 + * @return + * @throws Exception + */ + @GetMapping("/keysSizeForReport") + public Map getKeysSizeReport() throws Exception { + return redisService.getMapForReport("1"); + } + /** + * 获取redis 内存 for 报表 + * + * @return + * @throws Exception + */ + @GetMapping("/memoryForReport") + public Map memoryForReport() throws Exception { + return redisService.getMapForReport("2"); + } + /** + * 获取redis 全部信息 for 报表 + * @return + * @throws Exception + */ + @GetMapping("/infoForReport") + public Map infoForReport() throws Exception { + return redisService.getMapForReport("3"); + } + + @GetMapping("/memoryInfo") + public Map getMemoryInfo() throws Exception { + return redisService.getMemoryInfo(); + } + + //update-begin--Author:zhangweijian Date:20190425 for:获取磁盘信息 + /** + * @功能:获取磁盘信息 + * @param request + * @param response + * @return + */ + @GetMapping("/queryDiskInfo") + public Result>> queryDiskInfo(HttpServletRequest request, HttpServletResponse response){ + Result>> res = new Result<>(); + try { + // 当前文件系统类 + FileSystemView fsv = FileSystemView.getFileSystemView(); + // 列出所有windows 磁盘 + File[] fs = File.listRoots(); + log.info("查询磁盘信息:"+fs.length+"个"); + List> list = new ArrayList<>(); + + for (int i = 0; i < fs.length; i++) { + if(fs[i].getTotalSpace()==0) { + continue; + } + Map map = new HashMap<>(); + map.put("name", fsv.getSystemDisplayName(fs[i])); + map.put("max", fs[i].getTotalSpace()); + map.put("rest", fs[i].getFreeSpace()); + map.put("restPPT", (fs[i].getTotalSpace()-fs[i].getFreeSpace())*100/fs[i].getTotalSpace()); + list.add(map); + log.info(map.toString()); + } + res.setResult(list); + res.success("查询成功"); + } catch (Exception e) { + res.error500("查询失败"+e.getMessage()); + } + return res; + } + //update-end--Author:zhangweijian Date:20190425 for:获取磁盘信息 +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/domain/RedisInfo.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/domain/RedisInfo.java new file mode 100644 index 00000000..590cd79b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/domain/RedisInfo.java @@ -0,0 +1,137 @@ +package com.jero.modules.monitor.domain; + +import java.util.HashMap; +import java.util.Map; + +public class RedisInfo { + + private static Map map = new HashMap<>(); + + static { + map.put("redis_version", "Redis 服务器版本"); + map.put("redis_git_sha1", "Git SHA1"); + map.put("redis_git_dirty", "Git dirty flag"); + map.put("os", "Redis 服务器的宿主操作系统"); + map.put("arch_bits", " 架构(32 或 64 位)"); + map.put("multiplexing_api", "Redis 所使用的事件处理机制"); + map.put("gcc_version", "编译 Redis 时所使用的 GCC 版本"); + map.put("process_id", "服务器进程的 PID"); + map.put("run_id", "Redis 服务器的随机标识符(用于 Sentinel 和集群)"); + map.put("tcp_port", "TCP/IP 监听端口"); + map.put("uptime_in_seconds", "自 Redis 服务器启动以来,经过的秒数"); + map.put("uptime_in_days", "自 Redis 服务器启动以来,经过的天数"); + map.put("lru_clock", " 以分钟为单位进行自增的时钟,用于 LRU 管理"); + map.put("connected_clients", "已连接客户端的数量(不包括通过从属服务器连接的客户端)"); + map.put("client_longest_output_list", "当前连接的客户端当中,最长的输出列表"); + map.put("client_longest_input_buf", "当前连接的客户端当中,最大输入缓存"); + map.put("blocked_clients", "正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量"); + map.put("used_memory", "由 Redis 分配器分配的内存总量,以字节(byte)为单位"); + map.put("used_memory_human", "以人类可读的格式返回 Redis 分配的内存总量"); + map.put("used_memory_rss", "从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top 、 ps 等命令的输出一致"); + map.put("used_memory_peak", " Redis 的内存消耗峰值(以字节为单位)"); + map.put("used_memory_peak_human", "以人类可读的格式返回 Redis 的内存消耗峰值"); + map.put("used_memory_lua", "Lua 引擎所使用的内存大小(以字节为单位)"); + map.put("mem_fragmentation_ratio", "sed_memory_rss 和 used_memory 之间的比率"); + map.put("mem_allocator", "在编译时指定的, Redis 所使用的内存分配器。可以是 libc 、 jemalloc 或者 tcmalloc"); + + map.put("redis_build_id", "redis_build_id"); + map.put("redis_mode", "运行模式,单机(standalone)或者集群(cluster)"); + map.put("atomicvar_api", "atomicvar_api"); + map.put("hz", "redis内部调度(进行关闭timeout的客户端,删除过期key等等)频率,程序规定serverCron每秒运行10次。"); + map.put("executable", "server脚本目录"); + map.put("config_file", "配置文件目录"); + map.put("client_biggest_input_buf", "当前连接的客户端当中,最大输入缓存,用client list命令观察qbuf和qbuf-free两个字段最大值"); + map.put("used_memory_rss_human", "以人类可读的方式返回 Redis 已分配的内存总量"); + map.put("used_memory_peak_perc", "内存使用率峰值"); + map.put("total_system_memory", "系统总内存"); + map.put("total_system_memory_human", "以人类可读的方式返回系统总内存"); + map.put("used_memory_lua_human", "以人类可读的方式返回Lua 引擎所使用的内存大小"); + map.put("maxmemory", "最大内存限制,0表示无限制"); + map.put("maxmemory_human", "以人类可读的方式返回最大限制内存"); + map.put("maxmemory_policy", "超过内存限制后的处理策略"); + map.put("loading", "服务器是否正在载入持久化文件"); + map.put("rdb_changes_since_last_save", "离最近一次成功生成rdb文件,写入命令的个数,即有多少个写入命令没有持久化"); + map.put("rdb_bgsave_in_progress", "服务器是否正在创建rdb文件"); + map.put("rdb_last_save_time", "离最近一次成功创建rdb文件的时间戳。当前时间戳 - rdb_last_save_time=多少秒未成功生成rdb文件"); + map.put("rdb_last_bgsave_status", "最近一次rdb持久化是否成功"); + map.put("rdb_last_bgsave_time_sec", "最近一次成功生成rdb文件耗时秒数"); + map.put("rdb_current_bgsave_time_sec", "如果服务器正在创建rdb文件,那么这个域记录的就是当前的创建操作已经耗费的秒数"); + map.put("aof_enabled", "是否开启了aof"); + map.put("aof_rewrite_in_progress", "标识aof的rewrite操作是否在进行中"); + map.put("aof_rewrite_scheduled", "rewrite任务计划,当客户端发送bgrewriteaof指令,如果当前rewrite子进程正在执行,那么将客户端请求的bgrewriteaof变为计划任务,待aof子进程结束后执行rewrite "); + + map.put("aof_last_rewrite_time_sec", "最近一次aof rewrite耗费的时长"); + map.put("aof_current_rewrite_time_sec", "如果rewrite操作正在进行,则记录所使用的时间,单位秒"); + map.put("aof_last_bgrewrite_status", "上次bgrewrite aof操作的状态"); + map.put("aof_last_write_status", "上次aof写入状态"); + + map.put("total_commands_processed", "redis处理的命令数"); + map.put("total_connections_received", "新创建连接个数,如果新创建连接过多,过度地创建和销毁连接对性能有影响,说明短连接严重或连接池使用有问题,需调研代码的连接设置"); + map.put("instantaneous_ops_per_sec", "redis当前的qps,redis内部较实时的每秒执行的命令数"); + map.put("total_net_input_bytes", "redis网络入口流量字节数"); + map.put("total_net_output_bytes", "redis网络出口流量字节数"); + + map.put("instantaneous_input_kbps", "redis网络入口kps"); + map.put("instantaneous_output_kbps", "redis网络出口kps"); + map.put("rejected_connections", "拒绝的连接个数,redis连接个数达到maxclients限制,拒绝新连接的个数"); + map.put("sync_full", "主从完全同步成功次数"); + + map.put("sync_partial_ok", "主从部分同步成功次数"); + map.put("sync_partial_err", "主从部分同步失败次数"); + map.put("expired_keys", "运行以来过期的key的数量"); + map.put("evicted_keys", "运行以来剔除(超过了maxmemory后)的key的数量"); + map.put("keyspace_hits", "命中次数"); + map.put("keyspace_misses", "没命中次数"); + map.put("pubsub_channels", "当前使用中的频道数量"); + map.put("pubsub_patterns", "当前使用的模式的数量"); + map.put("latest_fork_usec", "最近一次fork操作阻塞redis进程的耗时数,单位微秒"); + map.put("role", "实例的角色,是master or slave"); + map.put("connected_slaves", "连接的slave实例个数"); + map.put("master_repl_offset", "主从同步偏移量,此值如果和上面的offset相同说明主从一致没延迟"); + map.put("repl_backlog_active", "复制积压缓冲区是否开启"); + map.put("repl_backlog_size", "复制积压缓冲大小"); + map.put("repl_backlog_first_byte_offset", "复制缓冲区里偏移量的大小"); + map.put("repl_backlog_histlen", "此值等于 master_repl_offset - repl_backlog_first_byte_offset,该值不会超过repl_backlog_size的大小"); + map.put("used_cpu_sys", "将所有redis主进程在核心态所占用的CPU时求和累计起来"); + map.put("used_cpu_user", "将所有redis主进程在用户态所占用的CPU时求和累计起来"); + map.put("used_cpu_sys_children", "将后台进程在核心态所占用的CPU时求和累计起来"); + map.put("used_cpu_user_children", "将后台进程在用户态所占用的CPU时求和累计起来"); + map.put("cluster_enabled", "实例是否启用集群模式"); + map.put("db0", "db0的key的数量,以及带有生存期的key的数,平均存活时间"); + + } + + private String key; + private String value; + private String description; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + this.description = map.get(this.key); + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + @Override + public String toString() { + return "RedisInfo{" + "key='" + key + '\'' + ", value='" + value + '\'' + ", desctiption='" + description + '\'' + '}'; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/exception/RedisConnectException.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/exception/RedisConnectException.java new file mode 100644 index 00000000..dcd57062 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/exception/RedisConnectException.java @@ -0,0 +1,13 @@ +package com.jero.modules.monitor.exception; + +/** + * Redis 连接异常 + */ +public class RedisConnectException extends Exception { + + private static final long serialVersionUID = 1639374111871115063L; + + public RedisConnectException(String message) { + super(message); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java new file mode 100644 index 00000000..f98f2dcc --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/RedisService.java @@ -0,0 +1,39 @@ +package com.jero.modules.monitor.service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.alibaba.fastjson.JSONArray; +import com.jero.modules.monitor.domain.RedisInfo; +import com.jero.modules.monitor.exception.RedisConnectException; + +public interface RedisService { + + /** + * 获取 redis 的详细信息 + * + * @return List + */ + List getRedisInfo() throws RedisConnectException; + + /** + * 获取 redis key 数量 + * + * @return Map + */ + Map getKeysSize() throws RedisConnectException; + + /** + * 获取 redis 内存信息 + * + * @return Map + */ + Map getMemoryInfo() throws RedisConnectException; + /** + * 获取 报表需要个redis信息 + * + * @return Map + */ + Map getMapForReport(String type) throws RedisConnectException ; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java new file mode 100644 index 00000000..4d6a90c4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/MailHealthIndicator.java @@ -0,0 +1,29 @@ +package com.jero.modules.monitor.service.impl; + +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; +import org.springframework.stereotype.Component; + +/** + * 功能说明:自定义邮件检测 + * + * @author: 李波 + * @email: 503378406@qq.com + * @date: 2019-06-29 + */ +@Component +public class MailHealthIndicator implements HealthIndicator { + + + @Override public Health health() { + int errorCode = check(); + if (errorCode != 0) { + return Health.down().withDetail("Error Code", errorCode) .build(); + } + return Health.up().build(); + } + int check(){ + //可以实现自定义的数据库检测逻辑 + return 0; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java new file mode 100644 index 00000000..e5a439a6 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/monitor/service/impl/RedisServiceImpl.java @@ -0,0 +1,122 @@ +package com.jero.modules.monitor.service.impl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Properties; + +import javax.annotation.Resource; + +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Maps; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.monitor.domain.RedisInfo; +import com.jero.modules.monitor.exception.RedisConnectException; +import com.jero.modules.monitor.service.RedisService; +import org.springframework.cglib.beans.BeanMap; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.stereotype.Service; + +import lombok.extern.slf4j.Slf4j; + +/** + * Redis 监控信息获取 + * + * @Author MrBird + */ +@Service("redisService") +@Slf4j +public class RedisServiceImpl implements RedisService { + + @Resource + private RedisConnectionFactory redisConnectionFactory; + + /** + * Redis详细信息 + */ + @Override + public List getRedisInfo() throws RedisConnectException { + Properties info = redisConnectionFactory.getConnection().info(); + List infoList = new ArrayList<>(); + RedisInfo redisInfo = null; + for (Map.Entry entry : info.entrySet()) { + redisInfo = new RedisInfo(); + redisInfo.setKey(oConvertUtils.getString(entry.getKey())); + redisInfo.setValue(oConvertUtils.getString(entry.getValue())); + infoList.add(redisInfo); + } + return infoList; + } + + @Override + public Map getKeysSize() throws RedisConnectException { + Long dbSize = redisConnectionFactory.getConnection().dbSize(); + Map map = new HashMap<>(); + map.put("create_time", System.currentTimeMillis()); + map.put("dbSize", dbSize); + + log.info("--getKeysSize--: " + map.toString()); + return map; + } + + @Override + public Map getMemoryInfo() throws RedisConnectException { + Map map = null; + Properties info = redisConnectionFactory.getConnection().info(); + for (Map.Entry entry : info.entrySet()) { + String key = oConvertUtils.getString(entry.getKey()); + if ("used_memory".equals(key)) { + map = new HashMap<>(); + map.put("used_memory", entry.getValue()); + map.put("create_time", System.currentTimeMillis()); + } + } + log.info("--getMemoryInfo--: " + map.toString()); + return map; + } + + /** + * 查询redis信息for报表 + * @param type 1redis key数量 2 占用内存 3redis信息 + * @return + * @throws RedisConnectException + */ + @Override + public Map getMapForReport(String type) throws RedisConnectException { + Map mapJson=new HashMap (); + JSONArray json = new JSONArray(); + if("3".equals(type)){ + List redisInfo = getRedisInfo(); + for(RedisInfo info:redisInfo){ + Map map= Maps.newHashMap(); + BeanMap beanMap = BeanMap.create(info); + for (Object key : beanMap.keySet()) { + map.put(key+"", beanMap.get(key)); + } + json.add(map); + } + mapJson.put("data",json); + return mapJson; + } + for(int i = 0; i < 5; i++){ + JSONObject jo = new JSONObject(); + Map map; + if("1".equals(type)){ + map= getKeysSize(); + jo.put("value",map.get("dbSize")); + }else{ + map = getMemoryInfo(); + Integer used_memory = Integer.valueOf(map.get("used_memory").toString()); + jo.put("value",used_memory/1000); + } + String create_time = DateUtil.formatTime(DateUtil.date((Long) map.get("create_time")-(4-i)*1000)); + jo.put("name",create_time); + json.add(jo); + } + mapJson.put("data",json); + return mapJson; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java new file mode 100644 index 00000000..dd128638 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/aop/LogRecordAspect.java @@ -0,0 +1,46 @@ +package com.jero.modules.ngalain.aop; + +import javax.servlet.http.HttpServletRequest; + +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory;; + + +// 暂时注释掉,提高系统性能 +//@Aspect //定义一个切面 +//@Configuration +public class LogRecordAspect { +private static final Logger logger = LoggerFactory.getLogger(LogRecordAspect.class); + + // 定义切点Pointcut + @Pointcut("execution(public * com.jero.modules.*.*.*Controller.*(..))") + public void excudeService() { + } + + @Around("excudeService()") + public Object doAround(ProceedingJoinPoint pjp) throws Throwable { + RequestAttributes ra = RequestContextHolder.getRequestAttributes(); + ServletRequestAttributes sra = (ServletRequestAttributes) ra; + HttpServletRequest request = sra.getRequest(); + + String url = request.getRequestURL().toString(); + String method = request.getMethod(); + String uri = request.getRequestURI(); + String queryString = request.getQueryString(); + logger.info("请求开始, 各个参数, url: {}, method: {}, uri: {}, params: {}", url, method, uri, queryString); + + // result的值就是被拦截方法的返回值 + Object result = pjp.proceed(); + + logger.info("请求结束,controller的返回值是 " + result); + return result; + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java new file mode 100644 index 00000000..69b77313 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/controller/NgAlainController.java @@ -0,0 +1,86 @@ +package com.jero.modules.ngalain.controller; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.ngalain.service.NgAlainService; +import com.jero.modules.system.service.ISysDictService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@RestController +@RequestMapping("/sys/ng-alain") +public class NgAlainController { + @Autowired + private NgAlainService ngAlainService; + @Autowired + private ISysDictService sysDictService; + + @RequestMapping(value = "/getAppData") + @ResponseBody + public JSONObject getAppData(HttpServletRequest request) throws Exception { + String token=request.getHeader("X-Access-Token"); + JSONObject j = new JSONObject(); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + JSONObject userObjcet = new JSONObject(); + userObjcet.put("name", user.getUsername()); + userObjcet.put("avatar", user.getAvatar()); + userObjcet.put("email", user.getEmail()); + userObjcet.put("token", token); + j.put("user", userObjcet); + j.put("menu",ngAlainService.getMenu(user.getUsername())); + JSONObject app = new JSONObject(); + app.put("name", "jero-boot-angular"); + app.put("description", "jero+ng-alain整合版本"); + j.put("app", app); + return j; + } + + @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) + public Object getDictItems(@PathVariable String dictCode) { + log.info(" dictCode : "+ dictCode); + Result> result = new Result>(); + List ls = null; + try { + ls = sysDictService.queryDictItemsByCode(dictCode); + result.setSuccess(true); + result.setResult(ls); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + return result; + } + List dictlist=new ArrayList<>(); + for (DictModel l : ls) { + JSONObject dict=new JSONObject(); + try { + dict.put("value",Integer.parseInt(l.getValue())); + } catch (NumberFormatException e) { + dict.put("value",l.getValue()); + } + dict.put("label",l.getText()); + dictlist.add(dict); + } + return dictlist; + } + @RequestMapping(value = "/getDictItemsByTable/{table}/{key}/{value}", method = RequestMethod.GET) + public Object getDictItemsByTable(@PathVariable String table,@PathVariable String key,@PathVariable String value) { + return this.ngAlainService.getDictByTable(table,key,value); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java new file mode 100644 index 00000000..e9d5dbc5 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/NgAlainService.java @@ -0,0 +1,12 @@ +package com.jero.modules.ngalain.service; + +import com.alibaba.fastjson.JSONArray; + +import java.util.List; +import java.util.Map; + +public interface NgAlainService { + public JSONArray getMenu(String id) throws Exception; + public JSONArray getJeroMenu(String id) throws Exception; + public List> getDictByTable(String table, String key, String value); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java new file mode 100644 index 00000000..9999c614 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/ngalain/service/impl/NgAlainServiceImpl.java @@ -0,0 +1,180 @@ +package com.jero.modules.ngalain.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.ngalain.service.NgAlainService; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.mapper.SysDictMapper; +import com.jero.modules.system.service.ISysPermissionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Base64; +import java.util.List; +import java.util.Map; + +@Service("ngAlainService") +public class NgAlainServiceImpl implements NgAlainService { + @Autowired + private ISysPermissionService sysPermissionService; + @Autowired + private SysDictMapper mapper; + @Override + public JSONArray getMenu(String id) throws Exception { + return getJeroMenu(id); + } + @Override + public JSONArray getJeroMenu(String id) throws Exception { + List metaList = sysPermissionService.queryByUser(id); + JSONArray jsonArray = new JSONArray(); + getPermissionJsonArray(jsonArray, metaList, null); + JSONArray menulist= parseNgAlain(jsonArray); + JSONObject menu = new JSONObject(); + menu.put("text", "jero菜单"); + menu.put("group",true); + menu.put("children", menulist); + JSONArray jeroMenuList=new JSONArray(); + jeroMenuList.add(menu); + return jeroMenuList; + } + + @Override + public List> getDictByTable(String table, String key, String value) { + return this.mapper.getDictByTableNgAlain(table,key,value); + } + + private JSONArray parseNgAlain(JSONArray jsonArray) { + JSONArray menulist=new JSONArray(); + for (Object object : jsonArray) { + JSONObject jsonObject= (JSONObject) object; + String path= (String) jsonObject.get("path"); + JSONObject meta= (JSONObject) jsonObject.get("meta"); + JSONObject menu=new JSONObject(); + menu.put("text",meta.get("title")); + menu.put("reuse",true); + if (jsonObject.get("children")!=null){ + JSONArray child= parseNgAlain((JSONArray) jsonObject.get("children")); + menu.put("children",child); + JSONObject icon=new JSONObject(); + icon.put("type", "icon"); + icon.put("value", meta.get("icon")); + menu.put("icon",icon); + }else { + menu.put("link",path); + } + menulist.add(menu); + } + return menulist; + } + + /** + * 获取菜单JSON数组 + * @param jsonArray + * @param metaList + * @param parentJson + */ + private void getPermissionJsonArray(JSONArray jsonArray,List metaList,JSONObject parentJson) { + for (SysPermission permission : metaList) { + if(permission.getMenuType()==null) { + continue; + } + String tempPid = permission.getParentId(); + JSONObject json = getPermissionJsonObject(permission); + if(parentJson==null && oConvertUtils.isEmpty(tempPid)) { + jsonArray.add(json); + if(!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + }else if(parentJson!=null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))){ + if(permission.getMenuType()==0) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if(metaJson.containsKey("permissionList")) { + metaJson.getJSONArray("permissionList").add(json); + }else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put("permissionList", permissionList); + } + + }else if(permission.getMenuType()==1) { + if(parentJson.containsKey("children")) { + parentJson.getJSONArray("children").add(json); + }else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put("children", children); + } + + if(!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } + + + } + } + private JSONObject getPermissionJsonObject(SysPermission permission) { + JSONObject json = new JSONObject(); + //类型(0:一级菜单 1:子菜单 2:按钮) + if(permission.getMenuType()==2) { + json.put("action", permission.getPerms()); + json.put("describe", permission.getName()); + }else if(permission.getMenuType()==0||permission.getMenuType()==1) { + json.put("id", permission.getId()); + if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { + String url= new String(Base64.getUrlEncoder().encode(permission.getUrl().getBytes())); + json.put("path", "/sys/link/" +url.replaceAll("=","")); + }else { + json.put("path", permission.getUrl()); + } + + //重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) + json.put("name", urlToRouteName(permission.getUrl())); + + //是否隐藏路由,默认都是显示的 + if(permission.isHidden()) { + json.put("hidden",true); + } + //聚合路由 + if(permission.isAlwaysShow()) { + json.put("alwaysShow",true); + } + json.put("component", permission.getComponent()); + JSONObject meta = new JSONObject(); + meta.put("title", permission.getName()); + if(oConvertUtils.isEmpty(permission.getParentId())) { + //一级菜单跳转地址 + json.put("redirect",permission.getRedirect()); + meta.put("icon", oConvertUtils.getString(permission.getIcon(), "")); + }else { + meta.put("icon", oConvertUtils.getString(permission.getIcon(), "")); + } + if(permission.getUrl()!=null&&(permission.getUrl().startsWith("http://")||permission.getUrl().startsWith("https://"))) { + meta.put("url", permission.getUrl()); + } + json.put("meta", meta); + } + + return json; + } + /** + * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) + * 举例: URL = /isystem/role + * RouteName = isystem-role + * @return + */ + private String urlToRouteName(String url) { + if(oConvertUtils.isNotEmpty(url)) { + if(url.startsWith("/")) { + url = url.substring(1); + } + url = url.replace("/", "-"); + return url; + }else { + return null; + } + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java new file mode 100644 index 00000000..b9bf4a6e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/controller/OSSFileController.java @@ -0,0 +1,97 @@ +package com.jero.modules.oss.controller; + +import javax.servlet.http.HttpServletRequest; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.multipart.MultipartFile; + +@Slf4j +@Controller +@RequestMapping("/sys/oss/file") +public class OSSFileController { + + @Autowired + private IOSSFileService ossFileService; + + @ResponseBody + @GetMapping("/page") + public Result> queryPageList(OSSFile file, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result<>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(file, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = ossFileService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @ResponseBody + @PostMapping("/upload") + //@RequiresRoles("admin") + public Result upload(@RequestParam("file") MultipartFile multipartFile) { + Result result = new Result(); + try { + ossFileService.upload(multipartFile); + result.success("上传成功!"); + } + catch (Exception ex) { + log.info(ex.getMessage(), ex); + result.error500("上传失败"); + } + return result; + } + + @ResponseBody + @DeleteMapping("/delete") + public Result delete(@RequestParam(name = "id") String id) { + Result result = new Result(); + OSSFile file = ossFileService.getById(id); + if (file == null) { + result.error500("未找到对应实体"); + } + else { + boolean ok = ossFileService.delete(file); + if (ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * 通过id查询. + */ + @ResponseBody + @GetMapping("/queryById") + public Result queryById(@RequestParam(name = "id") String id) { + Result result = new Result<>(); + OSSFile file = ossFileService.getById(id); + if (file == null) { + result.error500("未找到对应实体"); + } + else { + result.setResult(file); + result.setSuccess(true); + } + return result; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java new file mode 100644 index 00000000..9c1d7383 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/entity/OSSFile.java @@ -0,0 +1,24 @@ +package com.jero.modules.oss.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.jero.common.system.base.entity.JeroEntity; +import org.jeecgframework.poi.excel.annotation.Excel; + +@Data +@TableName("oss_file") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class OSSFile extends JeroEntity { + + private static final long serialVersionUID = 1L; + + @Excel(name = "文件名称") + private String fileName; + + @Excel(name = "文件地址") + private String url; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java new file mode 100644 index 00000000..688bd518 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/mapper/OSSFileMapper.java @@ -0,0 +1,8 @@ +package com.jero.modules.oss.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.oss.entity.OSSFile; + +public interface OSSFileMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java new file mode 100644 index 00000000..ce609eec --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/IOSSFileService.java @@ -0,0 +1,15 @@ +package com.jero.modules.oss.service; + +import java.io.IOException; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.oss.entity.OSSFile; +import org.springframework.web.multipart.MultipartFile; + +public interface IOSSFileService extends IService { + + void upload(MultipartFile multipartFile) throws IOException; + + boolean delete(OSSFile ossFile); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java new file mode 100644 index 00000000..8376de8a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/oss/service/impl/OSSFileServiceImpl.java @@ -0,0 +1,43 @@ +package com.jero.modules.oss.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.util.CommonUtils; +import com.jero.common.util.oss.OssBootUtil; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.mapper.OSSFileMapper; +import com.jero.modules.oss.service.IOSSFileService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@Service("ossFileService") +public class OSSFileServiceImpl extends ServiceImpl implements IOSSFileService { + + @Override + public void upload(MultipartFile multipartFile) throws IOException { + String fileName = multipartFile.getOriginalFilename(); + fileName = CommonUtils.getFileName(fileName); + OSSFile ossFile = new OSSFile(); + ossFile.setFileName(fileName); + String url = OssBootUtil.upload(multipartFile,"upload/test"); + //update-begin--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- + // 返回阿里云原生域名前缀URL + ossFile.setUrl(OssBootUtil.getOriginalUrl(url)); + //update-end--Author:scott Date:20201227 for:JT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败------------------- + this.save(ossFile); + } + + @Override + public boolean delete(OSSFile ossFile) { + try { + this.removeById(ossFile.getId()); + OssBootUtil.deleteUrl(ossFile.getUrl()); + } + catch (Exception ex) { + return false; + } + return true; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java new file mode 100644 index 00000000..03ea71ca --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/controller/QuartzJobController.java @@ -0,0 +1,286 @@ +package com.jero.modules.quartz.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.ImportExcelUtil; +import com.jero.modules.quartz.entity.QuartzJob; +import com.jero.modules.quartz.service.IQuartzJobService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; + +/** + * @Description: 定时任务在线管理 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version:V1.0 + */ +@RestController +@RequestMapping("/sys/quartzJob") +@Slf4j +@Api(tags = "定时任务接口") +public class QuartzJobController { + @Autowired + private IQuartzJobService quartzJobService; + @Autowired + private Scheduler scheduler; + + /** + * 分页列表查询 + * + * @param quartzJob + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result queryPageList(QuartzJob quartzJob, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = quartzJobService.page(page, queryWrapper); + return Result.OK(pageList); + + } + + /** + * 添加定时任务 + * + * @param quartzJob + * @return + */ + //@RequiresRoles("admin") + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody QuartzJob quartzJob) { + List list = quartzJobService.findByJobClassName(quartzJob.getJobClassName()); + if (list != null && list.size() > 0) { + return Result.error("该定时任务类名已存在"); + } + quartzJobService.saveAndScheduleJob(quartzJob); + return Result.OK("创建定时任务成功"); + } + + /** + * 更新定时任务 + * + * @param quartzJob + * @return + */ + //@RequiresRoles("admin") + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result eidt(@RequestBody QuartzJob quartzJob) { + try { + quartzJobService.editAndScheduleJob(quartzJob); + } catch (SchedulerException e) { + log.error(e.getMessage(),e); + return Result.error("更新定时任务失败!"); + } + return Result.OK("更新定时任务成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + //@RequiresRoles("admin") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + return Result.error("未找到对应实体"); + } + quartzJobService.deleteAndStopJob(quartzJob); + return Result.OK("删除成功!"); + + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + //@RequiresRoles("admin") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + if (ids == null || "".equals(ids.trim())) { + return Result.error("参数不识别!"); + } + for (String id : Arrays.asList(ids.split(","))) { + QuartzJob job = quartzJobService.getById(id); + quartzJobService.deleteAndStopJob(job); + } + return Result.OK("删除定时任务成功!"); + } + + /** + * 暂停定时任务 + * + * @param jobClassName + * @return + */ + //@RequiresRoles("admin") + @GetMapping(value = "/pause") + @ApiOperation(value = "暂停定时任务") + public Result pauseJob(@RequestParam(name = "jobClassName", required = true) String jobClassName) { + QuartzJob job = null; + job = quartzJobService.getOne(new LambdaQueryWrapper().eq(QuartzJob::getJobClassName, jobClassName)); + if (job == null) { + return Result.error("定时任务不存在!"); + } + quartzJobService.pause(job); + return Result.OK("暂停定时任务成功"); + } + + /** + * 启动定时任务 + * + * @param jobClassName + * @return + */ + //@RequiresRoles("admin") + @GetMapping(value = "/resume") + @ApiOperation(value = "恢复定时任务") + public Result resumeJob(@RequestParam(name = "jobClassName", required = true) String jobClassName) { + QuartzJob job = quartzJobService.getOne(new LambdaQueryWrapper().eq(QuartzJob::getJobClassName, jobClassName)); + if (job == null) { + return Result.error("定时任务不存在!"); + } + quartzJobService.resumeJob(job); + //scheduler.resumeJob(JobKey.jobKey(job.getJobClassName().trim())); + return Result.OK("恢复定时任务成功"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); + return Result.OK(quartzJob); + } + + /** + * 导出excel + * + * @param request + * @param quartzJob + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, QuartzJob quartzJob) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(quartzJob, request.getParameterMap()); + // Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = quartzJobService.list(queryWrapper); + // 导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "定时任务列表"); + mv.addObject(NormalExcelConstants.CLASS, QuartzJob.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("定时任务列表数据", "导出人:Jero", "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) throws IOException { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listQuartzJobs = ExcelImportUtil.importExcel(file.getInputStream(), QuartzJob.class, params); + List list = ImportExcelUtil.importDateSave(listQuartzJobs, IQuartzJobService.class, errorMessage,CommonConstant.SQL_INDEX_UNIQ_JOB_CLASS_NAME); + errorLines+=list.size(); + successLines+=(listQuartzJobs.size()-errorLines); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + } + + /** + * 立即执行 + * @param id + * @return + */ + //@RequiresRoles("admin") + @GetMapping("/execute") + public Result execute(@RequestParam(name = "id", required = true) String id) { + QuartzJob quartzJob = quartzJobService.getById(id); + if (quartzJob == null) { + return Result.error("未找到对应实体"); + } + try { + quartzJobService.execute(quartzJob); + } catch (Exception e) { + //e.printStackTrace(); + log.info("定时任务 立即执行失败>>"+e.getMessage()); + return Result.error("执行失败!"); + } + return Result.OK("执行成功!"); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java new file mode 100644 index 00000000..383b3d53 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/entity/QuartzJob.java @@ -0,0 +1,62 @@ +package com.jero.modules.quartz.entity; + +import java.io.Serializable; + +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +/** + * @Description: 定时任务在线管理 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +@Data +@TableName("sys_quartz_job") +public class QuartzJob implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /**创建人*/ + private java.lang.String createBy; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**删除状态*/ + private java.lang.Integer delFlag; + /**修改人*/ + private java.lang.String updateBy; + /**修改时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /**任务类名*/ + @Excel(name="任务类名",width=40) + private java.lang.String jobClassName; + /**cron表达式*/ + @Excel(name="cron表达式",width=30) + private java.lang.String cronExpression; + /**参数*/ + @Excel(name="参数",width=15) + private java.lang.String parameter; + /**描述*/ + @Excel(name="描述",width=40) + private java.lang.String description; + /**状态 0正常 -1停止*/ + @Excel(name="状态",width=15,dicCode="quartz_status") + @Dict(dicCode = "quartz_status") + private java.lang.Integer status; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java new file mode 100644 index 00000000..844a0a3a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/AsyncJob.java @@ -0,0 +1,35 @@ +package com.jero.modules.quartz.job; + +import lombok.extern.slf4j.Slf4j; +import com.jero.common.util.DateUtils; +import org.quartz.*; + +/** + * @Description: 同步定时任务测试 + * + * 此处的同步是指 当定时任务的执行时间大于任务的时间间隔时 + * 会等待第一个任务执行完成才会走第二个任务 + * + * + * @author: taoyan + * @date: 2020年06月19日 + */ +@PersistJobDataAfterExecution +@DisallowConcurrentExecution +@Slf4j +public class AsyncJob implements Job { + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + log.info(" --- 同步任务调度开始 --- "); + try { + //此处模拟任务执行时间 5秒 任务表达式配置为每秒执行一次:0/1 * * * * ? * + Thread.sleep(5000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + //测试发现 每5秒执行一次 + log.info(" --- 执行完毕,时间:"+DateUtils.now()+"---"); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java new file mode 100644 index 00000000..a9eee88e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleJob.java @@ -0,0 +1,23 @@ +package com.jero.modules.quartz.job; + +import com.jero.common.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 示例不带参定时任务 + * + * @Author Scott + */ +@Slf4j +public class SampleJob implements Job { + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + log.info(String.format(" jero-boot 普通定时任务 SampleJob ! 时间:" + DateUtils.getTimestamp())); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java new file mode 100644 index 00000000..0d2b289d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/job/SampleParamJob.java @@ -0,0 +1,32 @@ +package com.jero.modules.quartz.job; + +import com.jero.common.util.DateUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import lombok.extern.slf4j.Slf4j; + +/** + * 示例带参定时任务 + * + * @Author Scott + */ +@Slf4j +public class SampleParamJob implements Job { + + /** + * 若参数变量名修改 QuartzJobController中也需对应修改 + */ + private String parameter; + + public void setParameter(String parameter) { + this.parameter = parameter; + } + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + log.info(String.format("welcome %s! jero-boot 带参数定时任务 SampleParamJob ! 时间:" + DateUtils.now(), this.parameter)); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/QuartzJobMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/QuartzJobMapper.java new file mode 100644 index 00000000..377c8ccc --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/QuartzJobMapper.java @@ -0,0 +1,20 @@ +package com.jero.modules.quartz.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.quartz.entity.QuartzJob; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 定时任务在线管理 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +public interface QuartzJobMapper extends BaseMapper { + + public List findByJobClassName(@Param("jobClassName") String jobClassName); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/xml/QuartzJobMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/xml/QuartzJobMapper.xml new file mode 100644 index 00000000..2b7651e2 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/mapper/xml/QuartzJobMapper.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java new file mode 100644 index 00000000..4fb5a187 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/IQuartzJobService.java @@ -0,0 +1,40 @@ +package com.jero.modules.quartz.service; + +import java.util.List; + +import com.jero.modules.quartz.entity.QuartzJob; +import org.quartz.SchedulerException; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 定时任务在线管理 + * @Author: jero-boot + * @Date: 2019-04-28 + * @Version: V1.1 + */ +public interface IQuartzJobService extends IService { + + List findByJobClassName(String jobClassName); + + boolean saveAndScheduleJob(QuartzJob quartzJob); + + boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException; + + boolean deleteAndStopJob(QuartzJob quartzJob); + + boolean resumeJob(QuartzJob quartzJob); + + /** + * 执行定时任务 + * @param quartzJob + */ + void execute(QuartzJob quartzJob) throws Exception; + + /** + * 暂停任务 + * @param quartzJob + * @throws SchedulerException + */ + void pause(QuartzJob quartzJob); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java new file mode 100644 index 00000000..d039b6df --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -0,0 +1,174 @@ +package com.jero.modules.quartz.service.impl; + +import java.util.Date; +import java.util.List; + +import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.DateUtils; +import com.jero.modules.quartz.entity.QuartzJob; +import com.jero.modules.quartz.mapper.QuartzJobMapper; +import com.jero.modules.quartz.service.IQuartzJobService; +import org.quartz.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Description: 定时任务在线管理 + * @Author: jero-boot + * @Date: 2019-04-28 + * @Version: V1.1 + */ +@Slf4j +@Service +public class QuartzJobServiceImpl extends ServiceImpl implements IQuartzJobService { + @Autowired + private QuartzJobMapper quartzJobMapper; + @Autowired + private Scheduler scheduler; + + /** + * 立即执行的任务分组 + */ + private static final String JOB_TEST_GROUP = "test_group"; + + @Override + public List findByJobClassName(String jobClassName) { + return quartzJobMapper.findByJobClassName(jobClassName); + } + + /** + * 保存&启动定时任务 + */ + @Override + public boolean saveAndScheduleJob(QuartzJob quartzJob) { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + // 定时器添加 + this.schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } + // DB设置修改 + quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); + return this.save(quartzJob); + } + + /** + * 恢复定时任务 + */ + @Override + public boolean resumeJob(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getJobClassName().trim()); + schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + quartzJob.setStatus(CommonConstant.STATUS_NORMAL); + return this.updateById(quartzJob); + } + + /** + * 编辑&启停定时任务 + * @throws SchedulerException + */ + @Override + public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + schedulerDelete(quartzJob.getJobClassName().trim()); + schedulerAdd(quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + }else{ + scheduler.pauseJob(JobKey.jobKey(quartzJob.getJobClassName().trim())); + } + return this.updateById(quartzJob); + } + + /** + * 删除&停止删除定时任务 + */ + @Override + public boolean deleteAndStopJob(QuartzJob job) { + schedulerDelete(job.getJobClassName().trim()); + boolean ok = this.removeById(job.getId()); + return ok; + } + + @Override + public void execute(QuartzJob quartzJob) throws Exception { + String jobName = quartzJob.getJobClassName().trim(); + Date startDate = new Date(); + String ymd = DateUtils.date2Str(startDate,DateUtils.yyyymmddhhmmss.get()); + String identity = jobName + ymd; + //3秒后执行 只执行一次 + startDate.setTime(startDate.getTime()+3000L); + // 定义一个Trigger + SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() + .withIdentity(identity, JOB_TEST_GROUP) + .startAt(startDate) + .build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); + // 将trigger和 jobDetail 加入这个调度 + scheduler.scheduleJob(jobDetail, trigger); + // 启动scheduler + scheduler.start(); + } + + @Override + public void pause(QuartzJob quartzJob){ + schedulerDelete(quartzJob.getJobClassName().trim()); + quartzJob.setStatus(CommonConstant.STATUS_DISABLE); + this.updateById(quartzJob); + } + + /** + * 添加定时任务 + * + * @param jobClassName + * @param cronExpression + * @param parameter + */ + private void schedulerAdd(String jobClassName, String cronExpression, String parameter) { + try { + // 启动调度器 + scheduler.start(); + + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(jobClassName).usingJobData("parameter", parameter).build(); + + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(jobClassName).withSchedule(scheduleBuilder).build(); + + scheduler.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + throw new JeroBootException("创建定时任务失败", e); + } catch (RuntimeException e) { + throw new JeroBootException(e.getMessage(), e); + }catch (Exception e) { + throw new JeroBootException("后台找不到该类名:" + jobClassName, e); + } + } + + /** + * 删除定时任务 + * + * @param jobClassName + */ + private void schedulerDelete(String jobClassName) { + try { + scheduler.pauseTrigger(TriggerKey.triggerKey(jobClassName)); + scheduler.unscheduleJob(TriggerKey.triggerKey(jobClassName)); + scheduler.deleteJob(JobKey.jobKey(jobClassName)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new JeroBootException("删除定时任务失败"); + } + } + + private static Job getClass(String classname) throws Exception { + Class class1 = Class.forName(classname); + return (Job) class1.newInstance(); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java new file mode 100644 index 00000000..417ec415 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/CommonController.java @@ -0,0 +1,272 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.*; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.api.ISysBaseAPI; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.http.server.ServletServerHttpRequest; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.HandlerMapping; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLDecoder; +/** + *

+ * 用户表 前端控制器 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +@Slf4j +@RestController +@RequestMapping("/sys/common") +public class CommonController { + + @Autowired + private ISysBaseAPI sysBaseAPI; + + @Resource + private IOSSFileService ossFileService; + + @Value(value = "${jero.path.upload}") + private String uploadpath; + + /** + * 本地:local minio:minio 阿里:alioss + */ + @Value(value="${jero.uploadType}") + private String uploadType; + /** + * 文件后缀黑名单 + */ + @Value(value="${jero.fileSuffixLimits}") + private String[] fileSuffixLimits; + + /** + * @Author 政辉 + * @return + */ + @GetMapping("/403") + public Result noauth() { + return Result.error("没有权限,请联系管理员授权"); + } + + /** + * 文件上传统一方法 + * @param request + * @param response + * @return + */ + @PostMapping(value = "/upload") + public Result upload(HttpServletRequest request, HttpServletResponse response) { + Result result = new Result<>(); + String savePath = ""; + String bizPath = request.getParameter("biz"); + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + // 获取上传文件对象 + MultipartFile file = multipartRequest.getFile("file"); + // 文件类型是否处于黑名单 + if(CommonUtils.limitFileSuffix(file.getOriginalFilename(),fileSuffixLimits)){ + result.setMessage("该文件类型不允许上传"); + result.setSuccess(false); + result.setCode(0); + return result; + } + if(oConvertUtils.isEmpty(bizPath)){ + bizPath = ""; + } + if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ + // 本地上传 + savePath = CommonUtils.uploadLocal(file,bizPath,uploadpath); + }else{ + // minio上传 + savePath = CommonUtils.upload(file, bizPath, uploadType); + } + if(oConvertUtils.isNotEmpty(savePath)){ + //上传成功 进行数据库存储 + OSSFile ossFile = new OSSFile(); + // 文件名 + String fileName = file.getOriginalFilename(); + fileName = CommonUtils.getFileName(fileName); + ossFile.setFileName(fileName); + ossFile.setUrl(savePath); + ossFileService.save(ossFile); + result.setMessage(savePath); + result.setResult(ossFile); + result.setSuccess(true); + }else { + result.setMessage("上传失败!"); + result.setSuccess(false); + } + return result; + } + + /** + * 预览图片&下载文件 + * + * @param id 传入文件id + * @param request + * @param response + */ + @GetMapping(value = "/download/{id}") + public void view(@PathVariable String id,HttpServletRequest request, HttpServletResponse response) { + // 查询数据表数据是否存在 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(OSSFile::getId,id); + OSSFile ossFile = ossFileService.getOne(queryWrapper); + if( null == ossFile){ + throw new JeroBootException("文件不存在.."); + } + String fileUrl = ossFile.getUrl(); + InputStream inputStream = null; + OutputStream outputStream = null; + try { + String fileName = ""; + if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){ + //本地下载 + String filePath = uploadpath + File.separator + fileUrl; + File file = new File(filePath); + if(!file.exists()){ + response.setStatus(404); + throw new RuntimeException("文件不存在.."); + } + // 文件名称 + fileName = file.getName(); + inputStream = new BufferedInputStream(new FileInputStream(filePath)); + }else if(CommonConstant.UPLOAD_TYPE_MINIO.equals(uploadType)){ + // minio 下载 + // 通过MinioUtil查询时 只需要桶后面的路径 + String minioUrl = MinioUtil.getMinioUrl(); + // Linux/unix 系统下文件路径分隔符为"/" 获取minio与存储桶的路径 + minioUrl = minioUrl + MinioUtil.getBucketName() + "/"; + String url = fileUrl.replace(minioUrl, ""); + // 文件名称 + fileName = ossFile.getFileName(); + inputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); + } + response.addHeader("Content-Disposition", "attachment;fileName=" + new String(fileName.getBytes("UTF-8"),"iso-8859-1")); + response.setContentType("application/force-download");// 设置强制下载不打开 + outputStream = response.getOutputStream(); + byte[] buf = new byte[1024]; + int len; + while ((len = inputStream.read(buf)) > 0) { + outputStream.write(buf, 0, len); + } + response.flushBuffer(); + } catch (IOException e) { + log.error("预览文件失败" + e.getMessage()); + response.setStatus(404); + e.printStackTrace(); + } finally { + if (inputStream != null) { + try { + inputStream.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + if (outputStream != null) { + try { + outputStream.close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + + } + + /** + * @功能:pdf预览Iframe + * @param modelAndView + * @return + */ + @RequestMapping("/pdf/pdfPreviewIframe") + public ModelAndView pdfPreviewIframe(ModelAndView modelAndView) { + modelAndView.setViewName("pdfPreviewIframe"); + return modelAndView; + } + + /** + * 把指定URL后的字符串全部截断当成参数 + * 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题 + * @param request + * @return + */ + private static String extractPathFromPattern(final HttpServletRequest request) { + String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); + String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); + return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path); + } + + /** + * 中转HTTP请求,解决跨域问题 + * + * @param url 必填:请求地址 + * @return + */ + @RequestMapping("/transitRESTful") + public Result transitRESTful(@RequestParam("url") String url, HttpServletRequest request) { + try { + ServletServerHttpRequest httpRequest = new ServletServerHttpRequest(request); + // 中转请求method、body + HttpMethod method = httpRequest.getMethod(); + JSONObject params; + try { + params = JSON.parseObject(JSON.toJSONString(httpRequest.getBody())); + } catch (Exception e) { + params = new JSONObject(); + } + // 中转请求问号参数 + JSONObject variables = JSON.parseObject(JSON.toJSONString(request.getParameterMap())); + variables.remove("url"); + // 在 headers 里传递Token + String token = TokenUtils.getTokenByRequest(request); + HttpHeaders headers = new HttpHeaders(); + headers.set("X-Access-Token", token); + // 发送请求 + String httpURL = URLDecoder.decode(url, "UTF-8"); + ResponseEntity response = RestUtil.request(httpURL, method, headers , variables, params, String.class); + // 封装返回结果 + Result result = new Result<>(); + int statusCode = response.getStatusCodeValue(); + result.setCode(statusCode); + result.setSuccess(statusCode == 200); + String responseBody = response.getBody(); + try { + // 尝试将返回结果转为JSON + Object json = JSON.parse(responseBody); + result.setResult(json); + } catch (Exception e) { + // 转成JSON失败,直接返回原始数据 + result.setResult(responseBody); + } + return result; + } catch (Exception e) { + log.debug("中转HTTP请求失败", e); + return Result.error(e.getMessage()); + } + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java new file mode 100644 index 00000000..d218bb5d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/DuplicateCheckController.java @@ -0,0 +1,89 @@ +package com.jero.modules.system.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.modules.system.entity.SysConfusion; +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.jero.modules.system.mapper.SysConfusionMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.util.SqlInjectionUtil; +import com.jero.modules.system.mapper.SysDictMapper; +import com.jero.modules.system.model.DuplicateCheckVo; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +/** + * @Title: DuplicateCheckAction + * @Description: 重复校验工具 + * @Author 张代浩 + * @Date 2019-03-25 + * @Version V1.0 + */ +@Slf4j +@RestController +@RequestMapping("/sys/duplicate") +@Api(tags = "重复校验") +public class DuplicateCheckController { + + @Resource + SysDictMapper sysDictMapper; + + @Resource + SysConfusionMapper sysConfusionMapper; + + /** + * 校验数据是否在系统中是否存在 + * + * @return + */ + @RequestMapping(value = "/check", method = RequestMethod.GET) + @ApiOperation("重复校验接口") + public Result doDuplicateCheck(@Validated DuplicateCheckVo duplicateCheckVo, HttpServletRequest request) { + Long num = null; + SysConfusion sysConfusion = changeRealName(duplicateCheckVo.getConfusionCode()); + + duplicateCheckVo.setTableName(sysConfusion.getTableName()); + duplicateCheckVo.setFieldName(sysConfusion.getFieldName()); + log.info("----duplicate check------:" + duplicateCheckVo.toString()); + //关联表字典(举例:sys_user,realname,id) + //SQL注入校验(只限制非法串改数据库) + final String[] sqlInjCheck = {duplicateCheckVo.getTableName(), duplicateCheckVo.getFieldName()}; + SqlInjectionUtil.filterContent(sqlInjCheck); + if (StringUtils.isNotBlank(duplicateCheckVo.getDataId())) { + // [2].编辑页面校验 + num = sysDictMapper.duplicateCheckCountSql(duplicateCheckVo); + } else { + // [1].添加页面校验 + num = sysDictMapper.duplicateCheckCountSqlNoDataId(duplicateCheckVo); + } + + if (num == null || num == 0) { + // 该值可用 + return Result.OK("该值可用!"); + } else { + // 该值不可用 + log.info("该值不可用,系统中已存在!"); + return Result.error("该值不可用,系统中已存在!"); + } + } + + /** + * 根据混淆code转换为真实表名和字段名 + * + * @param confusionCode 混淆code + * @return 真实表名和字段名 + */ + private SysConfusion changeRealName(String confusionCode) { + + SysConfusion sysConfusion = sysConfusionMapper.selectOne(new QueryWrapper().lambda().eq(SysConfusion::getConfusionCode, confusionCode)); + return sysConfusion; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java new file mode 100644 index 00000000..85751c08 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/LoginController.java @@ -0,0 +1,574 @@ +package com.jero.modules.system.controller; + +import cn.hutool.core.util.RandomUtil; +import cn.hutool.crypto.asymmetric.RSA; +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.exceptions.ClientException; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.*; +import com.jero.common.util.encryption.EncryptedString; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.SysLoginModel; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.service.ISysLogService; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.system.util.RandImageUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.security.KeyPair; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.*; + +/** + * @Author scott + * @since 2018-12-17 + */ +@RestController +@RequestMapping("/sys") +@Api(tags = "用户登录") +@Slf4j +public class LoginController { + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + private ISysLogService logService; + @Autowired + private RedisUtil redisUtil; + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private ISysDictService sysDictService; + @Resource + private BaseCommonService baseCommonService; + + private static final String BASE_CHECK_CODES = "qwertyuiplkjhgfdsazxcvbnmQWERTYUPLKJHGFDSAZXCVBNM1234567890"; + /** + * 密码登录错误的次数前缀 + */ + public static final String RETRY_LOGIN_PREFIX = "login:retryLoginCount_"; + /** + * 密码登录错误的最大限制次数 + */ + public static final int RETRY_LOGIN_MAX_COUNT = 5; + + @ApiOperation("登录接口") + @RequestMapping(value = "/login", method = RequestMethod.POST) + public Result login(@RequestBody SysLoginModel sysLoginModel) { + Result result = new Result<>(); + String username = sysLoginModel.getUsername(); + String password = sysLoginModel.getPassword(); + String rsaPublicKey = sysLoginModel.getRsaPublicKey(); + String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey)); + //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 + //前端密码加密,后端进行密码解密 + //password = AesEncryptUtil.desEncrypt(sysLoginModel.getPassword().replaceAll("%2B", "\\+")).trim();//密码解密 + //update-begin--Author:scott Date:20190805 for:暂时注释掉密码加密逻辑,有点问题 + //update-begin-author:taoyan date:20190828 for:校验验证码 + String captcha = sysLoginModel.getCaptcha(); + if (captcha == null) { + result.error500("验证码无效"); + return result; + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + sysLoginModel.getCheckKey(), "utf-8"); + Object checkCode = redisUtil.get(realKey); + //当进入登录页时,有一定几率出现验证码错误 #1714 + if (checkCode == null || !checkCode.toString().equals(lowerCaseCaptcha)) { + result.error500("验证码错误"); + return result; + } else { + redisUtil.del(realKey); + } + try { + //解密获取密码和用户名 + password = CommonUtils.decryptBtRsaPriKey(password, rsaPrivateKey); + username = CommonUtils.decryptBtRsaPriKey(username, rsaPrivateKey); + } catch (Exception e) { + e.printStackTrace(); + } + //1. 校验用户是否有效 + //update-begin-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysUser::getUsername, username); + SysUser sysUser = sysUserService.getOne(queryWrapper); + //update-end-author:wangshuai date:20200601 for: 登录代码验证用户是否注销bug,if条件永远为false + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + // 若用户名有效,则查询该账号的登陆失败次数是否符合等保要求 + int retryCount = 0; + if (redisUtil.get(RETRY_LOGIN_PREFIX + username) != null) { + retryCount = (int) redisUtil.get(RETRY_LOGIN_PREFIX + username); + } + if (retryCount >= RETRY_LOGIN_MAX_COUNT) { + result.error500("密码错误次数过多,请稍后重试"); + return result; + } + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if (!syspassword.equals(userpassword)) { + // 重试登录次数加一 + retryCount++; + if (retryCount == 1) { + redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, 60 * 30); + } else { + redisUtil.set(RETRY_LOGIN_PREFIX + username, retryCount, redisUtil.getExpire(RETRY_LOGIN_PREFIX + username)); + } + String msg = retryCount == RETRY_LOGIN_MAX_COUNT ? "密码错误次数过多,请稍后重试" : "用户名或密码错误,剩余可登录次数:" + (RETRY_LOGIN_MAX_COUNT - retryCount); + result.error500(msg); + return result; + } + //登录成功,清除错误登录次数 + redisUtil.del(RETRY_LOGIN_PREFIX + username); + + //用户登录信息 + userInfo(sysUser, result); + //update-begin--Author:wangshuai Date:20200714 for:登录日志没有记录人员 + LoginUser loginUser = new LoginUser(); + BeanUtils.copyProperties(sysUser, loginUser); + baseCommonService.addLog("用户名: " + username + ",登录成功!", CommonConstant.LOG_TYPE_1, null, loginUser); + //update-end--Author:wangshuai Date:20200714 for:登录日志没有记录人员 + return result; + } + + /** + * 退出登录 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/logout") + public Result logout(HttpServletRequest request, HttpServletResponse response) { + //用户退出逻辑 + String token = request.getHeader(CommonConstant.X_ACCESS_TOKEN); + if (oConvertUtils.isEmpty(token)) { + return Result.error("退出登录失败!"); + } + String username = JwtUtil.getUsername(token); + LoginUser sysUser = sysBaseAPI.getUserByName(username); + if (sysUser != null) { + //update-begin--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + baseCommonService.addLog("用户名: " + sysUser.getRealname() + ",退出成功!", CommonConstant.LOG_TYPE_1, null, sysUser); + //update-end--Author:wangshuai Date:20200714 for:登出日志没有记录人员 + log.info(" 用户名: " + sysUser.getRealname() + ",退出成功! "); + //清空用户登录Token缓存 + redisUtil.del(CommonConstant.PREFIX_USER_TOKEN + token); + //清空用户登录Shiro权限缓存 + redisUtil.del(CommonConstant.PREFIX_USER_SHIRO_CACHE + sysUser.getId()); + //清空用户的缓存信息(包括部门信息),例如sys:cache:user:: + redisUtil.del(String.format("%s::%s", CacheConstant.SYS_USERS_CACHE, sysUser.getUsername())); + //调用shiro的logout + SecurityUtils.getSubject().logout(); + return Result.OK("退出登录成功!"); + } else { + return Result.error("Token无效!"); + } + } + + /** + * 获取访问量 + * + * @return + */ + @GetMapping("loginfo") + public Result loginfo() { + Result result = new Result(); + JSONObject obj = new JSONObject(); + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + // 获取一天的开始和结束时间 + Calendar calendar = new GregorianCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date dayStart = calendar.getTime(); + calendar.add(Calendar.DATE, 1); + Date dayEnd = calendar.getTime(); + // 获取系统访问记录 + Long totalVisitCount = logService.findTotalVisitCount(); + obj.put("totalVisitCount", totalVisitCount); + Long todayVisitCount = logService.findTodayVisitCount(dayStart, dayEnd); + obj.put("todayVisitCount", todayVisitCount); + Long todayIp = logService.findTodayIp(dayStart, dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + obj.put("todayIp", todayIp); + result.setResult(obj); + result.success("登录成功"); + return result; + } + + /** + * 获取访问量 + * + * @return + */ + @GetMapping("visitInfo") + public Result>> visitInfo() { + Result>> result = new Result>>(); + Calendar calendar = new GregorianCalendar(); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + calendar.add(Calendar.DAY_OF_MONTH, 1); + Date dayEnd = calendar.getTime(); + calendar.add(Calendar.DAY_OF_MONTH, -7); + Date dayStart = calendar.getTime(); + List> list = logService.findVisitCount(dayStart, dayEnd); + result.setResult(oConvertUtils.toLowerCasePageList(list)); + return result; + } + + + /** + * 登陆成功选择用户当前部门 + * + * @param user + * @return + */ + @RequestMapping(value = "/selectDepart", method = RequestMethod.PUT) + public Result selectDepart(@RequestBody SysUser user) { + Result result = new Result(); + String username = user.getUsername(); + if (oConvertUtils.isEmpty(username)) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + username = sysUser.getUsername(); + } + String orgCode = user.getOrgCode(); + this.sysUserService.updateUserDepart(username, orgCode); + SysUser sysUser = sysUserService.getUserByName(username); + JSONObject obj = new JSONObject(); + obj.put("userInfo", sysUser); + result.setResult(obj); + return result; + } + + /** + * 短信登录接口 + * + * @param jsonObject + * @return + */ + @PostMapping(value = "/sms") + public Result sms(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String mobile = jsonObject.get("mobile").toString(); + //手机号模式 登录模式: "2" 注册模式: "1" + String smsmode = jsonObject.get("smsmode").toString(); + log.info(mobile); + if (oConvertUtils.isEmpty(mobile)) { + result.setMessage("手机号不允许为空!"); + result.setSuccess(false); + return result; + } + Object object = redisUtil.get(mobile); + if (object != null) { + result.setMessage("验证码10分钟内,仍然有效!"); + result.setSuccess(false); + return result; + } + + //随机数 + String captcha = RandomUtil.randomNumbers(6); + JSONObject obj = new JSONObject(); + obj.put("code", captcha); + try { + boolean b = false; + //注册模板 + if (CommonConstant.SMS_TPL_TYPE_1.equals(smsmode)) { + SysUser sysUser = sysUserService.getUserByPhone(mobile); + if (sysUser != null) { + result.error500(" 手机号已经注册,请直接登录!"); + baseCommonService.addLog("手机号已经注册,请直接登录!", CommonConstant.LOG_TYPE_1, null); + return result; + } + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.REGISTER_TEMPLATE_CODE); + } else { + //登录模式,校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(mobile); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + String message = result.getMessage(); + if ("该用户不存在,请注册".equals(message)) { + result.error500("该用户不存在或未绑定手机号"); + } + return result; + } + + /** + * smsmode 短信模板方式 0 .登录模板、1.注册模板、2.忘记密码模板 + */ + if (CommonConstant.SMS_TPL_TYPE_0.equals(smsmode)) { + //登录模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.LOGIN_TEMPLATE_CODE); + } else if (CommonConstant.SMS_TPL_TYPE_2.equals(smsmode)) { + //忘记密码模板 + b = DySmsHelper.sendSms(mobile, obj, DySmsEnum.FORGET_PASSWORD_TEMPLATE_CODE); + } + } + + if (b == false) { + result.setMessage("短信验证码发送失败,请稍后重试"); + result.setSuccess(false); + return result; + } + //验证码10分钟内有效 + redisUtil.set(mobile, captcha, 600); + //update-begin--Author:scott Date:20190812 for:issues#391 + //result.setResult(captcha); + //update-end--Author:scott Date:20190812 for:issues#391 + result.setSuccess(true); + + } catch (ClientException e) { + e.printStackTrace(); + result.error500(" 短信接口未配置,请联系管理员!"); + return result; + } + return result; + } + + + /** + * 手机号登录接口 + * + * @param jsonObject + * @return + */ + @ApiOperation("手机号登录接口") + @PostMapping("/phoneLogin") + public Result phoneLogin(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String phone = jsonObject.getString("mobile"); + + //校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(phone); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + String smscode = jsonObject.getString("captcha"); + Object code = redisUtil.get(phone); + if (!smscode.equals(code)) { + result.setMessage("手机验证码错误"); + return result; + } + //用户信息 + userInfo(sysUser, result); + //添加日志 + baseCommonService.addLog("用户名: " + sysUser.getUsername() + ",登录成功!", CommonConstant.LOG_TYPE_1, null); + + return result; + } + + + /** + * 用户信息 + * + * @param sysUser + * @param result + * @return + */ + private Result userInfo(SysUser sysUser, Result result) { + String syspassword = sysUser.getPassword(); + String username = sysUser.getUsername(); + // 生成token + String token = JwtUtil.sign(username, syspassword); + // 设置token缓存有效时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + + // 获取用户部门信息 + JSONObject obj = new JSONObject(); + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + obj.put("departs", departs); + if (departs == null || departs.size() == 0) { + obj.put("multi_depart", 0); + } else if (departs.size() == 1) { + sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); + obj.put("multi_depart", 1); + } else { + //查询当前是否有登录部门 + // update-begin--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + SysUser sysUserById = sysUserService.getById(sysUser.getId()); + if (oConvertUtils.isEmpty(sysUserById.getOrgCode())) { + sysUserService.updateUserDepart(username, departs.get(0).getOrgCode()); + } + // update-end--Author:wangshuai Date:20200805 for:如果用戶为选择部门,数据库为存在上一次登录部门,则取一条存进去 + obj.put("multi_depart", 2); + } + obj.put("token", token); + obj.put("userInfo", sysUser); + obj.put("sysAllDictItems", sysDictService.queryAllDictItems()); + result.setResult(obj); + result.success("登录成功"); + return result; + } + + /** + * 获取加密字符串 + * + * @return + */ + @GetMapping(value = "/getEncryptedString") + public Result> getEncryptedString() { + Result> result = new Result>(); + Map map = new HashMap(); + map.put("key", EncryptedString.key); + map.put("iv", EncryptedString.iv); + result.setResult(map); + return result; + } + + /** + * 后台生成图形验证码 :有效 + * + * @param response + * @param key + */ + @ApiOperation("获取验证码") + @GetMapping(value = "/randomImage/{key}") + public Result randomImage(HttpServletResponse response, @PathVariable String key) { + Result res = new Result(); + try { + String code = RandomUtil.randomString(BASE_CHECK_CODES, 4); + String lowerCaseCode = code.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCode + key, "utf-8"); + redisUtil.set(realKey, lowerCaseCode, 60); + String base64 = RandImageUtil.generate(code); + res.setSuccess(true); + res.setResult(base64); + } catch (Exception e) { + res.error500("获取验证码出错" + e.getMessage()); + e.printStackTrace(); + } + return res; + } + + /** + * app登录 + * + * @param sysLoginModel + * @return + * @throws Exception + */ + @RequestMapping(value = "/mLogin", method = RequestMethod.POST) + public Result mLogin(@RequestBody SysLoginModel sysLoginModel) throws Exception { + Result result = new Result(); + String username = sysLoginModel.getUsername(); + String password = sysLoginModel.getPassword(); + + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(username); + result = sysUserService.checkUserIsEffective(sysUser); + if (!result.isSuccess()) { + return result; + } + + //2. 校验用户名或密码是否正确 + String userpassword = PasswordUtil.encrypt(username, password, sysUser.getSalt()); + String syspassword = sysUser.getPassword(); + if (!syspassword.equals(userpassword)) { + result.error500("用户名或密码错误"); + return result; + } + + String orgCode = sysUser.getOrgCode(); + if (oConvertUtils.isEmpty(orgCode)) { + //如果当前用户无选择部门 查看部门关联信息 + List departs = sysDepartService.queryUserDeparts(sysUser.getId()); + if (departs == null || departs.size() == 0) { + result.error500("用户暂未归属部门,不可登录!"); + return result; + } + orgCode = departs.get(0).getOrgCode(); + sysUser.setOrgCode(orgCode); + this.sysUserService.updateUserDepart(username, orgCode); + } + JSONObject obj = new JSONObject(); + //用户登录信息 + obj.put("userInfo", sysUser); + + // 生成token + String token = JwtUtil.sign(username, syspassword); + // 设置超时时间 + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME * 2 / 1000); + + //token 信息 + obj.put("token", token); + result.setResult(obj); + result.setSuccess(true); + result.setCode(200); + baseCommonService.addLog("用户名: " + username + ",登录成功[移动端]!", CommonConstant.LOG_TYPE_1, null); + return result; + } + + /** + * 图形验证码 + * + * @param sysLoginModel + * @return + */ + @RequestMapping(value = "/checkCaptcha", method = RequestMethod.POST) + public Result checkCaptcha(@RequestBody SysLoginModel sysLoginModel) { + String captcha = sysLoginModel.getCaptcha(); + String checkKey = sysLoginModel.getCheckKey(); + if (captcha == null) { + return Result.error("验证码无效"); + } + String lowerCaseCaptcha = captcha.toLowerCase(); + String realKey = MD5Util.MD5Encode(lowerCaseCaptcha + checkKey, "utf-8"); + Object checkCode = redisUtil.get(realKey); + if (checkCode == null || !checkCode.equals(lowerCaseCaptcha)) { + return Result.error("验证码错误"); + } + return Result.OK(); + } + + /** + * 返回一个RSA公钥 + * + * @param + * @return com.jero.common.api.vo.Result + * @author 马志朝 + * @date 2021/4/15 15:01 + */ + @ApiOperation("获取RSA公钥") + @GetMapping("/getRSAPublicKey") + public Result getRSAPublicKey() { + RSA rsa = new RSA(); + String privateKeyBase64 = rsa.getPrivateKeyBase64(); + String publicKeyBase64 = rsa.getPublicKeyBase64(); + //存到redis key为公钥 value为私钥 + redisUtil.set(publicKeyBase64, privateKeyBase64, 300L); + Result result = new Result<>(); + result.setResult(publicKeyBase64); + return result; + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java new file mode 100644 index 00000000..9796eebd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementController.java @@ -0,0 +1,426 @@ +package com.jero.modules.system.controller; + +import java.io.IOException; +import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.CommonSendStatus; +import com.jero.common.constant.WebsocketConst; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.message.websocket.WebSocket; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.service.ISysAnnouncementSendService; +import com.jero.modules.system.service.ISysAnnouncementService; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Title: Controller + * @Description: 系统通告表 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +@RestController +@RequestMapping("/sys/annountCement") +@Slf4j +public class SysAnnouncementController { + @Autowired + private ISysAnnouncementService sysAnnouncementService; + @Autowired + private ISysAnnouncementSendService sysAnnouncementSendService; + @Resource + private WebSocket webSocket; + + /** + * 分页列表查询 + * @param sysAnnouncement + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysAnnouncement sysAnnouncement, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncement); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage pageList = sysAnnouncementService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + try { + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysAnnouncement.setSendStatus(CommonSendStatus.UNPUBLISHED_STATUS_0);//未发布 + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param sysAnnouncement + * @return + */ + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result eidt(@RequestBody SysAnnouncement sysAnnouncement) { + Result result = new Result(); + SysAnnouncement sysAnnouncementEntity = sysAnnouncementService.getById(sysAnnouncement.getId()); + if(sysAnnouncementEntity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysAnnouncementService.upDateAnnouncement(sysAnnouncement); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_1.toString()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + String[] id = ids.split(","); + for(int i=0;i queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysAnnouncement); + result.setSuccess(true); + } + return result; + } + + /** + * 更新发布操作 + * @param id + * @return + */ + @RequestMapping(value = "/doReleaseData", method = RequestMethod.GET) + public Result doReleaseData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);//发布中 + sysAnnouncement.setSendTime(new Date()); + String currentUserName = JwtUtil.getUserNameByToken(request); + sysAnnouncement.setSender(currentUserName); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("该系统通知发布成功"); + if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(obj.toJSONString()); + }else { + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); + String[] userIds = userId.substring(0, (userId.length()-1)).split(","); + String anntId = sysAnnouncement.getId(); + Date refDate = new Date(); + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(userIds, obj.toJSONString()); + } + } + } + + return result; + } + + /** + * 更新撤销操作 + * @param id + * @return + */ + @RequestMapping(value = "/doReovkeData", method = RequestMethod.GET) + public Result doReovkeData(@RequestParam(name="id",required=true) String id, HttpServletRequest request) { + Result result = new Result(); + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(id); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + sysAnnouncement.setSendStatus(CommonSendStatus.REVOKE_STATUS_2);//撤销发布 + sysAnnouncement.setCancelTime(new Date()); + boolean ok = sysAnnouncementService.updateById(sysAnnouncement); + if(ok) { + result.success("该系统通知撤销成功"); + } + } + + return result; + } + + /** + * @功能:补充用户数据,并返回系统消息 + * @return + */ + @RequestMapping(value = "/listByUser", method = RequestMethod.GET) + public Result> listByUser() { + Result> result = new Result>(); + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + // 1.将系统消息补充到用户通告阅读标记表中 + LambdaQueryWrapper querySaWrapper = new LambdaQueryWrapper(); + querySaWrapper.eq(SysAnnouncement::getMsgType,CommonConstant.MSG_TYPE_ALL); // 全部人员 + querySaWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0.toString()); // 未删除 + querySaWrapper.eq(SysAnnouncement::getSendStatus, CommonConstant.HAS_SEND); //已发布 + querySaWrapper.ge(SysAnnouncement::getEndTime, sysUser.getCreateTime()); //新注册用户不看结束通知 + //update-begin--Author:liusq Date:20210108 for:[JT-424] 【开源issue】bug处理-------------------- + querySaWrapper.notInSql(SysAnnouncement::getId,"select annt_id from sys_announcement_send where user_id='"+userId+"'"); + //update-begin--Author:liusq Date:20210108 for: [JT-424] 【开源issue】bug处理-------------------- + List announcements = sysAnnouncementService.list(querySaWrapper); + if(announcements.size()>0) { + for(int i=0;i query = new LambdaQueryWrapper<>(); + query.eq(SysAnnouncementSend::getAnntId,announcements.get(i).getId()); + query.eq(SysAnnouncementSend::getUserId,userId); + SysAnnouncementSend one = sysAnnouncementSendService.getOne(query); + if(null==one){ + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(announcements.get(i).getId()); + announcementSend.setUserId(userId); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + sysAnnouncementSendService.save(announcementSend); + } + //update-end--Author:wangshuai Date:20200803 for: 通知公告消息重复LOWCOD-759------------ + } + } + // 2.查询用户未读的系统消息 + Page anntMsgList = new Page(0,5); + anntMsgList = sysAnnouncementService.querySysCementPageByUserId(anntMsgList,userId,"1");//通知公告消息 + Page sysMsgList = new Page(0,5); + sysMsgList = sysAnnouncementService.querySysCementPageByUserId(sysMsgList,userId,"2");//系统消息 + Map sysMsgMap = new HashMap(); + sysMsgMap.put("sysMsgList", sysMsgList.getRecords()); + sysMsgMap.put("sysMsgTotal", sysMsgList.getTotal()); + sysMsgMap.put("anntMsgList", anntMsgList.getRecords()); + sysMsgMap.put("anntMsgTotal", anntMsgList.getTotal()); + result.setSuccess(true); + result.setResult(sysMsgMap); + return result; + } + + + /** + * 导出excel + * + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysAnnouncement sysAnnouncement,HttpServletRequest request) { + // Step.1 组装查询条件 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(sysAnnouncement); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + queryWrapper.eq(SysAnnouncement::getDelFlag,CommonConstant.DEL_FLAG_0); + List pageList = sysAnnouncementService.list(queryWrapper); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "系统通告列表"); + mv.addObject(NormalExcelConstants.CLASS, SysAnnouncement.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("系统通告列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysAnnouncements = ExcelImportUtil.importExcel(file.getInputStream(), SysAnnouncement.class, params); + for (SysAnnouncement sysAnnouncementExcel : listSysAnnouncements) { + if(sysAnnouncementExcel.getDelFlag()==null){ + sysAnnouncementExcel.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + } + sysAnnouncementService.save(sysAnnouncementExcel); + } + return Result.OK("文件导入成功!数据行数:" + listSysAnnouncements.size()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } + /** + *同步消息 + * @param anntId + * @return + */ + @RequestMapping(value = "/syncNotic", method = RequestMethod.GET) + public Result syncNotic(@RequestParam(name="anntId",required=false) String anntId, HttpServletRequest request) { + Result result = new Result(); + JSONObject obj = new JSONObject(); + if(StringUtils.isNotBlank(anntId)){ + SysAnnouncement sysAnnouncement = sysAnnouncementService.getById(anntId); + if(sysAnnouncement==null) { + result.error500("未找到对应实体"); + }else { + if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(obj.toJSONString()); + }else { + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); + if(oConvertUtils.isNotEmpty(userId)){ + String[] userIds = userId.substring(0, (userId.length()-1)).split(","); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER); + obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId()); + obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile()); + webSocket.sendMessage(userIds, obj.toJSONString()); + } + } + } + }else{ + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); + obj.put(WebsocketConst.MSG_TXT, "批量设置已读"); + webSocket.sendMessage(obj.toJSONString()); + } + return result; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java new file mode 100644 index 00000000..fe8cc372 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysAnnouncementSendController.java @@ -0,0 +1,242 @@ +package com.jero.modules.system.controller; + +import java.util.Arrays; +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.model.AnnouncementSendModel; +import com.jero.modules.system.service.ISysAnnouncementSendService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +@RestController +@RequestMapping("/sys/sysAnnouncementSend") +@Slf4j +public class SysAnnouncementSendController { + @Autowired + private ISysAnnouncementSendService sysAnnouncementSendService; + + /** + * 分页列表查询 + * @param sysAnnouncementSend + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/page") + public Result> queryPageList(SysAnnouncementSend sysAnnouncementSend, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = new QueryWrapper(sysAnnouncementSend); + Page page = new Page(pageNo,pageSize); + //排序逻辑 处理 + String column = req.getParameter("column"); + String order = req.getParameter("order"); + if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { + if("asc".equals(order)) { + queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); + }else { + queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); + } + } + IPage pageList = sysAnnouncementSendService.page(page, queryWrapper); + //log.info("查询当前页:"+pageList.getCurrent()); + //log.info("查询当前页数量:"+pageList.getSize()); + //log.info("查询结果数量:"+pageList.getRecords().size()); + //log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param sysAnnouncementSend + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + Result result = new Result(); + try { + sysAnnouncementSendService.save(sysAnnouncementSend); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param sysAnnouncementSend + * @return + */ + @PutMapping(value = "/edit") + public Result eidt(@RequestBody SysAnnouncementSend sysAnnouncementSend) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSendEntity = sysAnnouncementSendService.getById(sysAnnouncementSend.getId()); + if(sysAnnouncementSendEntity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysAnnouncementSendService.updateById(sysAnnouncementSend); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); + if(sysAnnouncementSend==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysAnnouncementSendService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysAnnouncementSendService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysAnnouncementSend sysAnnouncementSend = sysAnnouncementSendService.getById(id); + if(sysAnnouncementSend==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysAnnouncementSend); + result.setSuccess(true); + } + return result; + } + + /** + * @功能:更新用户系统消息阅读状态 + * @param json + * @return + */ + @PutMapping(value = "/editByAnntIdAndUserId") + public Result editById(@RequestBody JSONObject json) { + Result result = new Result(); + String anntId = json.getString("anntId"); + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + updateWrapper.last("where annt_id ='"+anntId+"' and user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendService.update(announcementSend, updateWrapper); + result.setSuccess(true); + return result; + } + + /** + * @功能:获取我的消息 + * @return + */ + @GetMapping(value = "/getMyAnnouncementSend") + public Result> getMyAnnouncementSend(AnnouncementSendModel announcementSendModel, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + Result> result = new Result>(); + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + announcementSendModel.setUserId(userId); + announcementSendModel.setPageNo((pageNo-1)*pageSize); + announcementSendModel.setPageSize(pageSize); + Page pageList = new Page(pageNo,pageSize); + pageList = sysAnnouncementSendService.getMyAnnouncementSendPage(pageList, announcementSendModel); + result.setResult(pageList); + result.setSuccess(true); + return result; + } + + /** + * @功能:一键已读 + * @return + */ + @PutMapping(value = "/readAll") + public Result readAll() { + Result result = new Result(); + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + updateWrapper.last("where user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendService.update(announcementSend, updateWrapper); + result.setSuccess(true); + result.setMessage("全部已读"); + return result; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java new file mode 100644 index 00000000..3385a854 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java @@ -0,0 +1,503 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.model.TreeSelectModel; +import com.jero.modules.system.service.ISysCategoryService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + + /** + * @Description: 分类字典 + * @Author: jero-boot + * @Date: 2019-05-29 + * @Version: V1.0 + */ +@RestController +@RequestMapping("/sys/category") +@Slf4j +public class SysCategoryController { + @Autowired + private ISysCategoryService sysCategoryService; + + /** + * 分页列表查询 + * @param sysCategory + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping(value = "/rootList") + public Result> queryPageList(SysCategory sysCategory, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + if(oConvertUtils.isEmpty(sysCategory.getPid())){ + sysCategory.setPid("0"); + } + Result> result = new Result>(); + + //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------start + //QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("pid", sysCategory.getPid()); + //--author:os_chengtgen---date:20190804 -----for: 分类字典页面显示错误,issues:377--------end + + Page page = new Page(pageNo, pageSize); + IPage pageList = sysCategoryService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + @RequiresPermissions("sys:category:list") + @GetMapping(value = "/childList") + public Result> queryPageList(SysCategory sysCategory,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, req.getParameterMap()); + List list = sysCategoryService.list(queryWrapper); + result.setSuccess(true); + result.setResult(list); + return result; + } + + + /** + * 添加 + * @param sysCategory + * @return + */ + @RequiresPermissions("sys:category:add") + @PostMapping(value = "/add") + public Result add(@RequestBody SysCategory sysCategory) { + Result result = new Result(); + try { + sysCategoryService.addSysCategory(sysCategory); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param sysCategory + * @return + */ + @RequiresPermissions("sys:category:edit") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysCategory sysCategory) { + Result result = new Result(); + SysCategory sysCategoryEntity = sysCategoryService.getById(sysCategory.getId()); + if(sysCategoryEntity==null) { + result.error500("未找到对应实体"); + }else { + sysCategoryService.updateSysCategory(sysCategory); + result.success("修改成功!"); + } + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @RequiresPermissions("sys:category:list") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysCategory sysCategory = sysCategoryService.getById(id); + if(sysCategory==null) { + result.error500("未找到对应实体"); + }else { + this.sysCategoryService.deleteSysCategory(id); + result.success("删除成功!"); + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @RequiresPermissions("sys:category:del") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysCategoryService.deleteSysCategory(ids); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysCategory sysCategory = sysCategoryService.getById(id); + if(sysCategory==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysCategory); + result.setSuccess(true); + } + return result; + } + + /** + * 导出excel + * + * @param request + */ + @RequiresPermissions("sys:category:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { + // Step.1 组装查询条件查询数据 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); + List pageList = sysCategoryService.list(queryWrapper); + // Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + // 过滤选中数据 + String selections = request.getParameter("selections"); + if(oConvertUtils.isEmpty(selections)) { + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + }else { + List selectionList = Arrays.asList(selections.split(",")); + List exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); + mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("sys:category:import") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); + //按照编码长度排序 + Collections.sort(listSysCategorys); + log.info("排序后的list====>",listSysCategorys); + for (SysCategory sysCategoryExcel : listSysCategorys) { + String code = sysCategoryExcel.getCode(); + if(code.length()>3){ + String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); + log.info("pCode====>",pCode); + String pId=sysCategoryService.queryIdByCode(pCode); + log.info("pId====>",pId); + if(StringUtils.isNotBlank(pId)){ + sysCategoryExcel.setPid(pId); + } + }else{ + sysCategoryExcel.setPid("0"); + } + sysCategoryService.save(sysCategoryExcel); + } + return Result.OK("文件导入成功!数据行数:" + listSysCategorys.size()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:"+e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } + + + + /** + * 加载单个数据 用于回显 + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadOne", method = RequestMethod.GET) + public Result loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { + Result result = new Result(); + try { + + QueryWrapper query = new QueryWrapper(); + query.eq(field, val); + List ls = this.sysCategoryService.list(query); + if(ls==null || ls.size()==0) { + result.setMessage("查询无果"); + result.setSuccess(false); + }else if(ls.size()>1) { + result.setMessage("查询数据异常,["+field+"]存在多个值:"+val); + result.setSuccess(false); + }else { + result.setSuccess(true); + result.setResult(ls.get(0)); + } + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 加载节点的子数据 + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) + public Result> loadTreeChildren(@RequestParam(name="pid") String pid) { + Result> result = new Result>(); + try { + List ls = this.sysCategoryService.queryListByPid(pid); + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 加载一级节点/如果是同步 则所有数据 + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) + public Result> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { + Result> result = new Result>(); + try { + List ls = this.sysCategoryService.queryListByCode(pcode); + if(!async) { + loadAllCategoryChildren(ls); + } + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 递归求子节点 同步加载用到 + */ + @RequiresPermissions("sys:category:list") + private void loadAllCategoryChildren(List ls) { + for (TreeSelectModel tsm : ls) { + List temp = this.sysCategoryService.queryListByPid(tsm.getKey()); + if(temp!=null && temp.size()>0) { + tsm.setChildren(temp); + loadAllCategoryChildren(temp); + } + } + } + + /** + * 校验编码 + * @param pid + * @param code + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping(value = "/checkCode") + public Result checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { + if(oConvertUtils.isEmpty(code)){ + return Result.error("错误,类型编码为空!"); + } + if(oConvertUtils.isEmpty(pid)){ + return Result.OK(); + } + SysCategory parent = this.sysCategoryService.getById(pid); + if(code.startsWith(parent.getCode())){ + return Result.OK(); + }else{ + return Result.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); + } + + } + + + /** + * 分类字典树控件 加载节点 + * @param pid + * @param pcode + * @param condition + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { + Result> result = new Result>(); + //pid如果传值了 就忽略pcode的作用 + if(oConvertUtils.isEmpty(pid)){ + if(oConvertUtils.isEmpty(pcode)){ + result.setSuccess(false); + result.setMessage("加载分类字典树参数有误.[null]!"); + return result; + }else{ + if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ + pid = ISysCategoryService.ROOT_PID_VALUE; + }else{ + pid = this.sysCategoryService.queryIdByCode(pcode); + } + if(oConvertUtils.isEmpty(pid)){ + result.setSuccess(false); + result.setMessage("加载分类字典树参数有误.[code]!"); + return result; + } + } + } + Map query = null; + if(oConvertUtils.isNotEmpty(condition)) { + query = JSON.parseObject(condition, Map.class); + } + List ls = sysCategoryService.queryListByPid(pid,query); + result.setSuccess(true); + result.setResult(ls); + return result; + } + + /** + * 分类字典控件数据回显[表单页面] + * + * @param ids + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) + public Result> loadDictItem(@RequestParam(name = "ids") String ids) { + Result> result = new Result<>(); + // 非空判断 + if (StringUtils.isBlank(ids)) { + result.setSuccess(false); + result.setMessage("ids 不能为空"); + return result; + } + String[] idArray = ids.split(","); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysCategory::getId, Arrays.asList(idArray)); + // 查询数据 + List list = this.sysCategoryService.list(query); + // 取出name并返回 + List textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); + result.setSuccess(true); + result.setResult(textList); + return result; + } + + /** + * [列表页面]加载分类字典数据 用于值的替换 + * @param code + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) + public Result> loadAllData(@RequestParam(name="code",required = true) String code) { + Result> result = new Result>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + if(oConvertUtils.isNotEmpty(code) && !"0".equals(code)){ + query.likeRight(SysCategory::getCode,code); + } + List list = this.sysCategoryService.list(query); + if(list==null || list.size()==0) { + result.setMessage("无数据,参数有误.[code]"); + result.setSuccess(false); + return result; + } + List rdList = new ArrayList(); + for (SysCategory c : list) { + rdList.add(new DictModel(c.getId(),c.getName())); + } + result.setSuccess(true); + result.setResult(rdList); + return result; + } + + /** + * 根据父级id批量查询子节点 + * @param parentIds + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping("/getChildListBatch") + public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + queryWrapper.in("pid", parentIdList); + List list = sysCategoryService.list(queryWrapper); + IPage pageList = new Page<>(1, 10, list.size()); + pageList.setRecords(list); + return Result.OK(pageList); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("批量查询子节点失败:" + e.getMessage()); + } + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java new file mode 100644 index 00000000..5466d242 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCheckRuleController.java @@ -0,0 +1,186 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.system.entity.SysCheckRule; +import com.jero.modules.system.service.ISysCheckRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Arrays; + +/** + * @Description: 编码校验规则 + * @Author: jero-boot + * @Date: 2020-02-04 + * @Version: V1.0 + */ +@Slf4j +@Api(tags = "编码校验规则") +@RestController +@RequestMapping("/sys/checkRule") +public class SysCheckRuleController extends JeroController { + + @Autowired + private ISysCheckRuleService sysCheckRuleService; + + /** + * 分页列表查询 + * + * @param sysCheckRule + * @param pageNo + * @param pageSize + * @param request + * @return + */ + @AutoLog(value = "编码校验规则-分页列表查询") + @ApiOperation(value = "编码校验规则-分页列表查询", notes = "编码校验规则-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList( + SysCheckRule sysCheckRule, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest request + ) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCheckRule, request.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = sysCheckRuleService.page(page, queryWrapper); + return Result.OK(pageList); + } + + + /** + * 通过id查询 + * + * @param ruleCode + * @return + */ + @AutoLog(value = "编码校验规则-通过Code校验传入的值") + @ApiOperation(value = "编码校验规则-通过Code校验传入的值", notes = "编码校验规则-通过Code校验传入的值") + @GetMapping(value = "/checkByCode") + public Result checkByCode( + @RequestParam(name = "ruleCode") String ruleCode, + @RequestParam(name = "value") String value + ) throws UnsupportedEncodingException { + SysCheckRule sysCheckRule = sysCheckRuleService.getByCode(ruleCode); + if (sysCheckRule == null) { + return Result.error("该编码不存在"); + } + JSONObject errorResult = sysCheckRuleService.checkValue(sysCheckRule, URLDecoder.decode(value, "UTF-8")); + if (errorResult == null) { + return Result.OK(); + } else { + Result r = Result.error(errorResult.getString("message")); + r.setResult(errorResult); + return r; + } + } + + /** + * 添加 + * + * @param sysCheckRule + * @return + */ + @AutoLog(value = "编码校验规则-添加") + @ApiOperation(value = "编码校验规则-添加", notes = "编码校验规则-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysCheckRule sysCheckRule) { + sysCheckRuleService.save(sysCheckRule); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysCheckRule + * @return + */ + @AutoLog(value = "编码校验规则-编辑") + @ApiOperation(value = "编码校验规则-编辑", notes = "编码校验规则-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysCheckRule sysCheckRule) { + sysCheckRuleService.updateById(sysCheckRule); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "编码校验规则-通过id删除") + @ApiOperation(value = "编码校验规则-通过id删除", notes = "编码校验规则-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysCheckRuleService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "编码校验规则-批量删除") + @ApiOperation(value = "编码校验规则-批量删除", notes = "编码校验规则-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysCheckRuleService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "编码校验规则-通过id查询") + @ApiOperation(value = "编码校验规则-通过id查询", notes = "编码校验规则-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysCheckRule sysCheckRule = sysCheckRuleService.getById(id); + return Result.OK(sysCheckRule); + } + + /** + * 导出excel + * + * @param request + * @param sysCheckRule + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysCheckRule sysCheckRule) { + return super.exportXls(request, sysCheckRule, SysCheckRule.class, "编码校验规则"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysCheckRule.class); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysConfusionController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysConfusionController.java new file mode 100644 index 00000000..6531a656 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysConfusionController.java @@ -0,0 +1,171 @@ +package com.jero.modules.system.controller; + +import java.util.Arrays; +import java.util.List; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.modules.system.entity.SysConfusion; +import com.jero.modules.system.service.ISysConfusionService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import com.jero.common.aspect.annotation.AutoLog; + + +/** + * @Description: 混淆表 + * @Author: jero-boot + * @Date: 2021-08-05 + * @Version: V1.0 + */ +@Api(tags = "混淆表") +@RestController +@RequestMapping("/sys/confusion") +@Slf4j +public class SysConfusionController extends JeroController { + @Autowired + private ISysConfusionService sysConfusionService; + + /** + * 分页列表查询 + * + * @param sysConfusion + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "混淆表-分页列表查询") + @ApiOperation(value = "混淆表-分页列表查询", notes = "混淆表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(SysConfusion sysConfusion, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysConfusion, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysConfusionService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "混淆表-列表查询") + @ApiOperation(value = "混淆表-列表查询", notes = "混淆表-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = sysConfusionService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param sysConfusion + * @return + */ + @AutoLog(value = "混淆表-添加") + @ApiOperation(value = "混淆表-添加", notes = "混淆表-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody SysConfusion sysConfusion) { + sysConfusionService.add(sysConfusion); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysConfusion + * @return + */ + @AutoLog(value = "混淆表-编辑") + @ApiOperation(value = "混淆表-编辑", notes = "混淆表-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody SysConfusion sysConfusion) { + sysConfusionService.editById(sysConfusion); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "混淆表-通过id删除") + @ApiOperation(value = "混淆表-通过id删除", notes = "混淆表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysConfusionService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "混淆表-批量删除") + @ApiOperation(value = "混淆表-批量删除", notes = "混淆表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysConfusionService.deleteByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "混淆表-通过id查询") + @ApiOperation(value = "混淆表-通过id查询", notes = "混淆表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysConfusion sysConfusion = sysConfusionService.queryById(id); + if (sysConfusion == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(sysConfusion); + } + + /** + * 导出excel + * + * @param request + * @param sysConfusion + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysConfusion sysConfusion) { + return super.exportXls(request, sysConfusion, SysConfusion.class, "混淆表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysConfusion.class); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java new file mode 100644 index 00000000..b0f14c12 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataLogController.java @@ -0,0 +1,94 @@ +package com.jero.modules.system.controller; + +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDataLog; +import com.jero.modules.system.service.ISysDataLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequestMapping("/sys/dataLog") +@Slf4j +public class SysDataLogController { + @Autowired + private ISysDataLogService service; + + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysDataLog dataLog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dataLog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = service.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 查询对比数据 + * @param req + * @return + */ + @RequestMapping(value = "/queryCompareList", method = RequestMethod.GET) + public Result> queryCompareList(HttpServletRequest req) { + Result> result = new Result<>(); + String dataId1 = req.getParameter("dataId1"); + String dataId2 = req.getParameter("dataId2"); + List idList = new ArrayList(); + idList.add(dataId1); + idList.add(dataId2); + try { + List list = (List) service.listByIds(idList); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + return result; + } + + /** + * 查询版本信息 + * @param req + * @return + */ + @RequestMapping(value = "/queryDataVerList", method = RequestMethod.GET) + public Result> queryDataVerList(HttpServletRequest req) { + Result> result = new Result<>(); + String dataTable = req.getParameter("dataTable"); + String dataId = req.getParameter("dataId"); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("data_table", dataTable); + queryWrapper.eq("data_id", dataId); + List list = service.list(queryWrapper); + if(list==null||list.size()<=0) { + result.error500("未找到版本信息"); + }else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java new file mode 100644 index 00000000..20de1543 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDataSourceController.java @@ -0,0 +1,216 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.dynamic.db.DataSourceCachePool; +import com.jero.modules.system.entity.SysDataSource; +import com.jero.modules.system.service.ISysDataSourceService; +import com.jero.modules.system.util.SecurityUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.List; + +/** + * @Description: 多数据源管理 + * @Author: jero-boot + * @Date: 2019-12-25 + * @Version: V1.0 + */ +@Slf4j +@Api(tags = "多数据源管理") +@RestController +@RequestMapping("/sys/dataSource") +public class SysDataSourceController extends JeroController { + + @Autowired + private ISysDataSourceService sysDataSourceService; + + /** + * 分页列表查询 + * + * @param sysDataSource + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "多数据源管理-分页列表查询") + @ApiOperation(value = "多数据源管理-分页列表查询", notes = "多数据源管理-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList( + SysDataSource sysDataSource, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req + ) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDataSource, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = sysDataSourceService.page(page, queryWrapper); + try { + List records = pageList.getRecords(); + records.forEach(item->{ + String dbPassword = item.getDbPassword(); + if(StringUtils.isNotBlank(dbPassword)){ + String decodedStr = SecurityUtil.jiemi(dbPassword); + item.setDbPassword(decodedStr); + } + }); + } catch (Exception e) { + e.printStackTrace(); + return Result.error(e.getMessage()); + } + return Result.OK(pageList); + } + + @GetMapping(value = "/options") + public Result queryOptions(SysDataSource sysDataSource, HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDataSource, req.getParameterMap()); + List pageList = sysDataSourceService.list(queryWrapper); + JSONArray array = new JSONArray(pageList.size()); + for (SysDataSource item : pageList) { + JSONObject option = new JSONObject(3); + option.put("value", item.getCode()); + option.put("label", item.getName()); + option.put("text", item.getName()); + array.add(option); + } + return Result.OK(array); + } + + /** + * 添加 + * + * @param sysDataSource + * @return + */ + @AutoLog(value = "多数据源管理-添加") + @ApiOperation(value = "多数据源管理-添加", notes = "多数据源管理-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysDataSource sysDataSource) { + try { + String dbPassword = sysDataSource.getDbPassword(); + if(StringUtils.isNotBlank(dbPassword)){ + String encrypt = SecurityUtil.jiami(dbPassword); + sysDataSource.setDbPassword(encrypt); + } + sysDataSourceService.save(sysDataSource); + } catch (Exception e) { + e.printStackTrace(); + } + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysDataSource + * @return + */ + @AutoLog(value = "多数据源管理-编辑") + @ApiOperation(value = "多数据源管理-编辑", notes = "多数据源管理-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysDataSource sysDataSource) { + try { + SysDataSource d = sysDataSourceService.getById(sysDataSource.getId()); + DataSourceCachePool.removeCache(d.getCode()); + String dbPassword = sysDataSource.getDbPassword(); + if(StringUtils.isNotBlank(dbPassword)){ + String encrypt = SecurityUtil.jiami(dbPassword); + sysDataSource.setDbPassword(encrypt); + } + sysDataSourceService.updateById(sysDataSource); + } catch (Exception e) { + e.printStackTrace(); + } + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "多数据源管理-通过id删除") + @ApiOperation(value = "多数据源管理-通过id删除", notes = "多数据源管理-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id") String id) { + SysDataSource sysDataSource = sysDataSourceService.getById(id); + DataSourceCachePool.removeCache(sysDataSource.getCode()); + sysDataSourceService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "多数据源管理-批量删除") + @ApiOperation(value = "多数据源管理-批量删除", notes = "多数据源管理-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids") String ids) { + List idList = Arrays.asList(ids.split(",")); + idList.forEach(item->{ + SysDataSource sysDataSource = sysDataSourceService.getById(item); + DataSourceCachePool.removeCache(sysDataSource.getCode()); + }); + this.sysDataSourceService.removeByIds(idList); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "多数据源管理-通过id查询") + @ApiOperation(value = "多数据源管理-通过id查询", notes = "多数据源管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id") String id) { + SysDataSource sysDataSource = sysDataSourceService.getById(id); + return Result.OK(sysDataSource); + } + + /** + * 导出excel + * + * @param request + * @param sysDataSource + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysDataSource sysDataSource) { + return super.exportXls(request, sysDataSource, SysDataSource.class, "多数据源管理"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysDataSource.class); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java new file mode 100644 index 00000000..745b0071 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartController.java @@ -0,0 +1,504 @@ +package com.jero.modules.system.controller; + +import java.io.IOException; +import java.util.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.system.vo.SysDepartTreeModel; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.ImportExcelUtil; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.DepartIdModel; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserDepartService; +import com.jero.modules.system.service.ISysUserService; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; + +import lombok.extern.slf4j.Slf4j; + +/** + *

+ * 部门表 前端控制器 + *

+ * + * @Author: Steve @Since: 2019-01-22 + */ +@RestController +@RequestMapping("/sys/sysDepart") +@Slf4j +public class SysDepartController { + + @Autowired + private ISysDepartService sysDepartService; + @Autowired + public RedisTemplate redisTemplate; + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysUserDepartService sysUserDepartService; + /** + * 查询数据 查出我的部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequiresPermissions("sys:depart:list") + @RequestMapping(value = "/queryMyDeptTreeList", method = RequestMethod.GET) + public Result> queryMyDeptTreeList() { + Result> result = new Result<>(); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + try { + if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){ + List list = sysDepartService.queryMyDeptTreeList(user.getDepartIds()); + result.setResult(list); + result.setMessage(CommonConstant.USER_IDENTITY_2.toString()); + result.setSuccess(true); + }else{ + result.setMessage(CommonConstant.USER_IDENTITY_1.toString()); + result.setSuccess(true); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + } + return result; + } + + /** + * 查询数据 查出所有部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequiresPermissions("sys:depart:list") + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList() { + Result> result = new Result<>(); + try { + // 从内存中读取 +// List list =FindsDepartsChildrenUtil.getSysDepartTreeList(); +// if (CollectionUtils.isEmpty(list)) { +// list = sysDepartService.queryTreeList(); +// } + List list = sysDepartService.queryTreeList(); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + return result; + } + + /** + * 添加新数据 添加用户新建的部门对象数据,并保存到数据库 + * + * @param sysDepart + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:depart:add") + @RequestMapping(value = "/add", method = RequestMethod.POST) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public Result add(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + Result result = new Result(); + String username = JwtUtil.getUserNameByToken(request); + try { + sysDepart.setCreateBy(username); + sysDepartService.saveDepartData(sysDepart, username); + //清除部门树内存 + // FindsDepartsChildrenUtil.clearSysDepartTreeList(); + // FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑数据 编辑部门的部分数据,并保存到数据库 + * + * @param sysDepart + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:depart:edit") + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public Result edit(@RequestBody SysDepart sysDepart, HttpServletRequest request) { + String username = JwtUtil.getUserNameByToken(request); + sysDepart.setUpdateBy(username); + Result result = new Result(); + SysDepart sysDepartEntity = sysDepartService.getById(sysDepart.getId()); + if (sysDepartEntity == null) { + result.error500("未找到对应实体"); + } else { + boolean ok = sysDepartService.updateDepartDataById(sysDepart, username); + // TODO 返回false说明什么? + if (ok) { + //清除部门树内存 + //FindsDepartsChildrenUtil.clearSysDepartTreeList(); + //FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("修改成功!"); + } + } + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:depart:del") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public Result delete(@RequestParam(name="id",required=true) String id) { + + Result result = new Result(); + SysDepart sysDepart = sysDepartService.getById(id); + if(sysDepart==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysDepartService.delete(id); + if(ok) { + //清除部门树内存 + //FindsDepartsChildrenUtil.clearSysDepartTreeList(); + // FindsDepartsChildrenUtil.clearDepartIdModel(); + result.success("删除成功!"); + } + } + return result; + } + + + /** + * 批量删除 根据前端请求的多个ID,对数据库执行删除相关部门数据的操作 + * + * @param ids + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:depart:del") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + + Result result = new Result(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.sysDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 查询数据 添加或编辑页面对该方法发起请求,以树结构形式加载所有部门的名称,方便用户的操作 + * + * @return + */ + @RequiresPermissions("sys:depart:list") + @RequestMapping(value = "/queryIdTree", method = RequestMethod.GET) + public Result> queryIdTree() { +// Result> result = new Result>(); +// List idList; +// try { +// idList = FindsDepartsChildrenUtil.wrapDepartIdModel(); +// if (idList != null && idList.size() > 0) { +// result.setResult(idList); +// result.setSuccess(true); +// } else { +// sysDepartService.queryTreeList(); +// idList = FindsDepartsChildrenUtil.wrapDepartIdModel(); +// result.setResult(idList); +// result.setSuccess(true); +// } +// return result; +// } catch (Exception e) { +// log.error(e.getMessage(),e); +// result.setSuccess(false); +// return result; +// } + Result> result = new Result<>(); + try { + List list = sysDepartService.queryDepartIdTreeList(); + result.setResult(list); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + return result; + } + + /** + *

+ * 部门搜索功能方法,根据关键字模糊搜索相关部门 + *

+ * + * @param keyWord + * @return + */ + @RequiresPermissions("sys:depart:list") + @RequestMapping(value = "/searchBy", method = RequestMethod.GET) + public Result> searchBy(@RequestParam(name = "keyWord", required = true) String keyWord,@RequestParam(name = "myDeptSearch", required = false) String myDeptSearch) { + Result> result = new Result>(); + //部门查询,myDeptSearch为1时为我的部门查询,登录用户为上级时查只查负责部门下数据 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String departIds = null; + if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals( CommonConstant.USER_IDENTITY_2 )){ + departIds = user.getDepartIds(); + } + List treeList = this.sysDepartService.searhBy(keyWord,myDeptSearch,departIds); + if (treeList == null || treeList.size() == 0) { + result.setSuccess(false); + result.setMessage("未查询匹配数据!"); + return result; + } + result.setResult(treeList); + return result; + } + + + /** + * 导出excel + * + * @param request + */ + @RequiresPermissions("sys:depart:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysDepart sysDepart,HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepart, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysDepartService.list(queryWrapper); + //按字典排序 + Collections.sort(pageList, new Comparator() { + @Override + public int compare(SysDepart arg0, SysDepart arg1) { + return arg0.getOrgCode().compareTo(arg1.getOrgCode()); + } + }); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "部门列表"); + mv.addObject(NormalExcelConstants.CLASS, SysDepart.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("部门列表数据", "导出人:"+user.getRealname(), "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:depart:import") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + @CacheEvict(value= {CacheConstant.SYS_DEPARTS_CACHE,CacheConstant.SYS_DEPART_IDS_CACHE}, allEntries=true) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + List errorMessageList = new ArrayList<>(); + List listSysDeparts = null; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + // orgCode编码长度 + int codeLength = YouBianCodeUtil.zhanweiLength; + listSysDeparts = ExcelImportUtil.importExcel(file.getInputStream(), SysDepart.class, params); + //按长度排序 + Collections.sort(listSysDeparts, new Comparator() { + @Override + public int compare(SysDepart arg0, SysDepart arg1) { + return arg0.getOrgCode().length() - arg1.getOrgCode().length(); + } + }); + + int num = 0; + for (SysDepart sysDepart : listSysDeparts) { + String orgCode = sysDepart.getOrgCode(); + if(orgCode.length() > codeLength) { + String parentCode = orgCode.substring(0, orgCode.length()-codeLength); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("org_code", parentCode); + try { + SysDepart parentDept = sysDepartService.getOne(queryWrapper); + if(!parentDept.equals(null)) { + sysDepart.setParentId(parentDept.getId()); + } else { + sysDepart.setParentId(""); + } + }catch (Exception e) { + //没有查找到parentDept + } + }else{ + sysDepart.setParentId(""); + } + //update-begin---author:liusq Date:20210223 for:批量导入部门以后,不能追加下一级部门 #2245------------ + sysDepart.setOrgType(sysDepart.getOrgCode().length()/codeLength+""); + //update-end---author:liusq Date:20210223 for:批量导入部门以后,不能追加下一级部门 #2245------------ + sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + ImportExcelUtil.importDateSaveOne(sysDepart, ISysDepartService.class, errorMessageList, num, CommonConstant.SQL_INDEX_UNIQ_DEPART_ORG_CODE); + num++; + } + //清空部门缓存 + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + redisTemplate.delete(keys3); + redisTemplate.delete(keys4); + return ImportExcelUtil.imporReturnRes(errorMessageList.size(), listSysDeparts.size() - errorMessageList.size(), errorMessageList); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Result.error("文件导入失败:"+e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } + + + /** + * 查询所有部门信息 + * @return + */ + @RequiresPermissions("sys:depart:list") + @GetMapping("listAll") + public Result> listAll(@RequestParam(name = "id", required = false) String id) { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.orderByAsc(SysDepart::getOrgCode); + if(oConvertUtils.isNotEmpty(id)){ + String arr[] = id.split(","); + query.in(SysDepart::getId,arr); + } + List ls = this.sysDepartService.list(query); + result.setSuccess(true); + result.setResult(ls); + return result; + } + /** + * 查询数据 查出所有部门,并以树结构数据格式响应给前端 + * + * @return + */ + @RequiresPermissions("sys:depart:list") + @RequestMapping(value = "/queryTreeByKeyWord", method = RequestMethod.GET) + public Result> queryTreeByKeyWord(@RequestParam(name = "keyWord", required = false) String keyWord) { + Result> result = new Result<>(); + try { + Map map=new HashMap(); + List list = sysDepartService.queryTreeByKeyWord(keyWord); + //根据keyWord获取用户信息 + LambdaQueryWrapper queryUser = new LambdaQueryWrapper(); + queryUser.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0); + queryUser.and(i -> i.like(SysUser::getUsername, keyWord).or().like(SysUser::getRealname, keyWord)); + List sysUsers = this.sysUserService.list(queryUser); + map.put("userList",sysUsers); + map.put("departList",list); + result.setResult(map); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(),e); + } + return result; + } + + /** + * 根据部门编码获取部门信息 + * + * @param orgCode + * @return + */ + @RequiresPermissions("sys:depart:list") + @GetMapping("/getDepartName") + public Result getDepartName(@RequestParam(name = "orgCode") String orgCode) { + Result result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysDepart::getOrgCode, orgCode); + SysDepart sysDepart = sysDepartService.getOne(query); + result.setSuccess(true); + result.setResult(sysDepart); + return result; + } + + /** + * 根据部门id获取用户信息 + * + * @param id + * @return + */ + @RequiresPermissions("sys:depart:list") + @GetMapping("/getUsersByDepartId") + public Result> getUsersByDepartId(@RequestParam(name = "id") String id) { + Result> result = new Result<>(); + List sysUsers = sysUserDepartService.queryUserByDepId(id); + result.setSuccess(true); + result.setResult(sysUsers); + return result; + } + + /** + * 根据部门id查询部门所有的父级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:50 + * @param departId 部门id + */ + @RequiresPermissions("sys:depart:list") + @GetMapping("/listParentDepartsByDepId") + List listParentDepartsByDepId(@RequestParam("departId") String departId){ + return sysDepartService.listParentDepartsByDepId(departId); + } + /** + * 根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:54 + * @param departId 部门id + */ + @RequiresPermissions("sys:depart:list") + @GetMapping("/listSonDepartsByDepId") + List listSonDepartsByDepId(@RequestParam("departId") String departId){ + return sysDepartService.listSonDepartsByDepId(departId); + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java new file mode 100644 index 00000000..093b4776 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartPermissionController.java @@ -0,0 +1,314 @@ +package com.jero.modules.system.controller; + +import java.util.*; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepartPermission; +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.entity.SysPermissionDataRule; +import com.jero.modules.system.model.TreeModel; +import com.jero.modules.system.service.ISysDepartPermissionService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.jero.modules.system.service.ISysDepartRolePermissionService; +import com.jero.modules.system.service.ISysPermissionDataRuleService; +import com.jero.modules.system.service.ISysPermissionService; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + + /** + * @Description: 部门权限表 + * @Author: jero-boot + * @Date: 2020-02-11 + * @Version: V1.0 + */ +@Slf4j +@Api(tags="部门权限表") +@RestController +@RequestMapping("/sys/sysDepartPermission") +public class SysDepartPermissionController extends JeroController { + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; + + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + + @Autowired + private ISysPermissionService sysPermissionService; + + @Autowired + private ISysDepartRolePermissionService sysDepartRolePermissionService; + + /** + * 分页列表查询 + * + * @param sysDepartPermission + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @ApiOperation(value="部门权限表-分页列表查询", notes="部门权限表-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(SysDepartPermission sysDepartPermission, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartPermission, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDepartPermissionService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param sysDepartPermission + * @return + */ + @ApiOperation(value="部门权限表-添加", notes="部门权限表-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysDepartPermission sysDepartPermission) { + sysDepartPermissionService.save(sysDepartPermission); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysDepartPermission + * @return + */ + @ApiOperation(value="部门权限表-编辑", notes="部门权限表-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysDepartPermission sysDepartPermission) { + sysDepartPermissionService.updateById(sysDepartPermission); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @ApiOperation(value="部门权限表-通过id删除", notes="部门权限表-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + sysDepartPermissionService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @ApiOperation(value="部门权限表-批量删除", notes="部门权限表-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.sysDepartPermissionService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @ApiOperation(value="部门权限表-通过id查询", notes="部门权限表-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getById(id); + return Result.OK(sysDepartPermission); + } + + /** + * 导出excel + * + * @param request + * @param sysDepartPermission + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysDepartPermission sysDepartPermission) { + return super.exportXls(request, sysDepartPermission, SysDepartPermission.class, "部门权限表"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysDepartPermission.class); + } + + /** + * 部门管理授权查询数据规则数据 + */ + @GetMapping(value = "/datarule/{permissionId}/{departId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("departId") String departId) { + List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); + if(list==null || list.size()==0) { + return Result.error("未找到权限配置信息"); + }else { + Map map = new HashMap<>(); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartPermission::getPermissionId, permissionId) + .eq(SysDepartPermission::getDepartId,departId); + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); + if(sysDepartPermission==null) { + //return Result.error("未找到角色菜单配置信息"); + }else { + String drChecked = sysDepartPermission.getDataRuleIds(); + if(oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); + } + } + return Result.OK(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } + + /** + * 保存数据规则至部门菜单关联表 + */ + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String departId = jsonObject.getString("departId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>"+"菜单ID:"+permissionId+"部门ID:"+ departId+"数据权限ID:"+dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartPermission::getPermissionId, permissionId) + .eq(SysDepartPermission::getDepartId,departId); + SysDepartPermission sysDepartPermission = sysDepartPermissionService.getOne(query); + if(sysDepartPermission==null) { + return Result.error("请先保存部门菜单权限!"); + }else { + sysDepartPermission.setDataRuleIds(dataRuleIds); + this.sysDepartPermissionService.updateById(sysDepartPermission); + } + } catch (Exception e) { + log.error("SysDepartPermissionController.saveDatarule()发生异常:" + e.getMessage(),e); + return Result.error("保存失败"); + } + return Result.OK("保存成功!"); + } + + /** + * 查询角色授权 + * + * @return + */ + @RequestMapping(value = "/queryDeptRolePermission", method = RequestMethod.GET) + public Result> queryDeptRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { + Result> result = new Result<>(); + try { + List list = sysDepartRolePermissionService.list(new QueryWrapper().lambda().eq(SysDepartRolePermission::getRoleId, roleId)); + result.setResult(list.stream().map(SysDepartRolePermission -> String.valueOf(SysDepartRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 保存角色授权 + * + * @return + */ + @RequestMapping(value = "/saveDeptRolePermission", method = RequestMethod.POST) + public Result saveDeptRolePermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String roleId = json.getString("roleId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysDepartRolePermissionService.saveDeptRolePermission(roleId, permissionIds, lastPermissionIds); + result.success("保存成功!"); + log.info("======部门角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 用户角色授权功能,查询菜单权限树 + * @param request + * @return + */ + @RequestMapping(value = "/queryTreeListForDeptRole", method = RequestMethod.GET) + public Result> queryTreeListForDeptRole(@RequestParam(name="departId",required=true) String departId,HttpServletRequest request) { + Result> result = new Result<>(); + //全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + query.inSql(SysPermission::getId,"select permission_id from sys_depart_permission where depart_id='"+departId+"'"); + List list = sysPermissionService.list(query); + for(SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + Map resMap = new HashMap(); + resMap.put("treeList", treeList); //全部树节点数据 + resMap.put("ids", ids);//全部树ids + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + private void getTreeModelList(List treeList, List metaList, TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(),permission.getRuleFlag(), permission.isLeaf()); + if(temp==null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if(!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getKey())){ + temp.getChildren().add(tree); + if(!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartRoleController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartRoleController.java new file mode 100644 index 00000000..0de71409 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDepartRoleController.java @@ -0,0 +1,291 @@ +package com.jero.modules.system.controller; + +import java.util.*; +import java.util.stream.Collectors; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.system.base.controller.JeroController; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.*; +import com.jero.modules.system.service.*; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; + + /** + * @Description: 部门角色 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +@Slf4j +@Api(tags="部门角色") +@RestController +@RequestMapping("/sys/sysDepartRole") +public class SysDepartRoleController extends JeroController { + @Autowired + private ISysDepartRoleService sysDepartRoleService; + + @Autowired + private ISysDepartRoleUserService departRoleUserService; + + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; + + @Autowired + private ISysDepartRolePermissionService sysDepartRolePermissionService; + + @Autowired + private ISysDepartService sysDepartService; + + /** + * 分页列表查询 + * + * @param sysDepartRole + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @ApiOperation(value="部门角色-分页列表查询", notes="部门角色-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(SysDepartRole sysDepartRole, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + @RequestParam(name="deptId",required=false) String deptId, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDepartRole, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List deptIds = null; +// if(oConvertUtils.isEmpty(deptId)){ +// if(oConvertUtils.isNotEmpty(user.getUserIdentity()) && user.getUserIdentity().equals(CommonConstant.USER_IDENTITY_2) ){ +// deptIds = sysDepartService.getMySubDepIdsByDepId(user.getDepartIds()); +// }else{ +// return Result.OK(null); +// } +// }else{ +// deptIds = sysDepartService.getSubDepIdsByDepId(deptId); +// } +// queryWrapper.in("depart_id",deptIds); + + //我的部门,选中部门只能看当前部门下的角色 + queryWrapper.eq("depart_id",deptId); + IPage pageList = sysDepartRoleService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param sysDepartRole + * @return + */ + //@RequiresRoles({"admin"}) + @ApiOperation(value="部门角色-添加", notes="部门角色-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysDepartRole sysDepartRole) { + sysDepartRoleService.save(sysDepartRole); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysDepartRole + * @return + */ + //@RequiresRoles({"admin"}) + @ApiOperation(value="部门角色-编辑", notes="部门角色-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysDepartRole sysDepartRole) { + sysDepartRoleService.updateById(sysDepartRole); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + //@RequiresRoles({"admin"}) + @AutoLog(value = "部门角色-通过id删除") + @ApiOperation(value="部门角色-通过id删除", notes="部门角色-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + sysDepartRoleService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + //@RequiresRoles({"admin"}) + @AutoLog(value = "部门角色-批量删除") + @ApiOperation(value="部门角色-批量删除", notes="部门角色-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.sysDepartRoleService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @ApiOperation(value="部门角色-通过id查询", notes="部门角色-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + SysDepartRole sysDepartRole = sysDepartRoleService.getById(id); + return Result.OK(sysDepartRole); + } + + /** + * 获取部门下角色 + * @param departId + * @return + */ + @RequestMapping(value = "/getDeptRoleList", method = RequestMethod.GET) + public Result> getDeptRoleList(@RequestParam(value = "departId") String departId,@RequestParam(value = "userId") String userId){ + Result> result = new Result<>(); + //查询选中部门的角色 + List deptRoleList = sysDepartRoleService.list(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId,departId)); + result.setSuccess(true); + result.setResult(deptRoleList); + return result; + } + + /** + * 设置 + * @param json + * @return + */ + //@RequiresRoles({"admin"}) + @RequestMapping(value = "/deptRoleUserAdd", method = RequestMethod.POST) + public Result deptRoleAdd(@RequestBody JSONObject json) { + String newRoleId = json.getString("newRoleId"); + String oldRoleId = json.getString("oldRoleId"); + String userId = json.getString("userId"); + departRoleUserService.deptRoleUserAdd(userId,newRoleId,oldRoleId); + return Result.OK("添加成功!"); + } + + /** + * 根据用户id获取已设置部门角色 + * @param userId + * @return + */ + @RequestMapping(value = "/getDeptRoleByUserId", method = RequestMethod.GET) + public Result> getDeptRoleByUserId(@RequestParam(value = "userId") String userId,@RequestParam(value = "departId") String departId){ + Result> result = new Result<>(); + //查询部门下角色 + List roleList = sysDepartRoleService.list(new QueryWrapper().eq("depart_id",departId)); + List roleIds = roleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + //根据角色id,用户id查询已授权角色 + List roleUserList = departRoleUserService.list(new QueryWrapper().eq("user_id",userId).in("drole_id",roleIds)); + result.setSuccess(true); + result.setResult(roleUserList); + return result; + } + + /** + * 查询数据规则数据 + */ + @GetMapping(value = "/datarule/{permissionId}/{departId}/{roleId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("departId") String departId,@PathVariable("roleId") String roleId) { + //查询已授权的部门规则 + List list = sysDepartPermissionService.getPermRuleListByDeptIdAndPermId(departId,permissionId); + if(list==null || list.size()==0) { + return Result.error("未找到权限配置信息"); + }else { + Map map = new HashMap<>(); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartRolePermission::getPermissionId, permissionId) + .eq(SysDepartRolePermission::getRoleId,roleId); + SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); + if(sysRolePermission==null) { + //return Result.error("未找到角色菜单配置信息"); + }else { + String drChecked = sysRolePermission.getDataRuleIds(); + if(oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); + } + } + return Result.OK(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } + + /** + * 保存数据规则至角色菜单关联表 + */ + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String roleId = jsonObject.getString("roleId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>"+"菜单ID:"+permissionId+"角色ID:"+ roleId+"数据权限ID:"+dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysDepartRolePermission::getPermissionId, permissionId) + .eq(SysDepartRolePermission::getRoleId,roleId); + SysDepartRolePermission sysRolePermission = sysDepartRolePermissionService.getOne(query); + if(sysRolePermission==null) { + return Result.error("请先保存角色菜单权限!"); + }else { + sysRolePermission.setDataRuleIds(dataRuleIds); + this.sysDepartRolePermissionService.updateById(sysRolePermission); + } + } catch (Exception e) { + log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(),e); + return Result.error("保存失败"); + } + return Result.OK("保存成功!"); + } + + /** + * 导出excel + * + * @param request + * @param sysDepartRole + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysDepartRole sysDepartRole) { + return super.exportXls(request, sysDepartRole, SysDepartRole.class, "部门角色"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysDepartRole.class); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java new file mode 100644 index 00000000..e5697827 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java @@ -0,0 +1,585 @@ +package com.jero.modules.system.controller; + + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.DictQuery; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.ImportExcelUtil; +import com.jero.common.util.SqlInjectionUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDict; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.model.SysDictTree; +import com.jero.modules.system.model.TreeSelectModel; +import com.jero.modules.system.service.ISysDictItemService; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.vo.SysDictPage; +import org.jeecgframework.poi.excel.ExcelImportCheckUtil; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.*; + +/** + *

+ * 字典表 前端控制器 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@RestController +@Api(tags = "字典控制器") +@RequestMapping("/sys/dict") +@Slf4j +public class SysDictController { + + @Autowired + private ISysDictService sysDictService; + @Autowired + private ISysDictItemService sysDictItemService; + @Autowired + public RedisTemplate redisTemplate; + + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/page", method = RequestMethod.GET) + @ApiOperation(value = "字典控制器-分页列表查询", notes = "字典控制器-分页列表查询") + public Result> queryPageList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDictService.page(page, queryWrapper); + log.debug("查询当前页:"+pageList.getCurrent()); + log.debug("查询当前页数量:"+pageList.getSize()); + log.debug("查询结果数量:"+pageList.getRecords().size()); + log.debug("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:获取树形字典数据 + * @param sysDict + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @SuppressWarnings("unchecked") + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-树形字典数据", notes = "字典控制器-树形字典数据") + @RequestMapping(value = "/treeList", method = RequestMethod.GET) + public Result> treeList(SysDict sysDict, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + // 构造查询条件 + String dictName = sysDict.getDictName(); + if(oConvertUtils.isNotEmpty(dictName)) { + query.like(true, SysDict::getDictName, dictName); + } + query.orderByDesc(true, SysDict::getCreateTime); + List list = sysDictService.list(query); + List treeList = new ArrayList<>(); + for (SysDict node : list) { + treeList.add(new SysDictTree(node)); + } + result.setSuccess(true); + result.setResult(treeList); + return result; + } + + /** + * 获取字典数据 + * @param dictCode 字典code + * @param dictCode 表名,文本字段,code字段 | 举例:sys_user,realname,id + * @return + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-根据字典编码获取字典数据", notes = "字典控制器-根据字典编码获取字典数据") + @RequestMapping(value = "/getDictItems/{dictCode}", method = RequestMethod.GET) + public Result> getDictItems(@PathVariable String dictCode, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) { + log.info(" dictCode : "+ dictCode); + Result> result = new Result>(); + List ls = null; + try { + if(dictCode.indexOf(",")!=-1) { + //关联表字典(举例:sys_user,realname,id) + String[] params = dictCode.split(","); + + if(params.length<3) { + result.error500("字典Code格式不正确!"); + return result; + } + //SQL注入校验(只限制非法串改数据库) + final String[] sqlInjCheck = {params[0],params[1],params[2]}; + SqlInjectionUtil.filterContent(sqlInjCheck); + + if(params.length==4) { + //SQL注入校验(查询条件SQL 特殊check,此方法仅供此处使用) + SqlInjectionUtil.specialFilterContent(params[3]); + ls = sysDictService.queryTableDictItemsByCodeAndFilter(params[0],params[1],params[2],params[3]); + }else if (params.length==3) { + ls = sysDictService.queryTableDictItemsByCode(params[0],params[1],params[2]); + }else{ + result.error500("字典Code格式不正确!"); + return result; + } + }else { + //字典表 + ls = sysDictService.queryDictItemsByCode(dictCode); + } + + result.setSuccess(true); + result.setResult(ls); + log.debug(result.toString()); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + return result; + } + + return result; + } + + /** + * 获取全部字典数据 + * + * @return + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-获取全部字典数据", notes = "字典控制器-获取全部字典数据") + @RequestMapping(value = "/queryAllDictItems", method = RequestMethod.GET) + public Result queryAllDictItems(HttpServletRequest request) { + Map> res = new HashMap>(); + res = sysDictService.queryAllDictItems(); + return Result.OK(res); + } + + /** + * 获取字典数据 + * @param dictCode + * @return + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-通过字典code和字典值key获取字典数据", notes = "字典控制器-通过字典code和字典值key获取字典数据") + @RequestMapping(value = "/getDictText/{dictCode}/{key}", method = RequestMethod.GET) + public Result getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key) { + log.info(" dictCode : "+ dictCode); + Result result = new Result(); + String text = null; + try { + text = sysDictService.queryDictTextByKey(dictCode, key); + result.setSuccess(true); + result.setResult(text); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + return result; + } + return result; + } + + /** + * 大数据量的字典表 走异步加载 即前端输入内容过滤数据 + * @param dictCode + * @return + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-通过字典code获取字典数据", notes = "字典控制器-通过字典code获取字典数据") + @RequestMapping(value = "/loadDict/{dictCode}", method = RequestMethod.GET) + public Result> loadDict(@PathVariable String dictCode, + @RequestParam(name="keyword") String keyword, + @RequestParam(value = "sign",required = false) String sign, + @RequestParam(value = "pageSize", required = false) Integer pageSize) { + log.info(" 加载字典表数据,加载关键字: "+ keyword); + Result> result = new Result>(); + List ls = null; + try { + if(dictCode.indexOf(",")!=-1) { + String[] params = dictCode.split(","); + if(params.length!=3) { + result.error500("字典Code格式不正确!"); + return result; + } + if(pageSize!=null){ + ls = sysDictService.queryLittleTableDictItems(params[0],params[1],params[2],keyword, pageSize); + }else{ + ls = sysDictService.queryTableDictItems(params[0],params[1],params[2],keyword); + } + result.setSuccess(true); + result.setResult(ls); + log.info(result.toString()); + }else { + result.error500("字典Code格式不正确!"); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + return result; + } + + return result; + } + + /** + * 根据字典code加载字典text 返回 + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-根据字典code加载字典text", notes = "字典控制器-根据字典code加载字典text") + @RequestMapping(value = "/loadDictItem/{dictCode}", method = RequestMethod.GET) + public Result> loadDictItem(@PathVariable String dictCode, @RequestParam(name="key") String keys, @RequestParam(value = "sign",required = false) String sign, HttpServletRequest request) { + Result> result = new Result<>(); + try { + if(dictCode.indexOf(",")!=-1) { + String[] params = dictCode.split(","); + if(params.length!=3) { + result.error500("字典Code格式不正确!"); + return result; + } + List texts = sysDictService.queryTableDictByKeys(params[0], params[1], params[2], keys); + + result.setSuccess(true); + result.setResult(texts); + log.info(result.toString()); + }else { + result.error500("字典Code格式不正确!"); + } + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + return result; + } + + return result; + } + + /** + * 根据表名——显示字段-存储字段 pid 加载树形数据 + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 pid 加载树形数据") + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result> loadTreeData(@RequestParam(name="pid") String pid, @RequestParam(name="pidField") String pidField, + @RequestParam(name="tableName") String tbname, + @RequestParam(name="text") String text, + @RequestParam(name="code") String code, + @RequestParam(name="hasChildField", required = false) String hasChildField, + @RequestParam(value = "sign", required = false) String sign, HttpServletRequest request) { + Result> result = new Result>(); + + // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件) + String dictCode = tbname +","+ text +","+ code; + SqlInjectionUtil.filterContent(dictCode); + List ls = sysDictService.queryTreeList(null, tbname, text, code, pidField, pid, hasChildField); + result.setSuccess(true); + result.setResult(ls); + return result; + } + + /** + * 查询后返回树型数据 + */ + @RequiresPermissions("sys:dict:list") + @ApiOperation(value = "字典控制器-根据表名—显示字段-存储字段 加载树形数据", notes = "字典控制器-根据表名—显示字段-存储字段 加载树形数据") + @RequestMapping(value = "/queryAllTreeData", method = RequestMethod.GET) + public Result> queryAllTreeData(@RequestParam(name="pidField") String pidField, + @RequestParam(name="tableName") String tbname, + @RequestParam(name="text") String text, + @RequestParam(name="code") String code, + HttpServletRequest request) { + Result> result = new Result>(); + + // SQL注入漏洞 sign签名校验(表名,label字段,val字段,条件) + String dictCode = tbname +","+ text +","+ code; + SqlInjectionUtil.filterContent(dictCode); + List ls = sysDictService.queryAllTreeData(tbname, text, code, pidField); + result.setSuccess(true); + result.setResult(ls); + return result; + } + + /** + * @功能:新增 + * @param sysDict + * @return + */ + @RequiresPermissions("sys:dict:add") + @ApiOperation(value = "字典控制器-新增字典", notes = "字典控制器-新增字典") + @RequiresRoles({"admin"}) + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysDict sysDict) { + Result result = new Result(); + try { + sysDict.setCreateTime(new Date()); + sysDict.setDelFlag(CommonConstant.DEL_FLAG_0); + sysDictService.save(sysDict); + result.success("保存成功!"); + //添加成功后需要刷新缓存 + sysDictService.refreshCache(); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * @功能:编辑 + * @param sysDict + * @return + */ + @RequiresPermissions("sys:dict:edit") + @ApiOperation(value = "字典控制器-编辑字典", notes = "字典控制器-编辑字典") + @RequiresRoles({"admin"}) + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result edit(@RequestBody SysDict sysDict) { + Result result = new Result(); + SysDict sysdict = sysDictService.getById(sysDict.getId()); + if(sysdict==null) { + result.error500("未找到对应实体"); + }else { + sysDict.setUpdateTime(new Date()); + boolean ok = sysDictService.updateById(sysDict); + if(ok) { + result.success("编辑成功!"); + //编辑成功后需要刷新缓存 + sysDictService.refreshCache(); + } + } + return result; + } + + /** + * @功能:删除 + * @param id + * @return + */ + @RequiresPermissions("sys:dict:del") + @ApiOperation(value = "字典控制器-删除字典", notes = "字典控制器-删除字典") + @RequiresRoles({"admin"}) + @DeleteMapping(value = "/delete") + @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + boolean ok = sysDictService.removeById(id); + if(ok) { + result.success("删除成功!"); + }else{ + result.error500("删除失败!"); + } + return result; + } + + /** + * @功能:批量删除 + * @param ids + * @return + */ + @RequiresPermissions("sys:dict:del") + @ApiOperation(value = "字典控制器-批量字典", notes = "字典控制器-批量字典") + @DeleteMapping(value = "/deleteBatch") + @CacheEvict(value= CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(oConvertUtils.isEmpty(ids)) { + result.error500("参数不识别!"); + }else { + sysDictService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * @功能:刷新缓存 + * @date 修改时间 2021.4.8 + * @return + */ + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/refleshCache") + public Result refleshCache() { + Result result = new Result(); + sysDictService.refreshCache(); + return result; + } + + /** + * 导出excel + * + * @param request + */ + @RequiresPermissions("sys:dict:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysDict sysDict, HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDict, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = new ArrayList(); + + List sysDictList = sysDictService.list(queryWrapper); + for (SysDict dictMain : sysDictList) { + SysDictPage vo = new SysDictPage(); + BeanUtils.copyProperties(dictMain, vo); + // 查询机票 + List sysDictItemList = sysDictItemService.selectItemsByMainId(dictMain.getId()); + vo.setSysDictItemList(sysDictItemList); + pageList.add(vo); + } + + // 导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "数据字典"); + // 注解对象Class + mv.addObject(NormalExcelConstants.CLASS, SysDictPage.class); + // 自定义表格参数 + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("数据字典列表", "导出人:"+user.getRealname(), "数据字典")); + // 导出数据列表 + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param + * @return + */ + @RequiresPermissions("sys:dict:import") + @RequiresRoles({"admin"}) + @PostMapping(value = "/importExcel") + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(2); + params.setNeedSave(true); + try { + //导入Excel格式校验,看匹配的字段文本概率 + Boolean t = ExcelImportCheckUtil.check(file.getInputStream(), SysDictPage.class, params); + if(!t){ + throw new RuntimeException("导入Excel校验失败 !"); + } + List list = ExcelImportUtil.importExcel(file.getInputStream(), SysDictPage.class, params); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (int i=0;i< list.size();i++) { + SysDict po = new SysDict(); + BeanUtils.copyProperties(list.get(i), po); + po.setDelFlag(CommonConstant.DEL_FLAG_0); + try { + Integer integer = sysDictService.saveMain(po, list.get(i).getSysDictItemList()); + if(integer>0){ + successLines++; + }else{ + errorLines++; + int lineNumber = i + 1; + errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); + } + } catch (Exception e) { + errorLines++; + int lineNumber = i + 1; + errorMessage.add("第 " + lineNumber + " 行:字典编码已经存在,忽略导入。"); + } + } + return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Result.error("文件导入失败:"+e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } + + + /** + * 查询被删除的列表 + * @return + */ + @RequiresPermissions("sys:dict:list") + @GetMapping(value = "/deleteList") + public Result> deleteList() { + Result> result = new Result>(); + List list = this.sysDictService.queryDeleteList(); + result.setSuccess(true); + result.setResult(list); + return result; + } + + /** + * 物理删除 + * @param id + * @return + */ + @RequiresPermissions("sys:dict:list") + @DeleteMapping(value = "/deletePhysic/{id}") + public Result deletePhysic(@PathVariable String id) { + try { + sysDictService.deleteOneDictPhysically(id); + return Result.OK("删除成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("删除失败!"); + } + } + + /** + * 取回 + * @param id + * @return + */ + @RequiresPermissions("sys:dict:list") + @PutMapping(value = "/back/{id}") + public Result back(@PathVariable String id) { + try { + sysDictService.updateDictDelFlag(0,id); + return Result.OK("操作成功!"); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("操作失败!"); + } + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java new file mode 100644 index 00000000..17ae15ab --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictItemController.java @@ -0,0 +1,190 @@ +package com.jero.modules.system.controller; + + +import java.util.Arrays; +import java.util.Date; + +import javax.servlet.http.HttpServletRequest; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.service.ISysDictItemService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

+ * 前端控制器 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@RestController +@RequestMapping("/sys/dictItem") +@Slf4j +public class SysDictItemController { + + @Autowired + private ISysDictItemService sysDictItemService; + + /** + * @功能:查询字典数据 + * @param sysDictItem + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysDictItem sysDictItem,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap()); + queryWrapper.orderByAsc("sort_order"); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysDictItemService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:新增 + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/add", method = RequestMethod.POST) + @CacheEvict(value= CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result add(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + try { + sysDictItem.setCreateTime(new Date()); + sysDictItemService.save(sysDictItem); + result.success("保存成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * @功能:编辑 + * @param sysDictItem + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result edit(@RequestBody SysDictItem sysDictItem) { + Result result = new Result(); + SysDictItem sysdict = sysDictItemService.getById(sysDictItem.getId()); + if(sysdict==null) { + result.error500("未找到对应实体"); + }else { + sysDictItem.setUpdateTime(new Date()); + boolean ok = sysDictItemService.updateById(sysDictItem); + //TODO 返回false说明什么? + if(ok) { + result.success("编辑成功!"); + } + } + return result; + } + + /** + * @功能:删除字典数据 + * @param id + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysDictItem joinSystem = sysDictItemService.getById(id); + if(joinSystem==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysDictItemService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @功能:批量删除字典数据 + * @param ids + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + @CacheEvict(value=CacheConstant.SYS_DICT_CACHE, allEntries=true) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysDictItemService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 字典值重复校验 + * @param sysDictItem + * @param request + * @return + */ + @RequiresPermissions("sys:dict:list") + @RequestMapping(value = "/dictItemCheck", method = RequestMethod.GET) + @ApiOperation("字典重复校验接口") + public Result doDictItemCheck(SysDictItem sysDictItem, HttpServletRequest request) { + int num = 0; + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysDictItem::getItemValue,sysDictItem.getItemValue()); + queryWrapper.eq(SysDictItem::getDictId,sysDictItem.getDictId()); + if (StringUtils.isNotBlank(sysDictItem.getId())) { + // 编辑页面校验 + queryWrapper.ne(SysDictItem::getId,sysDictItem.getId()); + } + num = sysDictItemService.count(queryWrapper); + if (num == 0) { + // 该值可用 + return Result.OK("该值可用!"); + } else { + // 该值不可用 + log.info("该值不可用,系统中已存在!"); + return Result.error("该值不可用,系统中已存在!"); + } + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java new file mode 100644 index 00000000..4b40acc5 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysFillRuleController.java @@ -0,0 +1,213 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.FillRuleUtil; +import com.jero.modules.system.entity.SysFillRule; +import com.jero.modules.system.service.ISysFillRuleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; + +/** + * @Description: 填值规则 + * @Author: jero-boot + * @Date: 2019-11-07 + * @Version: V1.0 + */ +@Slf4j +@Api(tags = "填值规则") +@RestController +@RequestMapping("/sys/fillRule") +public class SysFillRuleController extends JeroController { + @Autowired + private ISysFillRuleService sysFillRuleService; + + /** + * 分页列表查询 + * + * @param sysFillRule + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "填值规则-分页列表查询") + @ApiOperation(value = "填值规则-分页列表查询", notes = "填值规则-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(SysFillRule sysFillRule, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysFillRule, req.getParameterMap()); + Page page = new Page<>(pageNo, pageSize); + IPage pageList = sysFillRuleService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 测试 ruleCode + * + * @param ruleCode + * @return + */ + @GetMapping(value = "/testFillRule") + public Result testFillRule(@RequestParam("ruleCode") String ruleCode) { + Object result = FillRuleUtil.executeRule(ruleCode, new JSONObject()); + return Result.OK(result); + } + + /** + * 添加 + * + * @param sysFillRule + * @return + */ + @AutoLog(value = "填值规则-添加") + @ApiOperation(value = "填值规则-添加", notes = "填值规则-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody SysFillRule sysFillRule) { + sysFillRuleService.save(sysFillRule); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param sysFillRule + * @return + */ + @AutoLog(value = "填值规则-编辑") + @ApiOperation(value = "填值规则-编辑", notes = "填值规则-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysFillRule sysFillRule) { + sysFillRuleService.updateById(sysFillRule); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "填值规则-通过id删除") + @ApiOperation(value = "填值规则-通过id删除", notes = "填值规则-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysFillRuleService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "填值规则-批量删除") + @ApiOperation(value = "填值规则-批量删除", notes = "填值规则-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.sysFillRuleService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "填值规则-通过id查询") + @ApiOperation(value = "填值规则-通过id查询", notes = "填值规则-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + SysFillRule sysFillRule = sysFillRuleService.getById(id); + return Result.OK(sysFillRule); + } + + /** + * 导出excel + * + * @param request + * @param sysFillRule + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysFillRule sysFillRule) { + return super.exportXls(request, sysFillRule, SysFillRule.class, "填值规则"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, SysFillRule.class); + } + + /** + * 通过 ruleCode 执行自定义填值规则 + * + * @param ruleCode 要执行的填值规则编码 + * @param formData 表单数据,可根据表单数据的不同生成不同的填值结果 + * @return 运行后的结果 + */ + @PutMapping("/executeRuleByCode/{ruleCode}") + public Result executeByRuleCode(@PathVariable("ruleCode") String ruleCode, @RequestBody JSONObject formData) { + Object result = FillRuleUtil.executeRule(ruleCode, formData); + return Result.OK(result); + } + + + /** + * 批量通过 ruleCode 执行自定义填值规则 + * + * @param ruleData 要执行的填值规则JSON数组: + * 示例: { "commonFormData": {}, rules: [ { "ruleCode": "xxx", "formData": null } ] } + * @return 运行后的结果,返回示例: [{"ruleCode": "order_num_rule", "result": "CN2019111117212984"}] + * + */ + @PutMapping("/executeRuleByCodeBatch") + public Result executeByRuleCodeBatch(@RequestBody JSONObject ruleData) { + JSONObject commonFormData = ruleData.getJSONObject("commonFormData"); + JSONArray rules = ruleData.getJSONArray("rules"); + // 遍历 rules ,批量执行规则 + JSONArray results = new JSONArray(rules.size()); + for (int i = 0; i < rules.size(); i++) { + JSONObject rule = rules.getJSONObject(i); + String ruleCode = rule.getString("ruleCode"); + JSONObject formData = rule.getJSONObject("formData"); + // 如果没有传递 formData,就用common的 + if (formData == null) { + formData = commonFormData; + } + // 执行填值规则 + Object result = FillRuleUtil.executeRule(ruleCode, formData); + JSONObject obj = new JSONObject(rules.size()); + obj.put("ruleCode", ruleCode); + obj.put("result", result); + results.add(obj); + } + return Result.OK(results); + } + +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysGatewayRouteController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysGatewayRouteController.java new file mode 100644 index 00000000..b5c77c00 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysGatewayRouteController.java @@ -0,0 +1,76 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.system.base.controller.JeroController; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysGatewayRoute; +import com.jero.modules.system.service.ISysGatewayRouteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @Description: gateway路由管理 + * @Author: jero-boot + * @Date: 2020-05-26 + * @Version: V1.0 + */ +@Api(tags = "gateway路由管理") +@RestController +@RequestMapping("/sys/gatewayRoute") +@Slf4j +public class SysGatewayRouteController extends JeroController { + + @Autowired + private ISysGatewayRouteService sysGatewayRouteService; + + @PostMapping(value = "/updateAll") + public Result updateAll(@RequestBody JSONObject json) { + sysGatewayRouteService.updateAll(json); + return Result.OK("操作成功!"); + } + + @GetMapping(value = "/page") + public Result queryPageList(SysGatewayRoute sysGatewayRoute) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List ls = sysGatewayRouteService.list(query); + JSONArray array = new JSONArray(); + for(SysGatewayRoute rt: ls){ + JSONObject obj = (JSONObject) JSONObject.toJSON(rt); + if(oConvertUtils.isNotEmpty(rt.getPredicates())){ + obj.put("predicates", JSONArray.parseArray(rt.getPredicates())); + } + if(oConvertUtils.isNotEmpty(rt.getFilters())){ + obj.put("filters", JSONArray.parseArray(rt.getFilters())); + } + array.add(obj); + } + return Result.OK(array); + } + + @GetMapping(value = "/clearRedis") + public Result clearRedis() { + sysGatewayRouteService.clearRedis(); + return Result.OK("清除成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + //@RequiresRoles({"admin"}) + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + sysGatewayRouteService.deleteById(id); + return Result.OK("删除路由成功"); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java new file mode 100644 index 00000000..3637cd3f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysLogController.java @@ -0,0 +1,117 @@ +package com.jero.modules.system.controller; + + +import java.util.Arrays; + +import javax.servlet.http.HttpServletRequest; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysLog; +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.system.service.ISysLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

+ * 系统日志表 前端控制器 + *

+ * + * @Author zhangweijian + * @since 2018-12-26 + */ +@RestController +@RequestMapping("/sys/log") +@Slf4j +public class SysLogController { + + @Autowired + private ISysLogService sysLogService; + + /** + * @功能:查询日志记录 + * @param syslog + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysLog syslog,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(syslog, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + //日志关键词 + String keyWord = req.getParameter("keyWord"); + if(oConvertUtils.isNotEmpty(keyWord)) { + queryWrapper.like("log_content",keyWord); + } + //TODO 过滤逻辑处理 + //TODO begin、end逻辑处理 + //TODO 一个强大的功能,前端传一个字段字符串,后台只返回这些字符串对应的字段 + //创建时间/创建人的赋值 + IPage pageList = sysLogService.page(page, queryWrapper); + log.info("查询当前页:"+pageList.getCurrent()); + log.info("查询当前页数量:"+pageList.getSize()); + log.info("查询结果数量:"+pageList.getRecords().size()); + log.info("数据总数:"+pageList.getTotal()); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * @功能:删除单个日志记录 + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysLog sysLog = sysLogService.getById(id); + if(sysLog==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysLogService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + return result; + } + + /** + * @功能:批量,全部清空日志记录 + * @param ids + * @return + */ + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + if("allclear".equals(ids)) { + this.sysLogService.removeAll(); + result.success("清除成功!"); + } + this.sysLogService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java new file mode 100644 index 00000000..33bbcf01 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysPermissionController.java @@ -0,0 +1,807 @@ +package com.jero.modules.system.controller; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.MD5Util; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepartPermission; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.entity.SysPermissionDataRule; +import com.jero.modules.system.entity.SysRolePermission; +import com.jero.modules.system.model.SysPermissionTree; +import com.jero.modules.system.model.TreeModel; +import com.jero.modules.system.service.*; +import com.jero.modules.system.util.PermissionDataUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 菜单权限表 前端控制器 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Slf4j +@RestController +@RequestMapping("/sys/permission") +public class SysPermissionController { + + @Autowired + private ISysPermissionService sysPermissionService; + + @Autowired + private ISysRolePermissionService sysRolePermissionService; + + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + + @Autowired + private ISysDepartPermissionService sysDepartPermissionService; + + /** + * 加载数据节点 + * + * @return + */ + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> list() { + long start = System.currentTimeMillis(); + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List treeList = new ArrayList<>(); + getTreeList(treeList, list, null); + result.setResult(treeList); + result.setSuccess(true); + log.info("======获取全部菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /*update_begin author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + /** + * 系统菜单列表(一级菜单) + * + * @return + */ + @RequestMapping(value = "/getSystemMenuList", method = RequestMethod.GET) + public Result> getSystemMenuList() { + long start = System.currentTimeMillis(); + Result> result = new Result<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getMenuType,CommonConstant.MENU_TYPE_0); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List sysPermissionTreeList = new ArrayList(); + for(SysPermission sysPermission : list){ + SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); + sysPermissionTreeList.add(sysPermissionTree); + } + result.setResult(sysPermissionTreeList); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + log.info("======获取一级菜单数据=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + return result; + } + + /** + * 查询子菜单 + * @param parentId + * @return + */ + @RequestMapping(value = "/getSystemSubmenu", method = RequestMethod.GET) + public Result> getSystemSubmenu(@RequestParam("parentId") String parentId){ + Result> result = new Result<>(); + try{ + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getParentId,parentId); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + List sysPermissionTreeList = new ArrayList(); + for(SysPermission sysPermission : list){ + SysPermissionTree sysPermissionTree = new SysPermissionTree(sysPermission); + sysPermissionTreeList.add(sysPermissionTree); + } + result.setResult(sysPermissionTreeList); + result.setSuccess(true); + }catch (Exception e){ + log.error(e.getMessage(), e); + } + return result; + } + /*update_end author:wuxianquan date:20190908 for:先查询一级菜单,当用户点击展开菜单时加载子菜单 */ + + // update_begin author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- + /** + * 查询子菜单 + * + * @param parentIds 父ID(多个采用半角逗号分割) + * @return 返回 key-value 的 Map + */ + @GetMapping("/getSystemSubmenuBatch") + public Result getSystemSubmenuBatch(@RequestParam("parentIds") String parentIds) { + try { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + query.in(SysPermission::getParentId, parentIdList); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + Map> listMap = new HashMap<>(); + for (SysPermission item : list) { + String pid = item.getParentId(); + if (parentIdList.contains(pid)) { + List mapList = listMap.get(pid); + if (mapList == null) { + mapList = new ArrayList<>(); + } + mapList.add(new SysPermissionTree(item)); + listMap.put(pid, mapList); + } + } + return Result.OK(listMap); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("批量查询子菜单失败:" + e.getMessage()); + } + } + // update_end author:sunjianlei date:20200108 for: 新增批量根据父ID查询子级菜单的接口 ------------- + +// /** +// * 查询用户拥有的菜单权限和按钮权限(根据用户账号) +// * +// * @return +// */ +// @RequestMapping(value = "/queryByUser", method = RequestMethod.GET) +// public Result queryByUser(HttpServletRequest req) { +// Result result = new Result<>(); +// try { +// String username = req.getParameter("username"); +// List metaList = sysPermissionService.queryByUser(username); +// JSONArray jsonArray = new JSONArray(); +// this.getPermissionJsonArray(jsonArray, metaList, null); +// result.setResult(jsonArray); +// result.success("查询成功"); +// } catch (Exception e) { +// result.error500("查询失败:" + e.getMessage()); +// log.error(e.getMessage(), e); +// } +// return result; +// } + + /** + * 查询用户拥有的菜单权限和按钮权限 + * + * @return + */ + @RequestMapping(value = "/getUserPermissionByToken", method = RequestMethod.GET) + public Result getUserPermissionByToken() { + Result result = new Result(); + try { + //直接获取当前用户不适用前端token + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (oConvertUtils.isEmpty(loginUser)) { + return Result.error("请登录系统!"); + } + List metaList = sysPermissionService.queryByUser(loginUser.getUsername()); + //添加首页路由 + //update-begin-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 + //if(!PermissionDataUtil.hasIndexPage(metaList)){ + // SysPermission indexMenu = sysPermissionService.list(new LambdaQueryWrapper().eq(SysPermission::getName,"首页")).get(0); + // metaList.add(0,indexMenu); + //} + //update-end-author:taoyan date:20200211 for: TASK #3368 【路由缓存】首页的缓存设置有问题,需要根据后台的路由配置来实现是否缓存 + JSONObject json = new JSONObject(); + JSONArray menujsonArray = new JSONArray(); + this.getPermissionJsonArray(menujsonArray, metaList, null); + JSONArray authjsonArray = new JSONArray(); + this.getAuthJsonArray(authjsonArray, metaList); + //查询所有的权限 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.eq(SysPermission::getMenuType, CommonConstant.MENU_TYPE_2); + //query.eq(SysPermission::getStatus, "1"); + List allAuthList = sysPermissionService.list(query); + JSONArray allauthjsonArray = new JSONArray(); + this.getAllAuthJsonArray(allauthjsonArray, allAuthList); + //路由菜单 + json.put("menu", menujsonArray); + //按钮权限(用户拥有的权限集合) + json.put("auth", authjsonArray); + //全部权限配置集合(按钮权限,访问权限) + json.put("allAuth", allauthjsonArray); + result.setResult(json); + result.success("查询成功"); + } catch (Exception e) { + result.error500("查询失败:" + e.getMessage()); + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 添加菜单 + * @param permission + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody SysPermission permission) { + Result result = new Result(); + try { + permission = PermissionDataUtil.intelligentProcessData(permission); + sysPermissionService.addPermission(permission); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑菜单 + * @param permission + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/edit", method = { RequestMethod.PUT, RequestMethod.POST }) + public Result edit(@RequestBody SysPermission permission) { + Result result = new Result<>(); + try { + permission = PermissionDataUtil.intelligentProcessData(permission); + sysPermissionService.editPermission(permission); + result.success("修改成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 删除菜单 + * @param id + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name = "id", required = true) String id) { + Result result = new Result<>(); + try { + sysPermissionService.deletePermission(id); + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500(e.getMessage()); + } + return result; + } + + /** + * 批量删除菜单 + * @param ids + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + Result result = new Result<>(); + try { + String[] arr = ids.split(","); + for (String id : arr) { + if (oConvertUtils.isNotEmpty(id)) { + sysPermissionService.deletePermission(id); + } + } + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("删除成功!"); + } + return result; + } + + /** + * 获取全部的权限树 + * + * @return + */ + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList() { + Result> result = new Result<>(); + // 全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + for (SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + + Map resMap = new HashMap(); + resMap.put("treeList", treeList); // 全部树节点数据 + resMap.put("ids", ids);// 全部树ids + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 异步加载数据节点 + * + * @return + */ + @RequestMapping(value = "/queryListAsync", method = RequestMethod.GET) + public Result> queryAsync(@RequestParam(name = "pid", required = false) String parentId) { + Result> result = new Result<>(); + try { + List list = sysPermissionService.queryListByParentId(parentId); + if (list == null || list.size() <= 0) { + result.error500("未找到角色信息"); + } else { + result.setResult(list); + result.setSuccess(true); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + } + + return result; + } + + /** + * 查询角色授权 + * + * @return + */ + @RequestMapping(value = "/queryRolePermission", method = RequestMethod.GET) + public Result> queryRolePermission(@RequestParam(name = "roleId", required = true) String roleId) { + Result> result = new Result<>(); + try { + List list = sysRolePermissionService.list(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId)); + result.setResult(list.stream().map(SysRolePermission -> String.valueOf(SysRolePermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 保存角色授权 + * + * @return + */ + @RequestMapping(value = "/saveRolePermission", method = RequestMethod.POST) + //@RequiresRoles({ "admin" }) + public Result saveRolePermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String roleId = json.getString("roleId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysRolePermissionService.saveRolePermission(roleId, permissionIds, lastPermissionIds); + result.success("保存成功!"); + log.info("======角色授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } + + private void getTreeList(List treeList, List metaList, SysPermissionTree temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + SysPermissionTree tree = new SysPermissionTree(permission); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getId())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeList(treeList, metaList, tree); + } + } + + } + } + + private void getTreeModelList(List treeList, List metaList, TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission); + if (temp == null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } else if (temp != null && tempPid != null && tempPid.equals(temp.getKey())) { + temp.getChildren().add(tree); + if (!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } + + /** + * 获取权限JSON数组 + * @param jsonArray + * @param allList + */ + private void getAllAuthJsonArray(JSONArray jsonArray,List allList) { + JSONObject json = null; + for (SysPermission permission : allList) { + json = new JSONObject(); + json.put("action", permission.getPerms()); + json.put("status", permission.getStatus()); + //1显示2禁用 + json.put("type", permission.getPermsType()); + json.put("describe", permission.getName()); + jsonArray.add(json); + } + } + + /** + * 获取权限JSON数组 + * @param jsonArray + * @param metaList + */ + private void getAuthJsonArray(JSONArray jsonArray,List metaList) { + for (SysPermission permission : metaList) { + if(permission.getMenuType()==null) { + continue; + } + JSONObject json = null; + if(permission.getMenuType().equals(CommonConstant.MENU_TYPE_2) &&CommonConstant.STATUS_1.equals(permission.getStatus())) { + json = new JSONObject(); + json.put("action", permission.getPerms()); + json.put("type", permission.getPermsType()); + json.put("describe", permission.getName()); + jsonArray.add(json); + } + } + } + /** + * 获取菜单JSON数组 + * @param jsonArray + * @param metaList + * @param parentJson + */ + private void getPermissionJsonArray(JSONArray jsonArray, List metaList, JSONObject parentJson) { + for (SysPermission permission : metaList) { + if (permission.getMenuType() == null) { + continue; + } + String tempPid = permission.getParentId(); + JSONObject json = getPermissionJsonObject(permission); + if(json==null) { + continue; + } + if (parentJson == null && oConvertUtils.isEmpty(tempPid)) { + jsonArray.add(json); + if (!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } else if (parentJson != null && oConvertUtils.isNotEmpty(tempPid) && tempPid.equals(parentJson.getString("id"))) { + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { + JSONObject metaJson = parentJson.getJSONObject("meta"); + if (metaJson.containsKey("permissionList")) { + metaJson.getJSONArray("permissionList").add(json); + } else { + JSONArray permissionList = new JSONArray(); + permissionList.add(json); + metaJson.put("permissionList", permissionList); + } + // 类型( 0:一级菜单 1:子菜单 2:按钮 ) + } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_1) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_0)) { + if (parentJson.containsKey("children")) { + parentJson.getJSONArray("children").add(json); + } else { + JSONArray children = new JSONArray(); + children.add(json); + parentJson.put("children", children); + } + + if (!permission.isLeaf()) { + getPermissionJsonArray(jsonArray, metaList, json); + } + } + } + + } + } + + /** + * 根据菜单配置生成路由json + * @param permission + * @return + */ + private JSONObject getPermissionJsonObject(SysPermission permission) { + JSONObject json = new JSONObject(); + // 类型(0:一级菜单 1:子菜单 2:按钮) + if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_2)) { + //json.put("action", permission.getPerms()); + //json.put("type", permission.getPermsType()); + //json.put("describe", permission.getName()); + return null; + } else if (permission.getMenuType().equals(CommonConstant.MENU_TYPE_0) || permission.getMenuType().equals(CommonConstant.MENU_TYPE_1)) { + json.put("id", permission.getId()); + if (permission.isRoute()) { + json.put("route", "1");// 表示生成路由 + } else { + json.put("route", "0");// 表示不生成路由 + } + + if (isWWWHttpUrl(permission.getUrl())) { + json.put("path", MD5Util.MD5Encode(permission.getUrl(), "utf-8")); + } else { + json.put("path", permission.getUrl()); + } + + // 重要规则:路由name (通过URL生成路由name,路由name供前端开发,页面跳转使用) + if (oConvertUtils.isNotEmpty(permission.getComponentName())) { + json.put("name", permission.getComponentName()); + } else { + json.put("name", urlToRouteName(permission.getUrl())); + } + + // 是否隐藏路由,默认都是显示的 + if (permission.isHidden()) { + json.put("hidden", true); + } + // 聚合路由 + if (permission.isAlwaysShow()) { + json.put("alwaysShow", true); + } + json.put("component", permission.getComponent()); + JSONObject meta = new JSONObject(); + // 由用户设置是否缓存页面 用布尔值 + if (permission.isKeepAlive()) { + meta.put("keepAlive", true); + } else { + meta.put("keepAlive", false); + } + + /*update_begin author:wuxianquan date:20190908 for:往菜单信息里添加外链菜单打开方式 */ + //外链菜单打开方式 + if (permission.isInternalOrExternal()) { + meta.put("internalOrExternal", true); + } else { + meta.put("internalOrExternal", false); + } + /* update_end author:wuxianquan date:20190908 for: 往菜单信息里添加外链菜单打开方式*/ + + meta.put("title", permission.getName()); + + //update-begin--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + String component = permission.getComponent(); + if(oConvertUtils.isNotEmpty(permission.getComponentName()) || oConvertUtils.isNotEmpty(component)){ + meta.put("componentName", oConvertUtils.getString(permission.getComponentName(),component.substring(component.lastIndexOf("/")+1))); + } + //update-end--Author:scott Date:20201015 for:路由缓存问题,关闭了tab页时再打开就不刷新 #842 + + if (oConvertUtils.isEmpty(permission.getParentId())) { + // 一级菜单跳转地址 + json.put("redirect", permission.getRedirect()); + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } else { + if (oConvertUtils.isNotEmpty(permission.getIcon())) { + meta.put("icon", permission.getIcon()); + } + } + if (isWWWHttpUrl(permission.getUrl())) { + meta.put("url", permission.getUrl()); + } + json.put("meta", meta); + } + + return json; + } + + /** + * 判断是否外网URL 例如: http://localhost:8080/jero-boot/swagger-ui.html#/ 支持特殊格式: {{ + * window._CONFIG['domianURL'] }}/druid/ {{ JS代码片段 }},前台解析会自动执行JS代码片段 + * + * @return + */ + private boolean isWWWHttpUrl(String url) { + if (url != null && (url.startsWith("http://") || url.startsWith("https://") || url.startsWith("{{"))) { + return true; + } + return false; + } + + /** + * 通过URL生成路由name(去掉URL前缀斜杠,替换内容中的斜杠‘/’为-) 举例: URL = /isystem/role RouteName = + * isystem-role + * + * @return + */ + private String urlToRouteName(String url) { + if (oConvertUtils.isNotEmpty(url)) { + if (url.startsWith("/")) { + url = url.substring(1); + } + url = url.replace("/", "-"); + + // 特殊标记 + url = url.replace(":", "@"); + return url; + } else { + return null; + } + } + + /** + * 根据菜单id来获取其对应的权限数据 + * + * @param sysPermissionDataRule + * @return + */ + @RequestMapping(value = "/getPermRuleListByPermId", method = RequestMethod.GET) + public Result> getPermRuleListByPermId(SysPermissionDataRule sysPermissionDataRule) { + List permRuleList = sysPermissionDataRuleService.getPermRuleListByPermId(sysPermissionDataRule.getPermissionId()); + Result> result = new Result<>(); + result.setSuccess(true); + result.setResult(permRuleList); + return result; + } + + /** + * 添加菜单权限数据 + * + * @param sysPermissionDataRule + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/addPermissionRule", method = RequestMethod.POST) + public Result addPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + Result result = new Result(); + try { + sysPermissionDataRule.setCreateTime(new Date()); + sysPermissionDataRuleService.savePermissionDataRule(sysPermissionDataRule); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/editPermissionRule", method = { RequestMethod.PUT, RequestMethod.POST }) + public Result editPermissionRule(@RequestBody SysPermissionDataRule sysPermissionDataRule) { + Result result = new Result(); + try { + sysPermissionDataRuleService.saveOrUpdate(sysPermissionDataRule); + result.success("更新成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 删除菜单权限数据 + * + * @param id + * @return + */ + //@RequiresRoles({ "admin" }) + @RequestMapping(value = "/deletePermissionRule", method = RequestMethod.DELETE) + public Result deletePermissionRule(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + try { + sysPermissionDataRuleService.deletePermissionDataRule(id); + result.success("删除成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 查询菜单权限数据 + * + * @param sysPermissionDataRule + * @return + */ + @RequestMapping(value = "/queryPermissionRule", method = RequestMethod.GET) + public Result> queryPermissionRule(SysPermissionDataRule sysPermissionDataRule) { + Result> result = new Result<>(); + try { + List permRuleList = sysPermissionDataRuleService.queryPermissionRule(sysPermissionDataRule); + result.setResult(permRuleList); + result.success("查询成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 部门权限表 + * @param departId + * @return + */ + @RequestMapping(value = "/queryDepartPermission", method = RequestMethod.GET) + public Result> queryDepartPermission(@RequestParam(name = "departId", required = true) String departId) { + Result> result = new Result<>(); + try { + List list = sysDepartPermissionService.list(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId)); + result.setResult(list.stream().map(SysDepartPermission -> String.valueOf(SysDepartPermission.getPermissionId())).collect(Collectors.toList())); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 保存部门授权 + * + * @return + */ + @RequestMapping(value = "/saveDepartPermission", method = RequestMethod.POST) + //@RequiresRoles({ "admin" }) + public Result saveDepartPermission(@RequestBody JSONObject json) { + long start = System.currentTimeMillis(); + Result result = new Result<>(); + try { + String departId = json.getString("departId"); + String permissionIds = json.getString("permissionIds"); + String lastPermissionIds = json.getString("lastpermissionIds"); + this.sysDepartPermissionService.saveDepartPermission(departId, permissionIds, lastPermissionIds); + result.success("保存成功!"); + log.info("======部门授权成功=====耗时:" + (System.currentTimeMillis() - start) + "毫秒"); + } catch (Exception e) { + result.error500("授权失败!"); + log.error(e.getMessage(), e); + } + return result; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java new file mode 100644 index 00000000..0615d8ac --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysRoleController.java @@ -0,0 +1,425 @@ +package com.jero.modules.system.controller; + + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import com.jero.modules.system.entity.*; +import com.jero.modules.system.service.*; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.PmsUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.model.TreeModel; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.jero.common.system.vo.LoginUser; +import org.apache.shiro.SecurityUtils; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + +/** + *

+ * 角色表 前端控制器 + *

+ * + * @Author scott + * @since 2018-12-19 + */ +@RestController +@RequestMapping("/sys/role") +@Slf4j +public class SysRoleController { + @Autowired + private ISysRoleService sysRoleService; + + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + + @Autowired + private ISysRolePermissionService sysRolePermissionService; + + @Autowired + private ISysPermissionService sysPermissionService; + + @Autowired + private ISysUserService sysUserService; + + /** + * 分页列表查询 + * @param role + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequiresPermissions("sys:role:list") + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysRole role, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(role, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysRoleService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param role + * @return + */ + @RequiresPermissions("sys:role:add") + @RequestMapping(value = "/add", method = RequestMethod.POST) + //@RequiresRoles({"admin"}) + public Result add(@RequestBody SysRole role) { + Result result = new Result(); + try { + role.setCreateTime(new Date()); + sysRoleService.save(role); + result.success("添加成功!"); + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param role + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:role:edit") + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result edit(@RequestBody SysRole role) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(role.getId()); + if(sysrole==null) { + result.error500("未找到对应实体"); + }else { + role.setUpdateTime(new Date()); + boolean ok = sysRoleService.updateById(role); + //TODO 返回false说明什么? + if(ok) { + result.success("修改成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:role:del") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + IPage pageInfo = sysUserService.getUserByRoleId(new Page<>(), id, null); + long total = pageInfo.getTotal(); + if (total == 0) { + sysRoleService.deleteRole(id); + return Result.OK("删除角色成功"); + } else { + return Result.error("删除角色失败,该角色下存在未删除用户"); + } + } + + /** + * 批量删除 + * @param ids + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:role:del") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(oConvertUtils.isEmpty(ids)) { + result.error500("未选中角色!"); + }else { + sysRoleService.deleteBatchRole(ids.split(",")); + result.success("删除角色成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @RequiresPermissions("sys:role:list") + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysRole sysrole = sysRoleService.getById(id); + if(sysrole==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysrole); + result.setSuccess(true); + } + return result; + } + @RequiresPermissions("sys:role:list") + @RequestMapping(value = "/queryall", method = RequestMethod.GET) + public Result> queryall() { + Result> result = new Result<>(); + List list = sysRoleService.list(); + if(list==null||list.size()<=0) { + result.error500("未找到角色信息"); + }else { + result.setResult(list); + result.setSuccess(true); + } + return result; + } + + /** + * 校验角色编码唯一 + */ + @RequiresPermissions("sys:role:list") + @RequestMapping(value = "/checkRoleCode", method = RequestMethod.GET) + public Result checkUsername(String id,String roleCode) { + Result result = new Result<>(); + result.setResult(true);//如果此参数为false则程序发生异常 + log.info("--验证角色编码是否唯一---id:"+id+"--roleCode:"+roleCode); + try { + SysRole role = null; + if(oConvertUtils.isNotEmpty(id)) { + role = sysRoleService.getById(id); + } + SysRole newRole = sysRoleService.getOne(new QueryWrapper().lambda().eq(SysRole::getRoleCode, roleCode)); + if(newRole!=null) { + //如果根据传入的roleCode查询到信息了,那么就需要做校验了。 + if(role==null) { + //role为空=>新增模式=>只要roleCode存在则返回false + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + }else if(!id.equals(newRole.getId())) { + //否则=>编辑模式=>判断两者ID是否一致- + result.setSuccess(false); + result.setMessage("角色编码已存在"); + return result; + } + } + } catch (Exception e) { + result.setSuccess(false); + result.setResult(false); + result.setMessage(e.getMessage()); + return result; + } + result.setSuccess(true); + return result; + } + + /** + * 导出excel + * @param request + */ + @RequiresPermissions("sys:role:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysRole sysRole,HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysRole, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysRoleService.list(queryWrapper); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME,"角色列表"); + mv.addObject(NormalExcelConstants.CLASS,SysRole.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS,new ExportParams("角色列表数据","导出人:"+user.getRealname(),"导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST,pageList); + return mv; + } + + /** + * 通过excel导入数据 + * @param request + * @param response + * @return + */ + @RequiresPermissions("sys:role:import") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + return sysRoleService.importExcelCheckRoleCode(file, params); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:" + e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + return Result.error("文件导入失败!"); + } + + /** + * 查询数据规则数据 + */ + @RequiresPermissions("sys:role:list") + @GetMapping(value = "/datarule/{permissionId}/{roleId}") + public Result loadDatarule(@PathVariable("permissionId") String permissionId,@PathVariable("roleId") String roleId) { + List list = sysPermissionDataRuleService.getPermRuleListByPermId(permissionId); + if(list==null || list.size()==0) { + return Result.error("未找到权限配置信息"); + }else { + Map map = new HashMap<>(); + map.put("datarule", list); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysRolePermission::getPermissionId, permissionId) + .isNotNull(SysRolePermission::getDataRuleIds) + .eq(SysRolePermission::getRoleId,roleId); + SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); + if(sysRolePermission==null) { + //return Result.error("未找到角色菜单配置信息"); + }else { + String drChecked = sysRolePermission.getDataRuleIds(); + if(oConvertUtils.isNotEmpty(drChecked)) { + map.put("drChecked", drChecked.endsWith(",")?drChecked.substring(0, drChecked.length()-1):drChecked); + } + } + return Result.OK(map); + //TODO 以后按钮权限的查询也走这个请求 无非在map中多加两个key + } + } + + /** + * 保存数据规则至角色菜单关联表 + */ + @RequiresPermissions("sys:role:list") + @PostMapping(value = "/datarule") + public Result saveDatarule(@RequestBody JSONObject jsonObject) { + try { + String permissionId = jsonObject.getString("permissionId"); + String roleId = jsonObject.getString("roleId"); + String dataRuleIds = jsonObject.getString("dataRuleIds"); + log.info("保存数据规则>>"+"菜单ID:"+permissionId+"角色ID:"+ roleId+"数据权限ID:"+dataRuleIds); + LambdaQueryWrapper query = new LambdaQueryWrapper() + .eq(SysRolePermission::getPermissionId, permissionId) + .eq(SysRolePermission::getRoleId,roleId); + SysRolePermission sysRolePermission = sysRolePermissionService.getOne(query); + if(sysRolePermission==null) { + return Result.error("请先保存角色菜单权限!"); + }else { + sysRolePermission.setDataRuleIds(dataRuleIds); + this.sysRolePermissionService.updateById(sysRolePermission); + } + } catch (Exception e) { + log.error("SysRoleController.saveDatarule()发生异常:" + e.getMessage(),e); + return Result.error("保存失败"); + } + return Result.OK("保存成功!"); + } + + + /** + * 用户角色授权功能,查询菜单权限树 + * @param request + * @return + */ + @RequiresPermissions("sys:role:list") + @RequestMapping(value = "/queryTreeList", method = RequestMethod.GET) + public Result> queryTreeList(HttpServletRequest request) { + Result> result = new Result<>(); + //全部权限ids + List ids = new ArrayList<>(); + try { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, CommonConstant.DEL_FLAG_0); + query.orderByAsc(SysPermission::getSortNo); + List list = sysPermissionService.list(query); + for(SysPermission sysPer : list) { + ids.add(sysPer.getId()); + } + List treeList = new ArrayList<>(); + getTreeModelList(treeList, list, null); + Map resMap = new HashMap(); + resMap.put("treeList", treeList); //全部树节点数据 + resMap.put("ids", ids);//全部树ids + result.setResult(resMap); + result.setSuccess(true); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + @RequiresPermissions("sys:role:list") + private void getTreeModelList(List treeList,List metaList,TreeModel temp) { + for (SysPermission permission : metaList) { + String tempPid = permission.getParentId(); + TreeModel tree = new TreeModel(permission.getId(), tempPid, permission.getName(),permission.getRuleFlag(), permission.isLeaf()); + if(temp==null && oConvertUtils.isEmpty(tempPid)) { + treeList.add(tree); + if(!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + }else if(temp!=null && tempPid!=null && tempPid.equals(temp.getKey())){ + temp.getChildren().add(tree); + if(!tree.getIsLeaf()) { + getTreeModelList(treeList, metaList, tree); + } + } + + } + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java new file mode 100644 index 00000000..6b061de7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserAgentController.java @@ -0,0 +1,264 @@ +package com.jero.modules.system.controller; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysUserAgent; +import com.jero.modules.system.service.ISysUserAgentService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import lombok.extern.slf4j.Slf4j; + + /** + * @Title: Controller + * @Description: 用户代理人设置 + * @Author: jero-boot + * @Date: 2019-04-17 + * @Version: V1.0 + */ +@RestController +@RequestMapping("/sys/sysUserAgent") +@Slf4j +public class SysUserAgentController { + @Autowired + private ISysUserAgentService sysUserAgentService; + + @Value("${jero.path.upload}") + private String upLoadPath; + + /** + * 分页列表查询 + * @param sysUserAgent + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/page") + public Result> queryPageList(SysUserAgent sysUserAgent, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysUserAgentService.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param sysUserAgent + * @return + */ + @PostMapping(value = "/add") + public Result add(@RequestBody SysUserAgent sysUserAgent) { + Result result = new Result(); + try { + sysUserAgentService.save(sysUserAgent); + result.success("代理人设置成功!"); + } catch (Exception e) { + log.error(e.getMessage(),e); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param sysUserAgent + * @return + */ + @PutMapping(value = "/edit") + public Result edit(@RequestBody SysUserAgent sysUserAgent) { + Result result = new Result(); + SysUserAgent sysUserAgentEntity = sysUserAgentService.getById(sysUserAgent.getId()); + if(sysUserAgentEntity==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysUserAgentService.updateById(sysUserAgent); + //TODO 返回false说明什么? + if(ok) { + result.success("代理人设置成功!"); + } + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysUserAgent sysUserAgent = sysUserAgentService.getById(id); + if(sysUserAgent==null) { + result.error500("未找到对应实体"); + }else { + boolean ok = sysUserAgentService.removeById(id); + if(ok) { + result.success("删除成功!"); + } + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result result = new Result(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.sysUserAgentService.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + Result result = new Result(); + SysUserAgent sysUserAgent = sysUserAgentService.getById(id); + if(sysUserAgent==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysUserAgent); + result.setSuccess(true); + } + return result; + } + + /** + * 通过userName查询 + * @param userName + * @return + */ + @GetMapping(value = "/queryByUserName") + public Result queryByUserName(@RequestParam(name="userName",required=true) String userName) { + Result result = new Result(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysUserAgent::getUserName, userName); + SysUserAgent sysUserAgent = sysUserAgentService.getOne(queryWrapper); + if(sysUserAgent==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(sysUserAgent); + result.setSuccess(true); + } + return result; + } + + /** + * 导出excel + * + * @param sysUserAgent + * @param request + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysUserAgent sysUserAgent,HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUserAgent, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List pageList = sysUserAgentService.list(queryWrapper); + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "用户代理人设置列表"); + mv.addObject(NormalExcelConstants.CLASS, SysUserAgent.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + ExportParams exportParams = new ExportParams("用户代理人设置列表数据", "导出人:"+user.getRealname(), "导出信息"); + exportParams.setImageBasePath(upLoadPath); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysUserAgents = ExcelImportUtil.importExcel(file.getInputStream(), SysUserAgent.class, params); + for (SysUserAgent sysUserAgentExcel : listSysUserAgents) { + sysUserAgentService.save(sysUserAgentExcel); + } + return Result.OK("文件导入成功!数据行数:" + listSysUserAgents.size()); + } catch (Exception e) { + log.error(e.getMessage(),e); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java new file mode 100644 index 00000000..e261ea25 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysUserController.java @@ -0,0 +1,1375 @@ +package com.jero.modules.system.controller; + + +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.exception.JeroBootException; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.apache.shiro.authz.annotation.RequiresRoles; +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.PermissionData; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.*; +import com.jero.modules.system.entity.*; +import com.jero.modules.system.model.DepartIdModel; +import com.jero.modules.system.model.SysUserSysDepartModel; +import com.jero.modules.system.service.*; +import com.jero.modules.system.vo.SysDepartUsersVO; +import com.jero.modules.system.vo.SysUserRoleVO; +import org.apache.shiro.subject.Subject; +import org.checkerframework.framework.qual.RequiresQualifier; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.ConstraintViolation; +import javax.validation.Validator; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 用户表 前端控制器 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +@Slf4j +@RestController +@RequestMapping("/sys/user") +public class SysUserController { + @Autowired + private ISysBaseAPI sysBaseAPI; + + @Autowired + private ISysUserService sysUserService; + + @Autowired + private ISysDepartService sysDepartService; + + @Autowired + private ISysUserRoleService sysUserRoleService; + + @Autowired + private ISysUserDepartService sysUserDepartService; + + @Autowired + private ISysUserRoleService userRoleService; + + @Autowired + private ISysDepartRoleUserService departRoleUserService; + + @Autowired + private ISysDepartRoleService departRoleService; + + @Autowired + private RedisUtil redisUtil; + + @Value("${jero.path.upload}") + private String upLoadPath; + + @Resource + private BaseCommonService baseCommonService; + + /** + * 获取用户列表数据 + * @param user + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @RequiresPermissions("sys:user:list") + @PermissionData(pageComponent = "system/UserList") + @RequestMapping(value = "/page", method = RequestMethod.GET) + public Result> queryPageList(SysUser user,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap()); + //TODO 外部模拟登陆临时账号,列表不显示 + queryWrapper.ne("username","_reserve_user_external"); + Page page = new Page(pageNo, pageSize); + IPage pageList = sysUserService.page(page, queryWrapper); + List userList = new ArrayList<>(); + for (SysUser record : pageList.getRecords()) { + record.setEmail(PasswordUtil.decrypt(record.getEmail())); + record.setPhone(PasswordUtil.decrypt(record.getPhone())); + userList.add(record); + } + pageList.setRecords(userList); + //批量查询用户的所属部门 + //step.1 先拿到全部的 useids + //step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); + if(userIds!=null && userIds.size()>0){ + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + pageList.getRecords().forEach(item->{ + item.setOrgCodeTxt(useDepNames.get(item.getId())); + }); + } + result.setSuccess(true); + result.setResult(pageList); + log.info(pageList.toString()); + return result; + } + + //@RequiresRoles({"admin"}) + @RequiresPermissions("user:add") + @RequestMapping(value = "/add", method = RequestMethod.POST) + public Result add(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String selectedRoles = jsonObject.getString("selectedroles"); + String selectedDeparts = jsonObject.getString("selecteddeparts"); + String confirmPassword = jsonObject.getString("confirmpassword"); + String rsaPublicKey = jsonObject.getString("rsaPublicKey"); + String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey)); + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + String email; + String phone; + try { + //1:先用私钥解密数据 + email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); + phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); + } catch (Exception e) { + throw new JeroBootException("解密失败!", e); + } + //2:把解密的数据进行校验 + user.setEmail(email); + user.setPhone(phone); + ValidUtil.validate(user); + //3:把数据加密在放回来 + user.setEmail(PasswordUtil.encrypt(email)); + user.setPhone(PasswordUtil.encrypt(phone)); + if (!confirmPassword.equals(user.getPassword())) { + throw new JeroBootException("两次密码输入不一致"); + } + String password; + try { + password = CommonUtils.decryptBtRsaPriKey(user.getPassword(), rsaPrivateKey); + } catch (Exception e) { + throw new JeroBootException("解密失败!", e); + } + //设置创建时间 + user.setCreateTime(new Date()); + String salt = oConvertUtils.randomGen(8); + user.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); + user.setPassword(passwordEncode); + user.setStatus(1); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + sysUserService.addUserWithRole(user, selectedRoles); + sysUserService.addUserWithDepart(user, selectedDeparts); + result.success("添加成功!"); + + return result; + } + + //@RequiresRoles({"admin"}) + @RequiresPermissions("user:edit") + @RequestMapping(value = "/edit", method = RequestMethod.PUT) + public Result edit(@RequestBody JSONObject jsonObject) { + String rsaPublicKey = jsonObject.getString("rsaPublicKey"); + String rsaPrivateKey = String.valueOf(redisUtil.get(rsaPublicKey)); + Result result = new Result(); + SysUser sysUser = sysUserService.getById(jsonObject.getString("id")); + baseCommonService.addLog("编辑用户,id: " + jsonObject.getString("id"), CommonConstant.LOG_TYPE_2, 2); + if (sysUser == null) { + result.error500("未找到对应实体"); + } else { + SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class); + String email; + String phone; + try { + //1:先用私钥解密数据 + email = CommonUtils.decryptBtRsaPriKey(user.getEmail(), rsaPrivateKey); + phone = CommonUtils.decryptBtRsaPriKey(user.getPhone(), rsaPrivateKey); + } catch (Exception e) { + throw new JeroBootException("解密失败!",e); + } + //2:把解密的数据进行校验 + user.setEmail(email); + user.setPhone(phone); + ValidUtil.validate(user); + //3:把数据加密在放回来 + user.setEmail(PasswordUtil.encrypt(email)); + user.setPhone(PasswordUtil.encrypt(phone)); + + user.setUpdateTime(new Date()); + //String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt()); + user.setPassword(sysUser.getPassword()); + String roles = jsonObject.getString("selectedroles"); + String departs = jsonObject.getString("selecteddeparts"); + sysUserService.editUserWithRole(user, roles); + sysUserService.editUserWithDepart(user, departs); + sysUserService.updateNullPhoneEmail(); + result.success("修改成功!"); + } + return result; + } + + /** + * 删除用户 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public Result delete(@RequestParam(name="id",required=true) String id) { + baseCommonService.addLog("删除用户,id: " +id ,CommonConstant.LOG_TYPE_2, 3); + this.sysUserService.deleteUser(id); + return Result.OK("删除用户成功"); + } + + /** + * 批量删除用户 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteBatch", method = RequestMethod.DELETE) + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + baseCommonService.addLog("批量删除用户, ids: " +ids ,CommonConstant.LOG_TYPE_2, 3); + this.sysUserService.deleteBatchUsers(ids); + return Result.OK("批量删除用户成功"); + } + + /** + * 冻结&解冻用户 + * @param jsonObject + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/frozenBatch", method = RequestMethod.PUT) + public Result frozenBatch(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + try { + String ids = jsonObject.getString("ids"); + String status = jsonObject.getString("status"); + String[] arr = ids.split(","); + for (String id : arr) { + if(oConvertUtils.isNotEmpty(id)) { + this.sysUserService.update(new SysUser().setStatus(Integer.parseInt(status)), + new UpdateWrapper().lambda().eq(SysUser::getId,id)); + } + } + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败"+e.getMessage()); + } + result.success("操作成功!"); + return result; + + } + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/queryById", method = RequestMethod.GET) + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Result result = new Result(); + SysUser sysUser = sysUserService.getById(id); + if (sysUser == null) { + result.error500("未找到对应实体"); + } else { + result.setResult(sysUser); + result.setSuccess(true); + } + return result; + } + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/queryUserRole", method = RequestMethod.GET) + public Result> queryUserRole(@RequestParam(name = "userid", required = true) String userid) { + Result> result = new Result<>(); + List list = new ArrayList(); + List userRole = sysUserRoleService.list(new QueryWrapper().lambda().eq(SysUserRole::getUserId, userid)); + if (userRole == null || userRole.size() <= 0) { + result.error500("未找到用户相关角色信息"); + } else { + for (SysUserRole sysUserRole : userRole) { + list.add(sysUserRole.getRoleId()); + } + result.setSuccess(true); + result.setResult(list); + } + return result; + } + + + /** + * 校验用户账号是否唯一
+ * 可以校验其他 需要检验什么就传什么。。。 + * + * @param sysUser + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/checkOnlyUser", method = RequestMethod.GET) + public Result checkOnlyUser(SysUser sysUser) { + Result result = new Result<>(); + //如果此参数为false则程序发生异常 + result.setResult(true); + try { + //通过传入信息查询新的用户信息 + SysUser user = sysUserService.getOne(new QueryWrapper(sysUser)); + if (user != null) { + result.setSuccess(false); + result.setMessage("用户账号已存在"); + return result; + } + + } catch (Exception e) { + result.setSuccess(false); + result.setMessage(e.getMessage()); + return result; + } + result.setSuccess(true); + return result; + } + + /** + * 修改密码 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("user:edit") + @RequestMapping(value = "/changePassword", method = RequestMethod.PUT) + public Result changePassword(@RequestBody SysUser sysUser) { + SysUser u = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, sysUser.getUsername())); + if (u == null) { + return Result.error("用户不存在!"); + } + sysUser.setId(u.getId()); + return sysUserService.changePassword(sysUser); + } + + /** + * 查询指定用户和部门关联的数据 + * + * @param userId + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/userDepartList", method = RequestMethod.GET) + public Result> getUserDepartsList(@RequestParam(name = "userId", required = true) String userId) { + Result> result = new Result<>(); + try { + List depIdModelList = this.sysUserDepartService.queryDepartIdsOfUser(userId); + if (depIdModelList != null && depIdModelList.size() > 0) { + result.setSuccess(true); + result.setMessage("查找成功"); + result.setResult(depIdModelList); + } else { + result.setSuccess(false); + result.setMessage("查找失败"); + } + return result; + } catch (Exception e) { + log.error(e.getMessage(), e); + result.setSuccess(false); + result.setMessage("查找过程中出现了异常: " + e.getMessage()); + return result; + } + + } + + /** + * 生成在添加用户情况下没有主键的问题,返回给前端,根据该id绑定部门数据 + * + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/generateUserId", method = RequestMethod.GET) + public Result generateUserId() { + Result result = new Result<>(); + System.out.println("我执行了,生成用户ID=============================="); + String userId = UUID.randomUUID().toString().replace("-", ""); + result.setSuccess(true); + result.setResult(userId); + return result; + } + + /** + * 根据部门id查询用户信息 + * + * @param id + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/queryUserByDepId", method = RequestMethod.GET) + public Result> queryUserByDepId(@RequestParam(name = "id", required = true) String id,@RequestParam(name="realname",required=false) String realname) { + Result> result = new Result<>(); + //List userList = sysUserDepartService.queryUserByDepId(id); + SysDepart sysDepart = sysDepartService.getById(id); + List userList = sysUserDepartService.queryUserByDepCode(sysDepart.getOrgCode(),realname); + + //批量查询用户的所属部门 + //step.1 先拿到全部的 useids + //step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = userList.stream().map(SysUser::getId).collect(Collectors.toList()); + if(userIds!=null && userIds.size()>0){ + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + userList.forEach(item->{ + //TODO 临时借用这个字段用于页面展示 + item.setOrgCodeTxt(useDepNames.get(item.getId())); + }); + } + + try { + result.setSuccess(true); + result.setResult(userList); + return result; + } catch (Exception e) { + log.error(e.getMessage(), e); + result.setSuccess(false); + return result; + } + } + + /** + * 导出excel + * + * @param request + * @param sysUser + */ + @RequiresPermissions("sys:user:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(SysUser sysUser,HttpServletRequest request) { + // Step.1 组装查询条件 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysUser, request.getParameterMap()); + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + //update-begin--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据-------------------- + String selections = request.getParameter("selections"); + if(!oConvertUtils.isEmpty(selections)){ + queryWrapper.in("id",selections.split(",")); + } + //update-end--Author:kangxiaolin Date:20180825 for:[03]用户导出,如果选择数据则只导出相关数据---------------------- + List pageList = sysUserService.list(queryWrapper); + + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "用户列表"); + mv.addObject(NormalExcelConstants.CLASS, SysUser.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + ExportParams exportParams = new ExportParams("用户列表数据", "导出人:"+user.getRealname(), "导出信息"); + exportParams.setImageBasePath(upLoadPath); + mv.addObject(NormalExcelConstants.PARAMS, exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:import") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response)throws IOException { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + // 错误信息 + List errorMessage = new ArrayList<>(); + int successLines = 0, errorLines = 0; + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysUsers = ExcelImportUtil.importExcel(file.getInputStream(), SysUser.class, params); + for (int i = 0; i < listSysUsers.size(); i++) { + SysUser sysUserExcel = listSysUsers.get(i); + if (StringUtils.isBlank(sysUserExcel.getPassword())) { + // 密码默认为 “123456” + sysUserExcel.setPassword("123456"); + } + // 密码加密加盐 + String salt = oConvertUtils.randomGen(8); + sysUserExcel.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(sysUserExcel.getUsername(), sysUserExcel.getPassword(), salt); + sysUserExcel.setPassword(passwordEncode); + try { + sysUserService.save(sysUserExcel); + successLines++; + } catch (Exception e) { + errorLines++; + String message = e.getMessage().toLowerCase(); + int lineNumber = i + 1; + // 通过索引名判断出错信息 + if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_USERNAME)) { + errorMessage.add("第 " + lineNumber + " 行:用户名已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_WORK_NO)) { + errorMessage.add("第 " + lineNumber + " 行:工号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_PHONE)) { + errorMessage.add("第 " + lineNumber + " 行:手机号已经存在,忽略导入。"); + } else if (message.contains(CommonConstant.SQL_INDEX_UNIQ_SYS_USER_EMAIL)) { + errorMessage.add("第 " + lineNumber + " 行:电子邮件已经存在,忽略导入。"); + } else { + errorMessage.add("第 " + lineNumber + " 行:未知错误,忽略导入"); + log.error(e.getMessage(), e); + } + } + // 批量将部门和用户信息建立关联关系 + String departIds = sysUserExcel.getDepartIds(); + if (StringUtils.isNotBlank(departIds)) { + String userId = sysUserExcel.getId(); + String[] departIdArray = departIds.split(","); + List userDepartList = new ArrayList<>(departIdArray.length); + for (String departId : departIdArray) { + userDepartList.add(new SysUserDepart(userId, departId)); + } + sysUserDepartService.saveBatch(userDepartList); + } + + } + } catch (Exception e) { + errorMessage.add("发生异常:" + e.getMessage()); + log.error(e.getMessage(), e); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + } + return ImportExcelUtil.imporReturnRes(errorLines,successLines,errorMessage); + } + + /** + * @功能:根据id 批量查询 + * @param userIds + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/queryByIds", method = RequestMethod.GET) + public Result> queryByIds(@RequestParam String userIds) { + Result> result = new Result<>(); + String[] userId = userIds.split(","); + Collection idList = Arrays.asList(userId); + Collection userRole = sysUserService.listByIds(idList); + result.setSuccess(true); + result.setResult(userRole); + return result; + } + + /** + * 首页用户修改密码 + */ + //@RequiresRoles({"admin"}) + @RequestMapping(value = "/updatePassword", method = RequestMethod.PUT) + public Result changPassword(@RequestBody JSONObject json) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = json.getString("username"); + String oldPassword = json.getString("oldpassword"); + String password = json.getString("password"); + String confirmPassword = json.getString("confirmpassword"); + SysUser user = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername, username)); + if(user==null) { + return Result.error("用户不存在!"); + } + return sysUserService.resetPassword(username,oldPassword,password,confirmPassword); + } + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/userRoleList", method = RequestMethod.GET) + public Result> userRoleList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + Page page = new Page(pageNo, pageSize); + String roleId = req.getParameter("roleId"); + String username = req.getParameter("username"); + IPage pageList = sysUserService.getUserByRoleId(page,roleId,username); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 给指定角色添加用户 + * + * @param + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("user:add") + @RequestMapping(value = "/addSysUserRole", method = RequestMethod.POST) + public Result addSysUserRole(@RequestBody SysUserRoleVO sysUserRoleVO) { + Result result = new Result(); + try { + String sysRoleId = sysUserRoleVO.getRoleId(); + for(String sysUserId:sysUserRoleVO.getUserIdList()) { + SysUserRole sysUserRole = new SysUserRole(sysUserId,sysRoleId); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("role_id", sysRoleId).eq("user_id",sysUserId); + SysUserRole one = sysUserRoleService.getOne(queryWrapper); + if(one==null){ + sysUserRoleService.save(sysUserRole); + } + + } + result.setMessage("添加成功!"); + result.setSuccess(true); + return result; + }catch(Exception e) { + log.error(e.getMessage(), e); + result.setSuccess(false); + result.setMessage("出错了: " + e.getMessage()); + return result; + } + } + /** + * 删除指定角色的用户关系 + * @param + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteUserRole", method = RequestMethod.DELETE) + public Result deleteUserRole(@RequestParam(name="roleId") String roleId, + @RequestParam(name="userId",required=true) String userId + ) { + Result result = new Result(); + try { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("role_id", roleId).eq("user_id",userId); + sysUserRoleService.remove(queryWrapper); + result.success("删除成功!"); + }catch(Exception e) { + log.error(e.getMessage(), e); + result.error500("删除失败!"); + } + return result; + } + + /** + * 批量删除指定角色的用户关系 + * + * @param + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteUserRoleBatch", method = RequestMethod.DELETE) + public Result deleteUserRoleBatch( + @RequestParam(name="roleId") String roleId, + @RequestParam(name="userIds",required=true) String userIds) { + Result result = new Result(); + try { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("role_id", roleId).in("user_id",Arrays.asList(userIds.split(","))); + sysUserRoleService.remove(queryWrapper); + result.success("删除成功!"); + }catch(Exception e) { + log.error(e.getMessage(), e); + result.error500("删除失败!"); + } + return result; + } + + /** + * 部门用户列表 + */ + @RequestMapping(value = "/departUserList", method = RequestMethod.GET) + @RequiresPermissions("sys:user:list") + public Result> departUserList(@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { + Result> result = new Result>(); + Page page = new Page(pageNo, pageSize); + String depId = req.getParameter("depId"); + String username = req.getParameter("username"); + //根据部门ID查询,当前和下级所有的部门IDS + List subDepids = new ArrayList<>(); + //部门id为空时,查询我的部门下所有用户 + if(oConvertUtils.isEmpty(depId)){ + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int userIdentity = user.getUserIdentity() != null?user.getUserIdentity():CommonConstant.USER_IDENTITY_1; + if(oConvertUtils.isNotEmpty(userIdentity) && userIdentity == CommonConstant.USER_IDENTITY_2 ){ + subDepids = sysDepartService.getMySubDepIdsByDepId(user.getDepartIds()); + } + }else{ + subDepids = sysDepartService.getSubDepIdsByDepId(depId); + } + if(subDepids != null && subDepids.size()>0){ + IPage pageList = sysUserService.getUserByDepIds(page,subDepids,username); + //批量查询用户的所属部门 + //step.1 先拿到全部的 useids + //step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = pageList.getRecords().stream().map(SysUser::getId).collect(Collectors.toList()); + if(userIds!=null && userIds.size()>0){ + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + pageList.getRecords().forEach(item -> { + //批量查询用户的所属部门 + item.setOrgCode(useDepNames.get(item.getId())); + }); + } + result.setSuccess(true); + result.setResult(pageList); + }else{ + result.setSuccess(true); + result.setResult(null); + } + return result; + } + + + /** + * 根据 orgCode 查询用户,包括子部门下的用户 + * 若某个用户包含多个部门,则会显示多条记录,可自行处理成单条记录 + */ + @GetMapping("/queryByOrgCode") + @RequiresPermissions("sys:user:list") + public Result queryByDepartId( + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + @RequestParam(name = "orgCode") String orgCode, + SysUser userParams + ) { + IPage pageList = sysUserService.queryUserByOrgCode(orgCode, userParams, new Page(pageNo, pageSize)); + return Result.OK(pageList); + } + + /** + * 给指定部门添加对应的用户 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("user:add") + @RequestMapping(value = "/editSysDepartWithUser", method = RequestMethod.POST) + public Result editSysDepartWithUser(@RequestBody SysDepartUsersVO sysDepartUsersVO) { + Result result = new Result(); + try { + String sysDepId = sysDepartUsersVO.getDepId(); + for(String sysUserId:sysDepartUsersVO.getUserIdList()) { + SysUserDepart sysUserDepart = new SysUserDepart(null,sysUserId,sysDepId); + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("dep_id", sysDepId).eq("user_id",sysUserId); + SysUserDepart one = sysUserDepartService.getOne(queryWrapper); + if(one==null){ + sysUserDepartService.save(sysUserDepart); + } + } + result.setMessage("添加成功!"); + result.setSuccess(true); + return result; + }catch(Exception e) { + log.error(e.getMessage(), e); + result.setSuccess(false); + result.setMessage("出错了: " + e.getMessage()); + return result; + } + } + + /** + * 删除指定机构的用户关系 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteUserInDepart", method = RequestMethod.DELETE) + public Result deleteUserInDepart(@RequestParam(name="depId") String depId, + @RequestParam(name="userId",required=true) String userId + ) { + Result result = new Result(); + try { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("dep_id", depId).eq("user_id",userId); + boolean b = sysUserDepartService.remove(queryWrapper); + if(b){ + List sysDepartRoleList = departRoleService.list(new QueryWrapper().eq("depart_id",depId)); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + QueryWrapper query = new QueryWrapper<>(); + query.eq("user_id",userId).in("drole_id",roleIds); + departRoleUserService.remove(query); + } + result.success("删除成功!"); + }else{ + result.error500("当前选中部门与用户无关联关系!"); + } + }catch(Exception e) { + log.error(e.getMessage(), e); + result.error500("删除失败!"); + } + return result; + } + + /** + * 批量删除指定机构的用户关系 + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteUserInDepartBatch", method = RequestMethod.DELETE) + public Result deleteUserInDepartBatch( + @RequestParam(name="depId") String depId, + @RequestParam(name="userIds",required=true) String userIds) { + Result result = new Result(); + try { + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.eq("dep_id", depId).in("user_id",Arrays.asList(userIds.split(","))); + boolean b = sysUserDepartService.remove(queryWrapper); + if(b){ + departRoleUserService.removeDeptRoleUser(Arrays.asList(userIds.split(",")),depId); + } + result.success("删除成功!"); + }catch(Exception e) { + log.error(e.getMessage(), e); + result.error500("删除失败!"); + } + return result; + } + + /** + * 查询当前用户的所有部门/当前部门编码 + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/getCurrentUserDeparts", method = RequestMethod.GET) + public Result> getCurrentUserDeparts() { + Result> result = new Result>(); + try { + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + List list = this.sysDepartService.queryUserDeparts(sysUser.getId()); + Map map = new HashMap(); + map.put("list", list); + map.put("orgCode", sysUser.getOrgCode()); + result.setSuccess(true); + result.setResult(map); + }catch(Exception e) { + log.error(e.getMessage(), e); + result.error500("查询失败!"); + } + return result; + } + + + + + /** + * 用户注册接口 + * + * @param jsonObject + * @param user + * @return + */ + @PostMapping("/register") + public Result userRegister(@RequestBody JSONObject jsonObject, SysUser user) { + Result result = new Result(); + String phone = jsonObject.getString("phone"); + String smscode = jsonObject.getString("smscode"); + Object code = redisUtil.get(phone); + String username = jsonObject.getString("username"); + //未设置用户名,则用手机号作为用户名 + if(oConvertUtils.isEmpty(username)){ + username = phone; + } + //未设置密码,则随机生成一个密码 + String password = jsonObject.getString("password"); + if(oConvertUtils.isEmpty(password)){ + password = RandomUtil.randomString(8); + } + String email = jsonObject.getString("email"); + SysUser sysUser1 = sysUserService.getUserByName(username); + if (sysUser1 != null) { + result.setMessage("用户名已注册"); + result.setSuccess(false); + return result; + } + SysUser sysUser2 = sysUserService.getUserByPhone(phone); + if (sysUser2 != null) { + result.setMessage("该手机号已注册"); + result.setSuccess(false); + return result; + } + + if(oConvertUtils.isNotEmpty(email)){ + SysUser sysUser3 = sysUserService.getUserByEmail(email); + if (sysUser3 != null) { + result.setMessage("邮箱已被注册"); + result.setSuccess(false); + return result; + } + } + if(null == code){ + result.setMessage("手机验证码失效,请重新获取"); + result.setSuccess(false); + return result; + } + if (!smscode.equals(code.toString())) { + result.setMessage("手机验证码错误"); + result.setSuccess(false); + return result; + } + + try { + user.setCreateTime(new Date());// 设置创建时间 + String salt = oConvertUtils.randomGen(8); + String passwordEncode = PasswordUtil.encrypt(username, password, salt); + user.setSalt(salt); + user.setUsername(username); + user.setRealname(username); + user.setPassword(passwordEncode); + user.setEmail(email); + user.setPhone(phone); + user.setStatus(CommonConstant.USER_UNFREEZE); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + user.setActivitiSync(CommonConstant.ACT_SYNC_0); + sysUserService.addUserWithRole(user,"ee8626f80f7c2619917b6236f3a7f02b");//默认临时角色 test + result.success("注册成功"); + } catch (Exception e) { + result.error500("注册失败"); + } + return result; + } + + /** + * 根据用户名或手机号查询用户信息 + * @param + * @return + */ + @RequiresPermissions("sys:user:list") + @GetMapping("/querySysUser") + public Result> querySysUser(SysUser sysUser) { + String phone = sysUser.getPhone(); + String username = sysUser.getUsername(); + Result> result = new Result>(); + Map map = new HashMap(); + if (oConvertUtils.isNotEmpty(phone)) { + SysUser user = sysUserService.getUserByPhone(phone); + if(user!=null) { + map.put("username",user.getUsername()); + map.put("phone",user.getPhone()); + result.setSuccess(true); + result.setResult(map); + return result; + } + } + if (oConvertUtils.isNotEmpty(username)) { + SysUser user = sysUserService.getUserByName(username); + if(user!=null) { + map.put("username",user.getUsername()); + map.put("phone",user.getPhone()); + result.setSuccess(true); + result.setResult(map); + return result; + } + } + result.setSuccess(false); + result.setMessage("验证失败"); + return result; + } + + /** + * 用户手机号验证 + */ + @PostMapping("/phoneVerification") + public Result> phoneVerification(@RequestBody JSONObject jsonObject) { + Result> result = new Result>(); + String phone = jsonObject.getString("phone"); + String smscode = jsonObject.getString("smscode"); + Object code = redisUtil.get(phone); + if (!smscode.equals(code)) { + result.setMessage("手机验证码错误"); + result.setSuccess(false); + return result; + } + //设置有效时间 + redisUtil.set(phone, smscode,600); + //新增查询用户名 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysUser::getPhone,phone); + SysUser user = sysUserService.getOne(query); + Map map = new HashMap<>(); + map.put("smscode",smscode); + map.put("username",user.getUsername()); + result.setResult(map); + result.setSuccess(true); + return result; + } + + /** + * 用户更改密码 + */ + @GetMapping("/passwordChange") + public Result passwordChange(@RequestParam(name="username")String username, + @RequestParam(name="password")String password, + @RequestParam(name="smscode")String smscode, + @RequestParam(name="phone") String phone) { + Result result = new Result(); + if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(password) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone) ) { + result.setMessage("更改密码失败!"); + result.setSuccess(false); + return result; + } + + SysUser sysUser=new SysUser(); + Object object= redisUtil.get(phone); + if(null==object) { + result.setMessage("短信验证码失效!"); + result.setSuccess(false); + return result; + } + if(!smscode.equals(object)) { + result.setMessage("短信验证码不匹配!"); + result.setSuccess(false); + return result; + } + sysUser = this.sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUsername,username).eq(SysUser::getPhone,phone)); + if (sysUser == null) { + result.setMessage("未找到用户!"); + result.setSuccess(false); + return result; + } else { + String salt = oConvertUtils.randomGen(8); + sysUser.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt); + sysUser.setPassword(passwordEncode); + this.sysUserService.updateById(sysUser); + result.setSuccess(true); + result.setMessage("密码更改完成!"); + return result; + } + } + + + /** + * 根据TOKEN获取用户的部分信息(返回的数据是可供表单设计器使用的数据) + * + * @return + */ + @RequiresPermissions("sys:user:list") + @GetMapping("/getUserSectionInfoByToken") + public Result getUserSectionInfoByToken(HttpServletRequest request, @RequestParam(name = "token", required = false) String token) { + try { + String username = null; + // 如果没有传递token,就从header中获取token并获取用户信息 + if (oConvertUtils.isEmpty(token)) { + username = JwtUtil.getUserNameByToken(request); + } else { + username = JwtUtil.getUsername(token); + } + + log.debug(" ------ 通过令牌获取部分用户信息,当前用户: " + username); + + // 根据用户名查询用户信息 + SysUser sysUser = sysUserService.getUserByName(username); + Map map = new HashMap(); + map.put("sysUserId", sysUser.getId()); + map.put("sysUserCode", sysUser.getUsername()); // 当前登录用户登录账号 + map.put("sysUserName", sysUser.getRealname()); // 当前登录用户真实名称 + map.put("sysOrgCode", sysUser.getOrgCode()); // 当前登录用户部门编号 + + log.debug(" ------ 通过令牌获取部分用户信息,已获取的用户信息: " + map); + + return Result.OK(map); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error(500, "查询失败:" + e.getMessage()); + } + } + + /** + * 【APP端接口】获取用户列表 根据用户名和真实名 模糊匹配 + * @param keyword + * @param pageNo + * @param pageSize + * @return + */ + @RequiresPermissions("sys:user:list") + @GetMapping("/appUserList") + public Result appUserList(@RequestParam(name = "keyword", required = false) String keyword, + @RequestParam(name = "username", required = false) String username, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + @RequestParam(name = "syncFlow", required = false) String syncFlow) { + try { + //TODO 从查询效率上将不要用mp的封装的page分页查询 建议自己写分页语句 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + if(oConvertUtils.isNotEmpty(syncFlow)){ + query.eq(SysUser::getActivitiSync, CommonConstant.ACT_SYNC_1); + } + query.eq(SysUser::getDelFlag,CommonConstant.DEL_FLAG_0); + if(oConvertUtils.isNotEmpty(username)){ + if(username.contains(",")){ + query.in(SysUser::getUsername,username.split(",")); + }else{ + query.eq(SysUser::getUsername,username); + } + }else{ + query.and(i -> i.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword)); + } + Page page = new Page<>(pageNo, pageSize); + IPage res = this.sysUserService.page(page, query); + return Result.OK(res); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error(500, "查询失败:" + e.getMessage()); + } + + } + + /** + * 获取被逻辑删除的用户列表,无分页 + * + * @return logicDeletedUserList + */ + @RequiresPermissions("sys:user:list") + @GetMapping("/recycleBin") + public Result getRecycleBin() { + List logicDeletedUserList = sysUserService.queryLogicDeleted(); + if (logicDeletedUserList.size() > 0) { + // 批量查询用户的所属部门 + // step.1 先拿到全部的 userIds + List userIds = logicDeletedUserList.stream().map(SysUser::getId).collect(Collectors.toList()); + // step.2 通过 userIds,一次性查询用户的所属部门名字 + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + logicDeletedUserList.forEach(item -> item.setOrgCode(useDepNames.get(item.getId()))); + } + return Result.OK(logicDeletedUserList); + } + + /** + * 还原被逻辑删除的用户 + * + * @param jsonObject + * @return + */ + @RequiresPermissions("sys:user:list") + @RequestMapping(value = "/putRecycleBin", method = RequestMethod.PUT) + public Result putRecycleBin(@RequestBody JSONObject jsonObject, HttpServletRequest request) { + String userIds = jsonObject.getString("userIds"); + if (StringUtils.isNotBlank(userIds)) { + SysUser updateUser = new SysUser(); + updateUser.setUpdateBy(JwtUtil.getUserNameByToken(request)); + updateUser.setUpdateTime(new Date()); + sysUserService.revertLogicDeleted(Arrays.asList(userIds.split(",")), updateUser); + } + return Result.OK("还原成功"); + } + + /** + * 彻底删除用户 + * + * @param userIds 被删除的用户ID,多个id用半角逗号分割 + * @return + */ + //@RequiresRoles({"admin"}) + @RequiresPermissions("sys:user:del") + @RequestMapping(value = "/deleteRecycleBin", method = RequestMethod.DELETE) + public Result deleteRecycleBin(@RequestParam("userIds") String userIds) { + if (StringUtils.isNotBlank(userIds)) { + sysUserService.removeLogicDeleted(Arrays.asList(userIds.split(","))); + } + return Result.OK("删除成功"); + } + + + /** + * 移动端修改用户信息 + * @param jsonObject + * @return + */ + @RequiresPermissions("user:edit") + @RequestMapping(value = "/appEdit", method = RequestMethod.PUT) + public Result appEdit(HttpServletRequest request,@RequestBody JSONObject jsonObject) { + Result result = new Result(); + try { + String username = JwtUtil.getUserNameByToken(request); + SysUser sysUser = sysUserService.getUserByName(username); + baseCommonService.addLog("移动端编辑用户,id: " +jsonObject.getString("id") ,CommonConstant.LOG_TYPE_2, 2); + String realname=jsonObject.getString("realname"); + String avatar=jsonObject.getString("avatar"); + String sex=jsonObject.getString("sex"); + String phone=jsonObject.getString("phone"); + String email=jsonObject.getString("email"); + Date birthday=jsonObject.getDate("birthday"); + SysUser userPhone = sysUserService.getUserByPhone(phone); + if(sysUser==null) { + result.error500("未找到对应用户!"); + }else { + if(userPhone!=null){ + String userPhonename = userPhone.getUsername(); + if(!userPhonename.equals(username)){ + result.error500("手机号已存在!"); + return result; + } + } + if(StringUtils.isNotBlank(realname)){ + sysUser.setRealname(realname); + } + if(StringUtils.isNotBlank(avatar)){ + sysUser.setAvatar(avatar); + } + if(StringUtils.isNotBlank(sex)){ + sysUser.setSex(Integer.parseInt(sex)); + } + if(StringUtils.isNotBlank(phone)){ + sysUser.setPhone(phone); + } + if(StringUtils.isNotBlank(email)){ + sysUser.setEmail(email); + } + if(null != birthday){ + sysUser.setBirthday(birthday); + } + sysUser.setUpdateTime(new Date()); + sysUserService.updateById(sysUser); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败!"); + } + return result; + } + /** + * 移动端保存设备信息 + * @param clientId + * @return + */ + @RequestMapping(value = "/saveClientId", method = RequestMethod.GET) + public Result saveClientId(HttpServletRequest request,@RequestParam("clientId")String clientId) { + Result result = new Result(); + try { + String username = JwtUtil.getUserNameByToken(request); + SysUser sysUser = sysUserService.getUserByName(username); + if(sysUser==null) { + result.error500("未找到对应用户!"); + }else { + sysUser.setClientId(clientId); + sysUserService.updateById(sysUser); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + result.error500("操作失败!"); + } + return result; + } + /** + * 根据userid获取用户信息和部门员工信息 + * + * @return Result + */ + @RequiresPermissions("sys:user:list") + @GetMapping("/queryChildrenByUsername") + public Result queryChildrenByUsername(@RequestParam("userId") String userId) { + //获取用户信息 + Map map=new HashMap(); + SysUser sysUser = sysUserService.getById(userId); + String username = sysUser.getUsername(); + Integer identity = sysUser.getUserIdentity(); + map.put("sysUser",sysUser); + if(identity!=null && identity==2){ + //获取部门用户信息 + String departIds = sysUser.getDepartIds(); + if(StringUtils.isNotBlank(departIds)){ + List departIdList = Arrays.asList(departIds.split(",")); + List childrenUser = sysUserService.queryByDepIds(departIdList,username); + map.put("children",childrenUser); + } + } + return Result.OK(map); + } + /** + * 移动端查询部门用户信息 + * @param departId + * @return + */ + @GetMapping("/appQueryByDepartId") + public Result> appQueryByDepartId(@RequestParam(name="departId", required = false) String departId) { + Result> result = new Result>(); + List list=new ArrayList (); + list.add(departId); + List childrenUser = sysUserService.queryByDepIds(list,null); + result.setResult(childrenUser); + return result; + } + /** + * 移动端查询用户信息(通过用户名模糊查询) + * @param keyword + * @return + */ + @GetMapping("/appQueryUser") + public Result> appQueryUser(@RequestParam(name = "keyword", required = false) String keyword) { + Result> result = new Result>(); + LambdaQueryWrapper queryWrapper =new LambdaQueryWrapper(); + //TODO 外部模拟登陆临时账号,列表不显示 + queryWrapper.ne(SysUser::getUsername,"_reserve_user_external"); + if(StringUtils.isNotBlank(keyword)){ + queryWrapper.and(i -> i.like(SysUser::getUsername, keyword).or().like(SysUser::getRealname, keyword)); + } + List list = sysUserService.list(queryWrapper); + //批量查询用户的所属部门 + //step.1 先拿到全部的 useids + //step.2 通过 useids,一次性查询用户的所属部门名字 + List userIds = list.stream().map(SysUser::getId).collect(Collectors.toList()); + if(userIds!=null && userIds.size()>0){ + Map useDepNames = sysUserService.getDepNamesByUserIds(userIds); + list.forEach(item->{ + item.setOrgCodeTxt(useDepNames.get(item.getId())); + }); + } + result.setResult(list); + return result; + } + + /** + * 根据用户名修改手机号 + * @param json + * @return + */ + @RequestMapping(value = "/updateMobile", method = RequestMethod.PUT) + public Result changMobile(@RequestBody JSONObject json,HttpServletRequest request) { + String smscode = json.getString("smscode"); + String phone = json.getString("phone"); + Result result = new Result(); + //获取登录用户名 + String username = JwtUtil.getUserNameByToken(request); + if(oConvertUtils.isEmpty(username) || oConvertUtils.isEmpty(smscode) || oConvertUtils.isEmpty(phone)) { + result.setMessage("修改手机号失败!"); + result.setSuccess(false); + return result; + } + Object object= redisUtil.get(phone); + if(null==object) { + result.setMessage("短信验证码失效!"); + result.setSuccess(false); + return result; + } + if(!smscode.equals(object)) { + result.setMessage("短信验证码不匹配!"); + result.setSuccess(false); + return result; + } + SysUser user = sysUserService.getUserByName(username); + if(user==null) { + return Result.error("用户不存在!"); + } + user.setPhone(phone); + sysUserService.updateById(user); + return Result.OK("手机号设置成功!"); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java new file mode 100644 index 00000000..52172d93 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/ThirdLoginController.java @@ -0,0 +1,280 @@ +package com.jero.modules.system.controller; + +import cn.hutool.crypto.SecureUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.xkcoding.justauth.AuthRequestFactory; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import me.zhyd.oauth.model.AuthCallback; +import me.zhyd.oauth.model.AuthResponse; +import me.zhyd.oauth.request.AuthRequest; +import me.zhyd.oauth.utils.AuthStateUtils; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.*; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.system.vo.LoginUser; +import com.jero.modules.system.entity.SysThirdAccount; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.ThirdLoginModel; +import com.jero.modules.system.service.ISysThirdAccountService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Date; +import java.util.List; + +/** + * @Author scott + * @since 2018-12-17 + */ +@Controller +@RequestMapping("/sys/thirdLogin") +@Slf4j +public class ThirdLoginController { + @Autowired + private ISysUserService sysUserService; + @Autowired + private ISysThirdAccountService sysThirdAccountService; + + @Autowired + private BaseCommonService baseCommonService; + @Autowired + private RedisUtil redisUtil; + @Autowired + private AuthRequestFactory factory; + + @RequestMapping("/render/{source}") + public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException { + log.info("第三方登录进入render:" + source); + AuthRequest authRequest = factory.get(source); + String authorizeUrl = authRequest.authorize(AuthStateUtils.createState()); + log.info("第三方登录认证地址:" + authorizeUrl); + response.sendRedirect(authorizeUrl); + } + + @RequestMapping("/{source}/callback") + public String loginThird(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) { + log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback)); + AuthRequest authRequest = factory.get(source); + AuthResponse response = authRequest.login(callback); + log.info(JSONObject.toJSONString(response)); + Result result = new Result(); + if(response.getCode()==2000) { + + JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData())); + String username = data.getString("username"); + String avatar = data.getString("avatar"); + String uuid = data.getString("uuid"); + //构造第三方登录信息存储对象 + ThirdLoginModel tlm = new ThirdLoginModel(source, uuid, username, avatar); + //判断有没有这个人 + //update-begin-author:wangshuai date:20201118 for:修改成查询第三方账户表 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysThirdAccount::getThirdUserUuid, uuid); + query.eq(SysThirdAccount::getThirdType, source); + List thridList = sysThirdAccountService.list(query); + SysThirdAccount user = null; + if(thridList==null || thridList.size()==0) { + //否则直接创建新账号 + user = saveThirdUser(tlm); + }else { + //已存在 只设置用户名 不设置头像 + user = thridList.get(0); + } + // 生成token + //update-begin-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 + if(oConvertUtils.isNotEmpty(user.getSysUserId())) { + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + String token = saveToken(sysUser); + modelMap.addAttribute("token", token); + }else{ + modelMap.addAttribute("token", "绑定手机号,"+""+uuid); + } + //update-end-author:wangshuai date:20201118 for:从第三方登录查询是否存在用户id,不存在绑定手机号 + //update-begin--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- + }else{ + modelMap.addAttribute("token", "登录失败"); + } + //update-end--Author:wangshuai Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441-------------------- + result.setSuccess(false); + result.setMessage("第三方登录异常,请联系管理员"); + return "thirdLogin"; + } + + /** + * 创建新账号 + * @param model + * @return + */ + @PostMapping("/user/create") + @ResponseBody + public Result thirdUserCreate(@RequestBody ThirdLoginModel model) { + log.info("第三方登录创建新账号:" ); + Result res = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if(operateCode==null || !operateCode.toString().equals(model.getOperateCode())){ + res.setSuccess(false); + res.setMessage("校验失败"); + return res; + } + //创建新账号 + //update-begin-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token + SysThirdAccount user = saveThirdUser(model); + if(oConvertUtils.isNotEmpty(user.getSysUserId())){ + String sysUserId = user.getSysUserId(); + SysUser sysUser = sysUserService.getById(sysUserId); + // 生成token + String token = saveToken(sysUser); + //update-end-author:wangshuai date:20201118 for:修改成从第三方登录查出来的user_id,在查询用户表尽行token + res.setResult(token); + res.setSuccess(true); + } + return res; + } + + /** + * 绑定账号 需要设置密码 需要走一遍校验 + * @param json + * @return + */ + @PostMapping("/user/checkPassword") + @ResponseBody + public Result checkPassword(@RequestBody JSONObject json) { + Result result = new Result<>(); + Object operateCode = redisUtil.get(CommonConstant.THIRD_LOGIN_CODE); + if(operateCode==null || !operateCode.toString().equals(json.getString("operateCode"))){ + result.setSuccess(false); + result.setMessage("校验失败"); + return result; + } + String username = json.getString("uuid"); + SysUser user = this.sysUserService.getUserByName(username); + if(user==null){ + result.setMessage("用户未找到"); + result.setSuccess(false); + return result; + } + String password = json.getString("password"); + String salt = user.getSalt(); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), password, salt); + if(!passwordEncode.equals(user.getPassword())){ + result.setMessage("密码不正确"); + result.setSuccess(false); + return result; + } + + sysUserService.updateById(user); + result.setSuccess(true); + // 生成token + String token = saveToken(user); + result.setResult(token); + return result; + } + + /** + * 创建新用户 + * @param tlm 第三方登录信息 + */ + private SysThirdAccount saveThirdUser(ThirdLoginModel tlm){ + SysThirdAccount user = new SysThirdAccount(); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + user.setStatus(1); + user.setThirdType(tlm.getSource()); + user.setAvatar(tlm.getAvatar()); + user.setRealname(tlm.getUsername()); + user.setThirdUserUuid(tlm.getUuid()); + sysThirdAccountService.save(user); + return user; + } + + private String saveToken(SysUser user) { + // 生成token + String token = JwtUtil.sign(user.getUsername(), user.getPassword()); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + // 设置超时时间 + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000); + return token; + } + + @SuppressWarnings("unchecked") + @RequestMapping(value = "/getLoginUser/{token}/{thirdType}", method = RequestMethod.GET) + @ResponseBody + public Result getThirdLoginUser(@PathVariable("token") String token,@PathVariable("thirdType") String thirdType) throws Exception { + Result result = new Result(); + String username = JwtUtil.getUsername(token); + + //1. 校验用户是否有效 + SysUser sysUser = sysUserService.getUserByName(username); + result = sysUserService.checkUserIsEffective(sysUser); + if(!result.isSuccess()) { + return result; + } + //update-begin-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getSysUserId,sysUser.getId()); + query.eq(SysThirdAccount::getThirdType,thirdType); + SysThirdAccount account = sysThirdAccountService.getOne(query); + if(oConvertUtils.isEmpty(sysUser.getRealname())){ + sysUser.setRealname(account.getRealname()); + } + if(oConvertUtils.isEmpty(sysUser.getAvatar())){ + sysUser.setAvatar(account.getAvatar()); + } + //update-end-author:wangshuai date:20201118 for:如果真实姓名和头像不存在就取第三方登录的 + JSONObject obj = new JSONObject(); + //用户登录信息 + obj.put("userInfo", sysUser); + //token 信息 + obj.put("token", token); + result.setResult(obj); + result.setSuccess(true); + result.setCode(200); + baseCommonService.addLog("用户名: " + username + ",登录成功[第三方用户]!", CommonConstant.LOG_TYPE_1, null); + return result; + } + /** + * 第三方绑定手机号返回token + * + * @param jsonObject + * @return + */ + @ApiOperation("手机号登录接口") + @PostMapping("/bindingThirdPhone") + @ResponseBody + public Result bindingThirdPhone(@RequestBody JSONObject jsonObject) { + Result result = new Result(); + String phone = jsonObject.getString("mobile"); + String thirdUserUuid = jsonObject.getString("thirdUserUuid"); + //校验用户有效性 + SysUser sysUser = sysUserService.getUserByPhone(phone); + if(sysUser != null){ + sysThirdAccountService.updateThirdUserId(sysUser,thirdUserUuid); + }else{ + // 不存在手机号,创建用户 + String smscode = jsonObject.getString("captcha"); + Object code = redisUtil.get(phone); + if (!smscode.equals(code)) { + result.setMessage("手机验证码错误"); + result.setSuccess(false); + return result; + } + //创建用户 + sysUser = sysThirdAccountService.createUser(phone,thirdUserUuid); + } + String token = saveToken(sysUser); + result.setSuccess(true); + result.setResult(token); + return result; + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java new file mode 100644 index 00000000..01642f1e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncement.java @@ -0,0 +1,147 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: 系统通告表 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +@Data +@TableName("sys_announcement") +public class SysAnnouncement implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /** + * 标题 + */ + @Excel(name = "标题", width = 15) + private java.lang.String titile; + /** + * 内容 + */ + @Excel(name = "内容", width = 30) + private java.lang.String msgContent; + /** + * 开始时间 + */ + @Excel(name = "开始时间", width = 15, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date startTime; + /** + * 结束时间 + */ + @Excel(name = "结束时间", width = 15, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date endTime; + /** + * 发布人 + */ + @Excel(name = "发布人", width = 15) + private java.lang.String sender; + /** + * 优先级(L低,M中,H高) + */ + @Excel(name = "优先级", width = 15, dicCode = "priority") + @Dict(dicCode = "priority") + private java.lang.String priority; + + /** + * 消息类型1:通知公告2:系统消息 + */ + @Excel(name = "消息类型", width = 15, dicCode = "msg_category") + @Dict(dicCode = "msg_category") + private java.lang.String msgCategory; + /** + * 通告对象类型(USER:指定用户,ALL:全体用户) + */ + @Excel(name = "通告对象类型", width = 15, dicCode = "msg_type") + @Dict(dicCode = "msg_type") + private java.lang.String msgType; + /** + * 发布状态(0未发布,1已发布,2已撤销) + */ + @Excel(name = "发布状态", width = 15, dicCode = "send_status") + @Dict(dicCode = "send_status") + private java.lang.String sendStatus; + /** + * 发布时间 + */ + @Excel(name = "发布时间", width = 15, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date sendTime; + /** + * 撤销时间 + */ + @Excel(name = "撤销时间", width = 15, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date cancelTime; + /** + * 删除状态(0,正常,1已删除) + */ + private java.lang.String delFlag; + /** + * 创建人 + */ + private java.lang.String createBy; + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** + * 更新人 + */ + private java.lang.String updateBy; + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** + * 指定用户 + **/ + private java.lang.String userIds; + /** + * 业务类型(email:邮件 bpm:流程) + */ + private java.lang.String busType; + /** + * 业务id + */ + private java.lang.String busId; + /** + * 打开方式 组件:component 路由:url + */ + private java.lang.String openType; + /** + * 组件/路由 地址 + */ + private java.lang.String openPage; + /** + * 摘要 + */ + private java.lang.String msgAbstract; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java new file mode 100644 index 00000000..36c32a32 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysAnnouncementSend.java @@ -0,0 +1,48 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +@Data +@TableName("sys_announcement_send") +public class SysAnnouncementSend implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /**通告id*/ + private java.lang.String anntId; + /**用户id*/ + private java.lang.String userId; + /**阅读状态(0未读,1已读)*/ + private java.lang.String readFlag; + /**阅读时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date readTime; + /**创建人*/ + private java.lang.String createBy; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**更新人*/ + private java.lang.String updateBy; + /**更新时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java new file mode 100644 index 00000000..158a7996 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCategory.java @@ -0,0 +1,66 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +/** + * @Description: 分类字典 + * @Author: jero-boot + * @Date: 2019-05-29 + * @Version: V1.0 + */ +@Data +@TableName("sys_category") +public class SysCategory implements Serializable,Comparable{ + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /**父级节点*/ + private java.lang.String pid; + /**类型名称*/ + @Excel(name = "类型名称", width = 15) + private java.lang.String name; + /**类型编码*/ + @Excel(name = "类型编码", width = 15) + private java.lang.String code; + /**创建人*/ + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**更新人*/ + private java.lang.String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /**所属部门*/ + private java.lang.String sysOrgCode; + /**是否有子节点*/ + @Excel(name = "是否有子节点(1:有)", width = 15) + private java.lang.String hasChild; + + @Override + public int compareTo(SysCategory o) { + //比较条件我们定的是按照code的长度升序 + // <0:当前对象比传入对象小。 + // =0:当前对象等于传入对象。 + // >0:当前对象比传入对象大。 + int s = this.code.length() - o.code.length(); + return s; + } + @Override + public String toString() { + return "SysCategory [code=" + code + ", name=" + name + "]"; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCheckRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCheckRule.java new file mode 100644 index 00000000..c6310da7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysCheckRule.java @@ -0,0 +1,88 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @Description: 编码校验规则 + * @Author: jero-boot + * @Date: 2020-02-04 + * @Version: V1.0 + */ +@Data +@TableName("sys_check_rule") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value = "sys_check_rule对象", description = "编码校验规则") +public class SysCheckRule { + + /** + * 主键id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键id") + private String id; + /** + * 规则名称 + */ + @Excel(name = "规则名称", width = 15) + @ApiModelProperty(value = "规则名称") + private String ruleName; + /** + * 规则Code + */ + @Excel(name = "规则Code", width = 15) + @ApiModelProperty(value = "规则Code") + private String ruleCode; + /** + * 规则JSON + */ + @Excel(name = "规则JSON", width = 15) + @ApiModelProperty(value = "规则JSON") + private String ruleJson; + /** + * 规则描述 + */ + @Excel(name = "规则描述", width = 15) + @ApiModelProperty(value = "规则描述") + private String ruleDescription; + /** + * 更新人 + */ + @Excel(name = "更新人", width = 15) + @ApiModelProperty(value = "更新人") + private String updateBy; + /** + * 更新时间 + */ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private Date updateTime; + /** + * 创建人 + */ + @Excel(name = "创建人", width = 15) + @ApiModelProperty(value = "创建人") + private String createBy; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private Date createTime; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysConfusion.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysConfusion.java new file mode 100644 index 00000000..513aff3d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysConfusion.java @@ -0,0 +1,105 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: 混淆表 + * @Author: jero-boot + * @Date: 2021-08-05 + * @Version: V1.0 + */ +@Data +@TableName("sys_confusion") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value = "sys_confusion对象", description = "混淆表") +public class SysConfusion implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /** + * 创建人 + */ + + @ApiModelProperty(value = "创建人") + private String createBy; + + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private LocalDateTime createTime; + + /** + * 更新人 + */ + + @ApiModelProperty(value = "更新人") + private String updateBy; + + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @JsonSerialize(using = LocalDateTimeSerializer.class) + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private LocalDateTime updateTime; + + /** + * 所属部门 + */ + + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + + /** + * 混淆类型 + */ + @Excel(name = "表名", width = 15) + @ApiModelProperty(value = "表名") + private String tableName; + + /** + * 表名或字段名 + */ + @Excel(name = "字段名", width = 15) + @ApiModelProperty(value = "字段名") + private String fieldName; + + /** + * 混淆code + */ + @Excel(name = "混淆code", width = 15) + @ApiModelProperty(value = "混淆code") + private String confusionCode; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataLog.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataLog.java new file mode 100644 index 00000000..fefeb24c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataLog.java @@ -0,0 +1,36 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDataLog implements Serializable { + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) + private String id; //id' + private String createBy; //创建人登录名称 + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; //创建日期 + private String updateBy; //更新人登录名称 + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; //更新日期 + private String dataTable; //表名 + private String dataId; //数据ID + private String dataContent; //数据内容 + private String dataVersion; //版本号 +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataSource.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataSource.java new file mode 100644 index 00000000..3c3c1442 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDataSource.java @@ -0,0 +1,120 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: 多数据源管理 + * @Author: jero-boot + * @Date: 2019-12-25 + * @Version: V1.0 + */ +@Data +@TableName("sys_data_source") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value = "sys_data_source对象", description = "多数据源管理") +public class SysDataSource { + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /** + * 数据源编码 + */ + @Excel(name = "数据源编码", width = 15) + @ApiModelProperty(value = "数据源编码") + private java.lang.String code; + /** + * 数据源名称 + */ + @Excel(name = "数据源名称", width = 15) + @ApiModelProperty(value = "数据源名称") + private java.lang.String name; + /** + * 描述 + */ + @Excel(name = "备注", width = 15) + @ApiModelProperty(value = "备注") + private java.lang.String remark; + /** + * 数据库类型 + */ + @Dict(dicCode = "database_type") + @Excel(name = "数据库类型", width = 15, dicCode = "database_type") + @ApiModelProperty(value = "数据库类型") + private java.lang.String dbType; + /** + * 驱动类 + */ + @Excel(name = "驱动类", width = 15) + @ApiModelProperty(value = "驱动类") + private java.lang.String dbDriver; + /** + * 数据源地址 + */ + @Excel(name = "数据源地址", width = 15) + @ApiModelProperty(value = "数据源地址") + private java.lang.String dbUrl; + /** + * 数据库名称 + */ + @Excel(name = "数据库名称", width = 15) + @ApiModelProperty(value = "数据库名称") + private java.lang.String dbName; + /** + * 用户名 + */ + @Excel(name = "用户名", width = 15) + @ApiModelProperty(value = "用户名") + private java.lang.String dbUsername; + /** + * 密码 + */ + @Excel(name = "密码", width = 15) + @ApiModelProperty(value = "密码") + private java.lang.String dbPassword; + /** + * 创建人 + */ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /** + * 创建日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + /** + * 更新人 + */ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /** + * 更新日期 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + /** + * 所属部门 + */ + @Excel(name = "所属部门", width = 15) + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepart.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepart.java new file mode 100644 index 00000000..62cc6b75 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepart.java @@ -0,0 +1,135 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; +import java.util.Objects; + +/** + *

+ * 部门表 + *

+ * + * @Author Steve + * @Since 2019-01-22 + */ +@Data +@TableName("sys_depart") +public class SysDepart implements Serializable { + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /**父机构ID*/ + private String parentId; + /**机构/部门名称*/ + @Excel(name="机构/部门名称",width=15) + private String departName; + /**英文名*/ + @Excel(name="英文名",width=15) + private String departNameEn; + /**缩写*/ + private String departNameAbbr; + /**排序*/ + @Excel(name="排序",width=15) + private Integer departOrder; + /**描述*/ + @Excel(name="描述",width=15) + private String description; + /**机构类别 1公司,2组织机构,2岗位*/ + @Excel(name="机构类别",width=15,dicCode="org_category") + private String orgCategory; + /**机构类型*/ + private String orgType; + /**机构编码*/ + @Excel(name="机构编码",width=15) + private String orgCode; + /**手机号*/ + @Excel(name="手机号",width=15) + private String mobile; + /**传真*/ + @Excel(name="传真",width=15) + private String fax; + /**地址*/ + @Excel(name="地址",width=15) + private String address; + /**备注*/ + @Excel(name="备注",width=15) + private String memo; + /**状态(1启用,0不启用)*/ + @Dict(dicCode = "depart_status") + private String status; + /**删除状态(0,正常,1已删除)*/ + @Dict(dicCode = "del_flag") + private String delFlag; + /**创建人*/ + private String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + /**更新人*/ + private String updateBy; + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 重写equals方法 + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + SysDepart depart = (SysDepart) o; + return Objects.equals(id, depart.id) && + Objects.equals(parentId, depart.parentId) && + Objects.equals(departName, depart.departName) && + Objects.equals(departNameEn, depart.departNameEn) && + Objects.equals(departNameAbbr, depart.departNameAbbr) && + Objects.equals(departOrder, depart.departOrder) && + Objects.equals(description, depart.description) && + Objects.equals(orgCategory, depart.orgCategory) && + Objects.equals(orgType, depart.orgType) && + Objects.equals(orgCode, depart.orgCode) && + Objects.equals(mobile, depart.mobile) && + Objects.equals(fax, depart.fax) && + Objects.equals(address, depart.address) && + Objects.equals(memo, depart.memo) && + Objects.equals(status, depart.status) && + Objects.equals(delFlag, depart.delFlag) && + Objects.equals(createBy, depart.createBy) && + Objects.equals(createTime, depart.createTime) && + Objects.equals(updateBy, depart.updateBy) && + Objects.equals(updateTime, depart.updateTime); + } + + /** + * 重写hashCode方法 + */ + @Override + public int hashCode() { + + return Objects.hash(super.hashCode(), id, parentId, departName, + departNameEn, departNameAbbr, departOrder, description,orgCategory, + orgType, orgCode, mobile, fax, address, memo, status, + delFlag, createBy, createTime, updateBy, updateTime); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java new file mode 100644 index 00000000..d89cce0f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartPermission.java @@ -0,0 +1,55 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 部门权限表 + * @Author: jero-boot + * @Date: 2020-02-11 + * @Version: V1.0 + */ +@Data +@TableName("sys_depart_permission") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="sys_depart_permission对象", description="部门权限表") +public class SysDepartPermission { + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**部门id*/ + @Excel(name = "部门id", width = 15) + @ApiModelProperty(value = "部门id") + private java.lang.String departId; + /**权限id*/ + @Excel(name = "权限id", width = 15) + @ApiModelProperty(value = "权限id") + private java.lang.String permissionId; + /**数据规则id*/ + @ApiModelProperty(value = "数据规则id") + private java.lang.String dataRuleIds; + + public SysDepartPermission() { + + } + + public SysDepartPermission(String departId, String permissionId) { + this.departId = departId; + this.permissionId = permissionId; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRole.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRole.java new file mode 100644 index 00000000..51f23ae1 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRole.java @@ -0,0 +1,75 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 部门角色 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +@Data +@TableName("sys_depart_role") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="sys_depart_role对象", description="部门角色") +public class SysDepartRole { + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**部门id*/ + @Excel(name = "部门id", width = 15) + @ApiModelProperty(value = "部门id") + @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") + private java.lang.String departId; + /**部门角色名称*/ + @Excel(name = "部门角色名称", width = 15) + @ApiModelProperty(value = "部门角色名称") + private java.lang.String roleName; + /**部门角色编码*/ + @Excel(name = "部门角色编码", width = 15) + @ApiModelProperty(value = "部门角色编码") + private java.lang.String roleCode; + /**描述*/ + @Excel(name = "描述", width = 15) + @ApiModelProperty(value = "描述") + private java.lang.String description; + /**创建人*/ + @Excel(name = "创建人", width = 15) + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建时间*/ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /**更新人*/ + @Excel(name = "更新人", width = 15) + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新时间*/ + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新时间") + private java.util.Date updateTime; + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRolePermission.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRolePermission.java new file mode 100644 index 00000000..80e6aeb7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRolePermission.java @@ -0,0 +1,67 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 部门角色权限 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +@Data +@TableName("sys_depart_role_permission") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="sys_depart_role_permission对象", description="部门角色权限") +public class SysDepartRolePermission { + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "id") + private java.lang.String id; + /**部门id*/ + @Excel(name = "部门id", width = 15) + @ApiModelProperty(value = "部门id") + private java.lang.String departId; + /**角色id*/ + @Excel(name = "角色id", width = 15) + @ApiModelProperty(value = "角色id") + private java.lang.String roleId; + /**权限id*/ + @Excel(name = "权限id", width = 15) + @ApiModelProperty(value = "权限id") + private java.lang.String permissionId; + /**dataRuleIds*/ + @Excel(name = "dataRuleIds", width = 15) + @ApiModelProperty(value = "dataRuleIds") + private java.lang.String dataRuleIds; + /** 操作时间 */ + @Excel(name = "操作时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "操作时间") + private java.util.Date operateDate; + /** 操作ip */ + private java.lang.String operateIp; + + public SysDepartRolePermission() { + } + + public SysDepartRolePermission(String roleId, String permissionId) { + this.roleId = roleId; + this.permissionId = permissionId; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRoleUser.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRoleUser.java new file mode 100644 index 00000000..7a5b2985 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDepartRoleUser.java @@ -0,0 +1,52 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 部门角色人员信息 + * @Author: jero-boot + * @Date: 2020-02-13 + * @Version: V1.0 + */ +@Data +@TableName("sys_depart_role_user") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="sys_depart_role_user对象", description="部门角色人员信息") +public class SysDepartRoleUser { + + /**主键id*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键id") + private java.lang.String id; + /**用户id*/ + @Excel(name = "用户id", width = 15) + @ApiModelProperty(value = "用户id") + private java.lang.String userId; + /**角色id*/ + @Excel(name = "角色id", width = 15) + @ApiModelProperty(value = "角色id") + private java.lang.String droleId; + + public SysDepartRoleUser() { + + } + + public SysDepartRoleUser(String userId, String droleId) { + this.userId = userId; + this.droleId = droleId; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java new file mode 100644 index 00000000..69d2c171 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java @@ -0,0 +1,85 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 字典表 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDict implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * [预留字段,暂时无用] + * 字典类型,0 string,1 number类型,2 boolean + * 前端js对stirng类型和number类型 boolean 类型敏感,需要区分。在select 标签匹配的时候会用到 + * 默认为string类型 + */ + private Integer type; + + /** + * 字典名称 + */ + private String dictName; + + /** + * 字典编码 + */ + private String dictCode; + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 + */ + @TableLogic + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java new file mode 100644 index 00000000..036dd0e1 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDictItem.java @@ -0,0 +1,82 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + *

+ * + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDictItem implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 字典id + */ + private String dictId; + + /** + * 字典项文本 + */ + @Excel(name = "字典项文本", width = 20) + private String itemText; + + /** + * 字典项值 + */ + @Excel(name = "字典项值", width = 30) + private String itemValue; + + /** + * 描述 + */ + @Excel(name = "描述", width = 40) + private String description; + + /** + * 排序 + */ + @Excel(name = "排序", width = 15,type=4) + private Integer sortOrder; + + + /** + * 状态(1启用 0不启用) + */ + @Dict(dicCode = "dict_item_status") + private Integer status; + + private String createBy; + + private Date createTime; + + private String updateBy; + + private Date updateTime; + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysFillRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysFillRule.java new file mode 100644 index 00000000..3fb90886 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysFillRule.java @@ -0,0 +1,86 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: 填值规则 + * @Author: jero-boot + * @Date: 2019-11-07 + * @Version: V1.0 + */ +@Data +@TableName("sys_fill_rule") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value = "sys_fill_rule对象", description = "填值规则") +public class SysFillRule { + + /** + * 主键ID + */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private java.lang.String id; + /** + * 规则名称 + */ + @Excel(name = "规则名称", width = 15) + @ApiModelProperty(value = "规则名称") + private java.lang.String ruleName; + /** + * 规则Code + */ + @Excel(name = "规则Code", width = 15) + @ApiModelProperty(value = "规则Code") + private java.lang.String ruleCode; + /** + * 规则实现类 + */ + @Excel(name = "规则实现类", width = 15) + @ApiModelProperty(value = "规则实现类") + private java.lang.String ruleClass; + /** + * 规则参数 + */ + @Excel(name = "规则参数", width = 15) + @ApiModelProperty(value = "规则参数") + private java.lang.String ruleParams; + /** + * 修改人 + */ + @Excel(name = "修改人", width = 15) + @ApiModelProperty(value = "修改人") + private java.lang.String updateBy; + /** + * 修改时间 + */ + @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "修改时间") + private java.util.Date updateTime; + /** + * 创建人 + */ + @Excel(name = "创建人", width = 15) + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /** + * 创建时间 + */ + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java new file mode 100644 index 00000000..4c7b2d26 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysGatewayRoute.java @@ -0,0 +1,111 @@ +package com.jero.modules.system.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.Date; + +/** + * @Description: gateway路由管理 + * @Author: jero-boot + * @Date: 2020-05-26 + * @Version: V1.0 + */ +@Data +@TableName("sys_gateway_route") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="sys_gateway_route对象", description="gateway路由管理") +public class SysGatewayRoute implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private String id; + + /**routerKEy*/ + @ApiModelProperty(value = "路由ID") + private String routerId; + + /**服务名*/ + @Excel(name = "服务名", width = 15) + @ApiModelProperty(value = "服务名") + private String name; + + /**服务地址*/ + @Excel(name = "服务地址", width = 15) + @ApiModelProperty(value = "服务地址") + private String uri; + + /** + * 断言配置 + */ + private String predicates; + + /** + * 过滤配置 + */ + private String filters; + + /**是否忽略前缀0-否 1-是*/ + @Excel(name = "忽略前缀", width = 15) + @ApiModelProperty(value = "忽略前缀") + @Dict(dicCode = "yn") + private Integer stripPrefix; + + /**是否重试0-否 1-是*/ + @Excel(name = "是否重试", width = 15) + @ApiModelProperty(value = "是否重试") + @Dict(dicCode = "yn") + private Integer retryable; + + /**是否为保留数据:0-否 1-是*/ + @Excel(name = "保留数据", width = 15) + @ApiModelProperty(value = "保留数据") + @Dict(dicCode = "yn") + private Integer persistable; + + /**是否在接口文档中展示:0-否 1-是*/ + @Excel(name = "在接口文档中展示", width = 15) + @ApiModelProperty(value = "在接口文档中展示") + @Dict(dicCode = "yn") + private Integer showApi; + + /**状态 1有效 0无效*/ + @Excel(name = "状态", width = 15) + @ApiModelProperty(value = "状态") + @Dict(dicCode = "yn") + private Integer status; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private Date createTime; + /* *//**更新人*//* + @ApiModelProperty(value = "更新人") + private String updateBy; + *//**更新日期*//* + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private Date updateTime; + *//**所属部门*//* + @ApiModelProperty(value = "所属部门") + private String sysOrgCode;*/ +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysLog.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysLog.java new file mode 100644 index 00000000..2e84df48 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysLog.java @@ -0,0 +1,112 @@ +package com.jero.modules.system.entity; + +import java.util.Date; + +import com.jero.common.aspect.annotation.Dict; +import org.springframework.format.annotation.DateTimeFormat; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 系统日志表 + *

+ * + * @Author zhangweijian + * @since 2018-12-26 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysLog implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 耗时 + */ + private Long costTime; + + /** + * IP + */ + private String ip; + + /** + * 请求参数 + */ + private String requestParam; + + /** + * 请求类型 + */ + private String requestType; + + /** + * 请求路径 + */ + private String requestUrl; + /** + * 请求方法 + */ + private String method; + + /** + * 操作人用户名称 + */ + private String username; + /** + * 操作人用户账户 + */ + private String userid; + /** + * 操作详细日志 + */ + private String logContent; + + /** + * 日志类型(1登录日志,2操作日志) + */ + @Dict(dicCode = "log_type") + private Integer logType; + + /** + * 操作类型(1查询,2添加,3修改,4删除,5导入,6导出) + */ + @Dict(dicCode = "operate_type") + private Integer operateType; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java new file mode 100644 index 00000000..460e183e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermission.java @@ -0,0 +1,182 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.jero.common.aspect.annotation.Dict; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + *

+ * 菜单权限表 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysPermission implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 父id + */ + private String parentId; + + /** + * 菜单名称 + */ + private String name; + + /** + * 菜单权限编码,例如:“sys:schedule:list,sys:schedule:info”,多个逗号隔开 + */ + private String perms; + /** + * 权限策略1显示2禁用 + */ + private String permsType; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 组件 + */ + private String component; + + /** + * 组件名字 + */ + private String componentName; + + /** + * 路径 + */ + private String url; + /** + * 一级菜单跳转地址 + */ + private String redirect; + + /** + * 菜单排序 + */ + private Double sortNo; + + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + @Dict(dicCode = "menu_type") + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + @TableField(value="is_leaf") + private boolean leaf; + + /** + * 是否路由菜单: 0:不是 1:是(默认值1) + */ + @TableField(value="is_route") + private boolean route; + + + /** + * 是否缓存页面: 0:不是 1:是(默认值1) + */ + @TableField(value="keep_alive") + private boolean keepAlive; + + /** + * 描述 + */ + private String description; + + /** + * 创建人 + */ + private String createBy; + + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; + + /** + * 是否配置菜单的数据权限 1是0否 默认0 + */ + private Integer ruleFlag; + + /** + * 是否隐藏路由菜单: 0否,1是(默认值0) + */ + private boolean hidden; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /**按钮权限状态(0无效1有效)*/ + private java.lang.String status; + + /**alwaysShow*/ + private boolean alwaysShow; + + /*update_begin author:wuxianquan date:20190908 for:实体增加字段 */ + /** 外链菜单打开方式 0/内部打开 1/外部打开 */ + private boolean internalOrExternal; + /*update_end author:wuxianquan date:20190908 for:实体增加字段 */ + + public SysPermission() { + + } + public SysPermission(boolean index) { + if(index) { + this.id = "9502685863ab87f0ad1134142788a385"; + this.name="首页"; + this.component="dashboard/Analysis"; + this.componentName="dashboard-analysis"; + this.url="/dashboard/analysis"; + this.icon="home"; + this.menuType=0; + this.sortNo=0.0; + this.ruleFlag=0; + this.delFlag=0; + this.alwaysShow=false; + this.route=true; + this.keepAlive=true; + this.leaf=true; + this.hidden=false; + } + + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermissionDataRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermissionDataRule.java new file mode 100644 index 00000000..f6d16cf7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysPermissionDataRule.java @@ -0,0 +1,83 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 菜单权限规则表 + *

+ * + * @Author huangzhilin + * @since 2019-03-29 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysPermissionDataRule implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 对应的菜单id + */ + private String permissionId; + + /** + * 规则名称 + */ + private String ruleName; + + /** + * 字段 + */ + private String ruleColumn; + + /** + * 条件 + */ + private String ruleConditions; + + /** + * 规则值 + */ + private String ruleValue; + + /** + * 状态值 1有效 0无效 + */ + private String status; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 修改时间 + */ + private Date updateTime; + + /** + * 修改人 + */ + private String updateBy; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java new file mode 100644 index 00000000..c5ea1029 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRole.java @@ -0,0 +1,82 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.Date; + +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 角色表 + *

+ * + * @Author scott + * @since 2018-12-19 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysRole implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 角色名称 + */ + @Excel(name="角色名",width=15) + private String roleName; + + /** + * 角色编码 + */ + @Excel(name="角色编码",width=15) + private String roleCode; + + /** + * 描述 + */ + @Excel(name="描述",width=60) + private String description; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRolePermission.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRolePermission.java new file mode 100644 index 00000000..57d32076 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysRolePermission.java @@ -0,0 +1,71 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +/** + *

+ * 角色权限表 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysRolePermission implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 角色id + */ + private String roleId; + + /** + * 权限id + */ + private String permissionId; + + /** + * 数据权限 + */ + private String dataRuleIds; + + /** + * 操作时间 + */ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date operateDate; + + /** + * 操作ip + */ + private String operateIp; + + public SysRolePermission() { + } + + public SysRolePermission(String roleId, String permissionId) { + this.roleId = roleId; + this.permissionId = permissionId; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java new file mode 100644 index 00000000..6c561974 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysThirdAccount.java @@ -0,0 +1,63 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 第三方登录账号表 + * @Author: jero-boot + * @Date: 2020-11-17 + * @Version: V1.0 + */ +@Data +@TableName("sys_third_account") +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@ApiModel(value="sys_third_account对象", description="第三方登录账号表") +public class SysThirdAccount { + + /**编号*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "编号") + private java.lang.String id; + /**第三方登录id*/ + @Excel(name = "第三方登录id", width = 15) + @ApiModelProperty(value = "第三方登录id") + private java.lang.String sysUserId; + /**登录来源*/ + @Excel(name = "登录来源", width = 15) + @ApiModelProperty(value = "登录来源") + private java.lang.String thirdType; + /**头像*/ + @Excel(name = "头像", width = 15) + @ApiModelProperty(value = "头像") + private java.lang.String avatar; + /**状态(1-正常,2-冻结)*/ + @Excel(name = "状态(1-正常,2-冻结)", width = 15) + @ApiModelProperty(value = "状态(1-正常,2-冻结)") + private java.lang.Integer status; + /**删除状态(0-正常,1-已删除)*/ + @Excel(name = "删除状态(0-正常,1-已删除)", width = 15) + @ApiModelProperty(value = "删除状态(0-正常,1-已删除)") + private java.lang.Integer delFlag; + /**真实姓名*/ + @Excel(name = "真实姓名", width = 15) + @ApiModelProperty(value = "真实姓名") + private java.lang.String realname; + /**真实姓名*/ + @Excel(name = "真实姓名", width = 15) + @ApiModelProperty(value = "真实姓名") + private java.lang.String thirdUserUuid; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java new file mode 100644 index 00000000..3dbe88c0 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUser.java @@ -0,0 +1,189 @@ +package com.jero.modules.system.entity; + +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.jero.common.aspect.annotation.Dict; +import com.jero.modules.system.volid.group.CreateGroup; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serializable; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + *

+ * 用户表 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 登录账号 + */ + @Excel(name = "登录账号", width = 15) + @NotBlank(message = "账号不能为空") + @Size(max = 50,message = "账号最长为50") + private String username; + + /** + * 真实姓名 + */ + @Excel(name = "真实姓名", width = 15) + @NotBlank(message = "姓名不能为空") + @Size(max = 50,message = "姓名最长为50") + private String realname; + + /** + * 密码 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @NotBlank(message = "密码不能为空",groups = CreateGroup.class) + private String password; + + /** + * md5密码盐 + */ + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + private String salt; + + /** + * 头像 + */ + @Excel(name = "头像", width = 15,type = 2) + private String avatar; + + /** + * 生日 + */ + @Excel(name = "生日", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern = "yyyy-MM-dd") + private Date birthday; + + /** + * 性别(1:男 2:女) + */ + @Excel(name = "性别", width = 15,dicCode="sex") + @Dict(dicCode = "sex") + private Integer sex; + + /** + * 电子邮箱 + */ + @Excel(name = "电子邮箱", width = 15) + @Email(message = "电子邮箱格式不正确") + private String email; + + /** + * 电话 + */ + @Excel(name = "电话", width = 15) + private String phone; + + /** + * 部门code(当前选择登录部门) + */ + private String orgCode; + + /**部门名称*/ + private transient String orgCodeTxt; + + /** + * 状态(1:正常 2:冻结 ) + */ + @Excel(name = "状态", width = 15,dicCode="user_status") + @Dict(dicCode = "user_status") + private Integer status; + + /** + * 删除状态(0,正常,1已删除) + */ + @Excel(name = "删除状态", width = 15,dicCode="del_flag") + @TableLogic + private Integer delFlag; + + /** + * 工号,唯一键 + */ + @Excel(name = "工号", width = 15) + private String workNo; + + /** + * 座机号 + */ + @Excel(name = "座机号", width = 15) + private String telephone; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + /** + * 同步工作流引擎1同步0不同步 + */ + private Integer activitiSync; + + /** + * 身份(0 普通成员 1 上级) + */ + @Excel(name="(1普通成员 2上级)",width = 15) + private Integer userIdentity; + + /** + * 负责部门 + */ + @Excel(name="负责部门",width = 15,dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") + @Dict(dictTable ="sys_depart",dicText = "depart_name",dicCode = "id") + private String departIds; + + /** + * 多租户id配置,编辑用户的时候设置 + */ + private String relTenantIds; + + /**设备id uniapp推送用*/ + private String clientId; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java new file mode 100644 index 00000000..5d1889f9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserAgent.java @@ -0,0 +1,74 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: 用户代理人设置 + * @Author: jero-boot + * @Date: 2019-04-17 + * @Version: V1.0 + */ +@Data +@TableName("sys_user_agent") +public class SysUserAgent implements Serializable { + private static final long serialVersionUID = 1L; + + /**序号*/ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /**用户名*/ + @Excel(name = "用户名", width = 15) + private java.lang.String userName; + /**代理人用户名*/ + @Excel(name = "代理人用户名", width = 15) + private java.lang.String agentUserName; + /**代理开始时间*/ + @Excel(name = "代理开始时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date startTime; + /**代理结束时间*/ + @Excel(name = "代理结束时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date endTime; + /**状态0无效1有效*/ + @Excel(name = "状态0无效1有效", width = 15) + private java.lang.String status; + /**创建人名称*/ + @Excel(name = "创建人名称", width = 15) + private java.lang.String createName; + /**创建人登录名称*/ + @Excel(name = "创建人登录名称", width = 15) + private java.lang.String createBy; + /**创建日期*/ + @Excel(name = "创建日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /**更新人名称*/ + @Excel(name = "更新人名称", width = 15) + private java.lang.String updateName; + /**更新人登录名称*/ + @Excel(name = "更新人登录名称", width = 15) + private java.lang.String updateBy; + /**更新日期*/ + @Excel(name = "更新日期", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /**所属部门*/ + @Excel(name = "所属部门", width = 15) + private java.lang.String sysOrgCode; + /**所属公司*/ + @Excel(name = "所属公司", width = 15) + private java.lang.String sysCompanyCode; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserDepart.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserDepart.java new file mode 100644 index 00000000..6ac851a4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserDepart.java @@ -0,0 +1,33 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; + +import lombok.Data; +@Data +@TableName("sys_user_depart") +public class SysUserDepart implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键id*/ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /**用户id*/ + private String userId; + /**部门id*/ + private String depId; + public SysUserDepart(String id, String userId, String depId) { + super(); + this.id = id; + this.userId = userId; + this.depId = depId; + } + + public SysUserDepart(String id, String departId) { + this.userId = id; + this.depId = departId; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserRole.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserRole.java new file mode 100644 index 00000000..0108d9d3 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysUserRole.java @@ -0,0 +1,50 @@ +package com.jero.modules.system.entity; + +import java.io.Serializable; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 用户角色表 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysUserRole implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(type = IdType.ASSIGN_ID) + private String id; + + /** + * 用户id + */ + private String userId; + + /** + * 角色id + */ + private String roleId; + + public SysUserRole() { + } + + public SysUserRole(String userId, String roleId) { + this.userId = userId; + this.roleId = roleId; + } + + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementMapper.java new file mode 100644 index 00000000..1990848b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementMapper.java @@ -0,0 +1,22 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysAnnouncement; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * @Description: 系统通告表 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +public interface SysAnnouncementMapper extends BaseMapper { + + + List querySysCementListByUserId(Page page, @Param("userId")String userId,@Param("msgCategory")String msgCategory); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementSendMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementSendMapper.java new file mode 100644 index 00000000..bf116af7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysAnnouncementSendMapper.java @@ -0,0 +1,31 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.model.AnnouncementSendModel; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +/** + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +public interface SysAnnouncementSendMapper extends BaseMapper { + + public List queryByUserId(@Param("userId") String userId); + + /** + * @功能:获取我的消息 + * @param announcementSendModel + * @param pageSize + * @param pageNo + * @return + */ + public List getMyAnnouncementSendList(Page page,@Param("announcementSendModel") AnnouncementSendModel announcementSendModel); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCategoryMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCategoryMapper.java new file mode 100644 index 00000000..594f7af9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCategoryMapper.java @@ -0,0 +1,32 @@ +package com.jero.modules.system.mapper; + +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.model.TreeSelectModel; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 分类字典 + * @Author: jero-boot + * @Date: 2019-05-29 + * @Version: V1.0 + */ +public interface SysCategoryMapper extends BaseMapper { + + /** + * 根据父级ID查询树节点数据 + * @param pid + * @return + */ + public List queryListByPid(@Param("pid") String pid,@Param("query") Map query); + + @Select("SELECT ID FROM sys_category WHERE CODE = #{code,jdbcType=VARCHAR}") + public String queryIdByCode(@Param("code") String code); + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCheckRuleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCheckRuleMapper.java new file mode 100644 index 00000000..c3ad45f9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysCheckRuleMapper.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysCheckRule; + +/** + * @Description: 编码校验规则 + * @Author: jero-boot + * @Date: 2020-02-04 + * @Version: V1.0 + */ +public interface SysCheckRuleMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysConfusionMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysConfusionMapper.java new file mode 100644 index 00000000..8654beef --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysConfusionMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysConfusion; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 混淆表 + * @Author: jero-boot + * @Date: 2021-08-05 + * @Version: V1.0 + */ +public interface SysConfusionMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataLogMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataLogMapper.java new file mode 100644 index 00000000..adc1824f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataLogMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysDataLog; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface SysDataLogMapper extends BaseMapper{ + /** + * 通过表名及数据Id获取最大版本 + * @param tableName + * @param dataId + * @return + */ + public String queryMaxDataVer(@Param("tableName") String tableName,@Param("dataId") String dataId); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataSourceMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataSourceMapper.java new file mode 100644 index 00000000..50d2bbf7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDataSourceMapper.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysDataSource; + +/** + * @Description: 多数据源管理 + * @Author: jero-boot + * @Date: 2019-12-25 + * @Version: V1.0 + */ +public interface SysDataSourceMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartMapper.java new file mode 100644 index 00000000..1be8f49d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartMapper.java @@ -0,0 +1,53 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Select; +import com.jero.modules.system.entity.SysDepart; +import org.springframework.data.repository.query.Param; + +import java.util.List; + +/** + *

+ * 部门 Mapper 接口 + *

+ * + * @Author: Steve + * @Since: 2019-01-22 + */ +public interface SysDepartMapper extends BaseMapper { + + /** + * 根据用户ID查询部门集合 + */ + public List queryUserDeparts(@Param("userId") String userId); + + /** + * 根据用户名查询部门 + * + * @param username + * @return + */ + public List queryDepartsByUsername(@Param("username") String username); + + @Select("select id from sys_depart where org_code=#{orgCode}") + public String queryDepartIdByOrgCode(@Param("orgCode") String orgCode); + + @Select("select id,parent_id from sys_depart where id=#{departId}") + public SysDepart getParentDepartId(@Param("departId") String departId); + + /** + * 根据部门Id查询,当前和下级所有部门IDS + * @param departId + * @return + */ + List getSubDepIdsByDepId(@Param("departId") String departId); + + /** + * 根据部门编码获取部门下所有IDS + * @param orgCodes + * @return + */ + List getSubDepIdsByOrgCodes(@org.apache.ibatis.annotations.Param("orgCodes") String[] orgCodes); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java new file mode 100644 index 00000000..6014f30f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartPermissionMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysDepartPermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 部门权限表 + * @Author: jero-boot + * @Date: 2020-02-11 + * @Version: V1.0 + */ +public interface SysDepartPermissionMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleMapper.java new file mode 100644 index 00000000..f828560b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleMapper.java @@ -0,0 +1,23 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysDepartRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 部门角色 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +public interface SysDepartRoleMapper extends BaseMapper { + /** + * 根据用户id,部门id查询可授权所有部门角色 + * @param orgCode + * @param userId + * @return + */ + public List queryDeptRoleByDeptAndUser(@Param("orgCode") String orgCode, @Param("userId") String userId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRolePermissionMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRolePermissionMapper.java new file mode 100644 index 00000000..66f1f8c9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRolePermissionMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 部门角色权限 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +public interface SysDepartRolePermissionMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleUserMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleUserMapper.java new file mode 100644 index 00000000..d3796d3d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDepartRoleUserMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysDepartRoleUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 部门角色人员信息 + * @Author: jero-boot + * @Date: 2020-02-13 + * @Version: V1.0 + */ +public interface SysDepartRoleUserMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictItemMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictItemMapper.java new file mode 100644 index 00000000..fd73fb93 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictItemMapper.java @@ -0,0 +1,20 @@ +package com.jero.modules.system.mapper; + +import org.apache.ibatis.annotations.Select; +import com.jero.modules.system.entity.SysDictItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +import java.util.List; + +/** + *

+ * Mapper 接口 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +public interface SysDictItemMapper extends BaseMapper { + @Select("SELECT * FROM sys_dict_item WHERE DICT_ID = #{mainId} order by sort_order asc, item_value asc") + public List selectItemsByMainId(String mainId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java new file mode 100644 index 00000000..5ad60700 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysDictMapper.java @@ -0,0 +1,154 @@ +package com.jero.modules.system.mapper; + +import java.util.List; +import java.util.Map; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.ResultType; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.DictQuery; +import com.jero.modules.system.entity.SysDict; +import com.jero.modules.system.model.DuplicateCheckVo; +import com.jero.modules.system.model.TreeSelectModel; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 字典表 Mapper 接口 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +public interface SysDictMapper extends BaseMapper { + + /** + * 重复检查SQL + * @return + */ + public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo); + + public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo); + + public List queryDictItemsByCode(@Param("code") String code); + + @Deprecated + public List queryTableDictItemsByCode(@Param("table") String table,@Param("text") String text,@Param("code") String code); + + @Deprecated + public List queryTableDictItemsByCodeAndFilter(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("filterSql") String filterSql); + + @Deprecated + @Select("select ${key} as \"label\",${value} as \"value\" from ${table}") + public List> getDictByTableNgAlain(@Param("table") String table, @Param("key") String key, @Param("value") String value); + + public String queryDictTextByKey(@Param("code") String code,@Param("key") String key); + + @Deprecated + public String queryTableDictTextByKey(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("key") String key); + + @Deprecated + public List queryTableDictByKeys(@Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keyArray") String[] keyArray); + + /** + * 查询所有部门 作为字典信息 id -->value,departName -->text + * @return + */ + public List queryAllDepartBackDictModel(); + + /** + * 查询所有用户 作为字典信息 username -->value,realname -->text + * @return + */ + public List queryAllUserBackDictModel(); + + /** + * 通过关键字查询出字典表 + * @param table + * @param text + * @param code + * @param keyword + * @return + */ + @Deprecated + public List queryTableDictItems(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("keyword") String keyword); + + + /** + * 通过关键字查询出字典表 + * @param page + * @param table + * @param text + * @param code + * @param keyword + * @return + */ + IPage queryTableDictItems(Page page, @Param("table") String table, @Param("text") String text, @Param("code") String code, @Param("keyword") String keyword); + + /** + * 根据表名、显示字段名、存储字段名 查询树 + * @param table + * @param text + * @param code + * @param pid + * @param hasChildField + * @return + */ + List queryTreeList(@Param("query") String query,@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("pidField") String pidField,@Param("pid") String pid,@Param("hasChildField") String hasChildField); + + /** + * 根据表名、显示字段名、存储字段名拼接树结构 + * @param table + * @param text + * @param code + * @return + */ + List queryTreeDataByKeyword(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("pidField") String pidField); + + /** + * 根据表名、显示字段名、存储字段名、自身ID查询 + * @param id + * @param table + * @param text + * @param code + * @return + */ + TreeSelectModel queryTreeDataItemById(@Param("id") String id,@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("pidField") String pidField); + + /** + * 删除 + * @param id + */ + @Select("delete from sys_dict where id = #{id}") + public void deleteOneById(@Param("id") String id); + + /** + * 查询被逻辑删除的数据 + * @return + */ + @Select("select * from sys_dict where del_flag = 1") + public List queryDeleteList(); + + /** + * 修改状态值 + * @param delFlag + * @param id + */ + @Update("update sys_dict set del_flag = #{flag,jdbcType=INTEGER} where id = #{id,jdbcType=VARCHAR}") + public void updateDictDelFlag(@Param("flag") int delFlag, @Param("id") String id); + + + /** + * 分页查询字典表数据 + * @param page + * @param query + * @return + */ + @Deprecated + public Page queryDictTablePageList(Page page, @Param("query") DictQuery query); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysFillRuleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysFillRuleMapper.java new file mode 100644 index 00000000..d19df5f3 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysFillRuleMapper.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysFillRule; + +/** + * @Description: 填值规则 + * @Author: jero-boot + * @Date: 2019-11-07 + * @Version: V1.0 + */ +public interface SysFillRuleMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysGatewayRouteMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysGatewayRouteMapper.java new file mode 100644 index 00000000..76b2ed66 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysGatewayRouteMapper.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.entity.SysGatewayRoute; + +/** + * @Description: gateway路由管理 + * @Author: jero-boot + * @Date: 2020-05-26 + * @Version: V1.0 + */ +public interface SysGatewayRouteMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysLogMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysLogMapper.java new file mode 100644 index 00000000..847f1fac --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysLogMapper.java @@ -0,0 +1,57 @@ +package com.jero.modules.system.mapper; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysLog; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 系统日志表 Mapper 接口 + *

+ * + * @Author zhangweijian + * @since 2018-12-26 + */ +public interface SysLogMapper extends BaseMapper { + + /** + * @功能:清空所有日志记录 + */ + public void removeAll(); + + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); + + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + /** + * 获取系统今日访问次数 + * + * @return Long + */ + Long findTodayVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); + + /** + * 获取系统今日访问 IP数 + * + * @return Long + */ + Long findTodayIp(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + /** + * 首页:根据时间统计访问数量/ip数量 + * @param dayStart + * @param dayEnd + * @return + */ + List> findVisitCount(@Param("dayStart") Date dayStart, @Param("dayEnd") Date dayEnd, @Param("dbType") String dbType); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionDataRuleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionDataRuleMapper.java new file mode 100644 index 00000000..9cf62908 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionDataRuleMapper.java @@ -0,0 +1,28 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysPermissionDataRule; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 权限规则 Mapper 接口 + *

+ * + * @Author huangzhilin + * @since 2019-04-01 + */ +public interface SysPermissionDataRuleMapper extends BaseMapper { + + /** + * 根据用户名和权限id查询 + * @param username + * @param permissionId + * @return + */ + public List queryDataRuleIds(@Param("username") String username,@Param("permissionId") String permissionId); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionMapper.java new file mode 100644 index 00000000..16b5e63f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysPermissionMapper.java @@ -0,0 +1,57 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.model.TreeModel; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 菜单权限表 Mapper 接口 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface SysPermissionMapper extends BaseMapper { + /** + * 通过父菜单ID查询子菜单 + * @param parentId + * @return + */ + public List queryListByParentId(@Param("parentId") String parentId); + + /** + * 根据用户查询用户权限 + */ + public List queryByUser(@Param("username") String username); + + /** + * 修改菜单状态字段: 是否子节点 + */ + @Update("update sys_permission set is_leaf=#{leaf} where id = #{id}") + public int setMenuLeaf(@Param("id") String id,@Param("leaf") int leaf); + + /** + * 获取模糊匹配规则的数据权限URL + */ + @Select("SELECT url FROM sys_permission WHERE del_flag = 0 and menu_type = 2 and url like '%*%'") + public List queryPermissionUrlWithStar(); + + + /** + * 根据用户账号查询菜单权限 + * @param sysPermission + * @param username + * @return + */ + public int queryCountByUsername(@Param("username") String username, @Param("permission") SysPermission sysPermission); + + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java new file mode 100644 index 00000000..cd2b9365 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRoleMapper.java @@ -0,0 +1,37 @@ +package com.jero.modules.system.mapper; + +import org.apache.ibatis.annotations.Delete; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Update; +import com.jero.modules.system.entity.SysRole; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 角色表 Mapper 接口 + *

+ * + * @Author scott + * @since 2018-12-19 + */ +public interface SysRoleMapper extends BaseMapper { + + /** + * @Author scott + * @Date 2019/12/13 16:12 + * @Description: 删除角色与用户关系 + */ + @Delete("delete from sys_user_role where role_id = #{roleId}") + void deleteRoleUserRelation(@Param("roleId") String roleId); + + + /** + * @Author scott + * @Date 2019/12/13 16:12 + * @Description: 删除角色与权限关系 + */ + @Delete("delete from sys_role_permission where role_id = #{roleId}") + void deleteRolePermissionRelation(@Param("roleId") String roleId); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRolePermissionMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRolePermissionMapper.java new file mode 100644 index 00000000..e80ba11d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysRolePermissionMapper.java @@ -0,0 +1,16 @@ +package com.jero.modules.system.mapper; + +import com.jero.modules.system.entity.SysRolePermission; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 角色权限表 Mapper 接口 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface SysRolePermissionMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java new file mode 100644 index 00000000..03313966 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysThirdAccountMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysThirdAccount; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 第三方登录账号表 + * @Author: jero-boot + * @Date: 2020-11-17 + * @Version: V1.0 + */ +public interface SysThirdAccountMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java new file mode 100644 index 00000000..9036237e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserAgentMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysUserAgent; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 用户代理人设置 + * @Author: jero-boot + * @Date: 2019-04-17 + * @Version: V1.0 + */ +public interface SysUserAgentMapper extends BaseMapper { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java new file mode 100644 index 00000000..c38501d3 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserDepartMapper.java @@ -0,0 +1,11 @@ +package com.jero.modules.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysUserDepart; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface SysUserDepartMapper extends BaseMapper{ + + List getUserDepartByUid(@Param("userId") String userId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java new file mode 100644 index 00000000..0032e1c0 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserMapper.java @@ -0,0 +1,142 @@ +package com.jero.modules.system.mapper; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import com.jero.modules.system.entity.SysUser; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.system.model.SysUserSysDepartModel; +import com.jero.modules.system.vo.SysUserDepVo; + +import java.util.List; + +/** + *

+ * 用户表 Mapper 接口 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +public interface SysUserMapper extends BaseMapper { + /** + * 通过用户账号查询用户信息 + * @param username + * @return + */ + public SysUser getUserByName(@Param("username") String username); + + /** + * 根据部门Id查询用户信息 + * @param page + * @param departId + * @return + */ + IPage getUserByDepId(Page page, @Param("departId") String departId, @Param("username") String username); + + /** + * 根据用户Ids,查询用户所属部门名称信息 + * @param userIds + * @return + */ + List getDepNamesByUserIds(@Param("userIds")List userIds); + + /** + * 根据部门Ids,查询部门下用户信息 + * @param page + * @param departIds + * @return + */ + IPage getUserByDepIds(Page page, @Param("departIds") List departIds, @Param("username") String username); + + /** + * 根据角色Id查询用户信息 + * @param page + * @param + * @return + */ + IPage getUserByRoleId(Page page, @Param("roleId") String roleId, @Param("username") String username); + + /** + * 根据用户名设置部门ID + * @param username + * @param departId + */ + void updateUserDepart(@Param("username") String username,@Param("orgCode") String orgCode); + + /** + * 根据手机号查询用户信息 + * @param phone + * @return + */ + public SysUser getUserByPhone(@Param("phone") String phone); + + + /** + * 根据邮箱查询用户信息 + * @param email + * @return + */ + public SysUser getUserByEmail(@Param("email")String email); + + /** + * 根据 orgCode 查询用户,包括子部门下的用户 + * + * @param page 分页对象, xml中可以从里面进行取值,传递参数 Page 即自动分页,必须放在第一位(你可以继承Page实现自己的分页对象) + * @param orgCode + * @param userParams 用户查询条件,可为空 + * @return + */ + List getUserByOrgCode(IPage page, @Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); + + + /** + * 查询 getUserByOrgCode 的Total + * + * @param orgCode + * @param userParams 用户查询条件,可为空 + * @return + */ + Integer getUserByOrgCodeTotal(@Param("orgCode") String orgCode, @Param("userParams") SysUser userParams); + + /** + * @Author scott + * @Date 2019/12/13 16:10 + * @Description: 批量删除角色与用户关系 + */ + void deleteBathRoleUserRelation(@Param("roleIdArray") String[] roleIdArray); + + /** + * @Author scott + * @Date 2019/12/13 16:10 + * @Description: 批量删除角色与权限关系 + */ + void deleteBathRolePermissionRelation(@Param("roleIdArray") String[] roleIdArray); + + /** + * 查询被逻辑删除的用户 + */ + List selectLogicDeleted(@Param(Constants.WRAPPER) Wrapper wrapper); + + /** + * 还原被逻辑删除的用户 + */ + int revertLogicDeleted(@Param("userIds") String userIds, @Param("entity") SysUser entity); + + /** + * 彻底删除被逻辑删除的用户 + */ + int deleteLogicDeleted(@Param("userIds") String userIds); + + /** 更新空字符串为null【此写法有sql注入风险,禁止随便用】 */ + int updateNullByEmptyString(@Param("fieldName") String fieldName); + + /** + * 根据部门Ids,查询部门下用户信息 + * @param departIds + * @return + */ + List queryByDepIds(@Param("departIds")List departIds,@Param("username") String username); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserRoleMapper.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserRoleMapper.java new file mode 100644 index 00000000..91e0e272 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,25 @@ +package com.jero.modules.system.mapper; + +import java.util.List; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import com.jero.modules.system.entity.SysUserRole; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 用户角色表 Mapper 接口 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface SysUserRoleMapper extends BaseMapper { + + @Select("select role_code from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") + List getRoleByUserName(@Param("username") String username); + + @Select("select id from sys_role where id in (select role_id from sys_user_role where user_id = (select id from sys_user where username=#{username}))") + List getRoleIdByUserName(@Param("username") String username); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementMapper.xml new file mode 100644 index 00000000..7fd44a61 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml new file mode 100644 index 00000000..de13e8b6 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysAnnouncementSendMapper.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCategoryMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCategoryMapper.xml new file mode 100644 index 00000000..669f35b8 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCategoryMapper.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCheckRuleMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCheckRuleMapper.xml new file mode 100644 index 00000000..102e6e77 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysCheckRuleMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysConfusionMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysConfusionMapper.xml new file mode 100644 index 00000000..101a4a7a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysConfusionMapper.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataLogMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataLogMapper.xml new file mode 100644 index 00000000..9b85dcc4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataLogMapper.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataSourceMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataSourceMapper.xml new file mode 100644 index 00000000..0188be81 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDataSourceMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartMapper.xml new file mode 100644 index 00000000..960893dd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartMapper.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartPermissionMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartPermissionMapper.xml new file mode 100644 index 00000000..b8517451 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartPermissionMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleMapper.xml new file mode 100644 index 00000000..ba2e85fc --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRolePermissionMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRolePermissionMapper.xml new file mode 100644 index 00000000..38a6e1df --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRolePermissionMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleUserMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleUserMapper.xml new file mode 100644 index 00000000..acde2573 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDepartRoleUserMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictItemMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictItemMapper.xml new file mode 100644 index 00000000..b8652495 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictItemMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml new file mode 100644 index 00000000..a95bedd2 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysFillRuleMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysFillRuleMapper.xml new file mode 100644 index 00000000..c8d6d520 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysFillRuleMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGatewayRouteMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGatewayRouteMapper.xml new file mode 100644 index 00000000..ecf7e19e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysGatewayRouteMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysLogMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysLogMapper.xml new file mode 100644 index 00000000..a5385300 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysLogMapper.xml @@ -0,0 +1,69 @@ + + + + + + + DELETE FROM sys_log + + + + + + + + + + + + + + + diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionDataRuleMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionDataRuleMapper.xml new file mode 100644 index 00000000..9efbab1f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionDataRuleMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionMapper.xml new file mode 100644 index 00000000..7afc17d7 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysPermissionMapper.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysThirdAccountMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysThirdAccountMapper.xml new file mode 100644 index 00000000..9598cc57 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysThirdAccountMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserAgentMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserAgentMapper.xml new file mode 100644 index 00000000..6e39cd57 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserAgentMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml new file mode 100644 index 00000000..65af5072 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserDepartMapper.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml new file mode 100644 index 00000000..4166c093 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysUserMapper.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + UPDATE sys_user SET org_code = #{orgCode} where username = #{username} + + + + + + + + + + + FROM + sys_depart + INNER JOIN sys_user_depart ON sys_user_depart.dep_id = sys_depart.id + INNER JOIN sys_user ON sys_user.id = sys_user_depart.user_id + WHERE + sys_user.del_flag = 0 AND sys_depart.org_code LIKE '${orgCode}%' + + + + AND sys_user.realname LIKE concat(concat('%',#{userParams.realname}),'%') + + + AND sys_user.work_no LIKE concat(concat('%',#{userParams.workNo}),'%') + + + + + + + + + + + + + delete from sys_user_role + where role_id in + + #{id} + + + + + delete from sys_role_permission + where role_id in + + #{id} + + + + + + + + + UPDATE + sys_user + SET + del_flag = 0, + update_by = #{entity.updateBy}, + update_time = #{entity.updateTime} + WHERE + del_flag = 1 + AND id IN (${userIds}) + + + + + DELETE FROM sys_user WHERE del_flag = 1 AND id IN (${userIds}) + + + + + UPDATE sys_user SET ${fieldName} = NULL WHERE ${fieldName} = '' + + + + + \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java new file mode 100644 index 00000000..f6ba4956 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/AnnouncementSendModel.java @@ -0,0 +1,80 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; + +import org.springframework.format.annotation.DateTimeFormat; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; + +import lombok.Data; + +/** + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +@Data +public class AnnouncementSendModel implements Serializable { + private static final long serialVersionUID = 1L; + + /**id*/ + @TableId(type = IdType.ASSIGN_ID) + private java.lang.String id; + /**通告id*/ + private java.lang.String anntId; + /**用户id*/ + private java.lang.String userId; + /**标题*/ + private java.lang.String titile; + /**内容*/ + private java.lang.String msgContent; + /**发布人*/ + private java.lang.String sender; + /**优先级(L低,M中,H高)*/ + private java.lang.String priority; + /**阅读状态*/ + private java.lang.String readFlag; + /**发布时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private java.util.Date sendTime; + /**页数*/ + private java.lang.Integer pageNo; + /**大小*/ + private java.lang.Integer pageSize; + /** + * 消息类型1:通知公告2:系统消息 + */ + private java.lang.String msgCategory; + /** + * 业务id + */ + private java.lang.String busId; + /** + * 业务类型 + */ + private java.lang.String busType; + /** + * 打开方式 组件:component 路由:url + */ + private java.lang.String openType; + /** + * 组件/路由 地址 + */ + private java.lang.String openPage; + + /** + * 业务类型查询(0.非bpm业务) + */ + private java.lang.String bizSource; + + /** + * 摘要 + */ + private java.lang.String msgAbstract; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java new file mode 100644 index 00000000..d3192850 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DepartIdModel.java @@ -0,0 +1,93 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.jero.common.system.vo.SysDepartTreeModel; +import com.jero.modules.system.entity.SysDepart; + +/** + *

+ * 部门表 封装树结构的部门的名称的实体类 + *

+ * + * @Author Steve + * @Since 2019-01-22 + * + */ +public class DepartIdModel implements Serializable { + + private static final long serialVersionUID = 1L; + + // 主键ID + private String key; + + // 主键ID + private String value; + + // 部门名称 + private String title; + + List children = new ArrayList<>(); + + /** + * 将SysDepartTreeModel的部分数据放在该对象当中 + * @param treeModel + * @return + */ + public DepartIdModel convert(SysDepartTreeModel treeModel) { + this.key = treeModel.getId(); + this.value = treeModel.getId(); + this.title = treeModel.getDepartName(); + return this; + } + + /** + * 该方法为用户部门的实现类所使用 + * @param sysDepart + * @return + */ + public DepartIdModel convertByUserDepart(SysDepart sysDepart) { + this.key = sysDepart.getId(); + this.value = sysDepart.getId(); + this.title = sysDepart.getDepartName(); + return this; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public static long getSerialVersionUID() { + return serialVersionUID; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DuplicateCheckVo.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DuplicateCheckVo.java new file mode 100644 index 00000000..affcc0c4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/DuplicateCheckVo.java @@ -0,0 +1,53 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @Title: DuplicateCheckVo + * @Description: 重复校验VO + * @Author 张代浩 + * @Date 2019-03-25 + * @Version V1.0 + */ +@Data +@ApiModel(value="重复校验数据模型",description="重复校验数据模型") +public class DuplicateCheckVo implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 表名 + */ + @NotBlank(message = "混淆code不能为空") + @ApiModelProperty(value="混淆code",name="confusionCode",example="id") + private String confusionCode; + + /** + * 表名 + */ + @ApiModelProperty(value="表名",name="tableName",example="sys_log") + private String tableName; + + /** + * 字段名 + */ + @ApiModelProperty(value="字段名",name="fieldName",example="id") + private String fieldName; + + /** + * 字段值 + */ + @ApiModelProperty(value="字段值",name="fieldVal",example="1000") + private String fieldVal; + + /** + * 数据ID + */ + @ApiModelProperty(value="数据ID",name="dataId",example="2000") + private String dataId; + +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysDictTree.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysDictTree.java new file mode 100644 index 00000000..99769d17 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysDictTree.java @@ -0,0 +1,96 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import java.util.Date; + +import com.jero.modules.system.entity.SysDict; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * 字典表 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class SysDictTree implements Serializable { + + private static final long serialVersionUID = 1L; + + private String key; + + private String title; + + /** + * id + */ + @TableId(type = IdType.ASSIGN_ID) + private String id; + /** + * 字典类型,0 string,1 number类型,2 boolean + * 前端js对stirng类型和number类型 boolean 类型敏感,需要区分。在select 标签匹配的时候会用到 + * 默认为string类型 + */ + private Integer type; + + /** + * 字典名称 + */ + private String dictName; + + /** + * 字典编码 + */ + private String dictCode; + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + public SysDictTree(SysDict node) { + this.id = node.getId(); + this.key = node.getId(); + this.title = node.getDictName(); + this.dictCode = node.getDictCode(); + this.description = node.getDescription(); + this.delFlag = node.getDelFlag(); + this.type = node.getType(); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysLoginModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysLoginModel.java new file mode 100644 index 00000000..212b43b5 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysLoginModel.java @@ -0,0 +1,64 @@ +package com.jero.modules.system.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * 登录表单 + * + * @Author scott + * @since 2019-01-18 + */ +@ApiModel(value="登录对象", description="登录对象") +public class SysLoginModel { + @ApiModelProperty(value = "账号") + private String username; + @ApiModelProperty(value = "密码") + private String password; + @ApiModelProperty(value = "验证码") + private String captcha; + @ApiModelProperty(value = "验证码key") + private String checkKey; + @ApiModelProperty(value = "RSA公钥") + private String rsaPublicKey; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getCaptcha() { + return captcha; + } + + public void setCaptcha(String captcha) { + this.captcha = captcha; + } + + public String getCheckKey() { + return checkKey; + } + + public void setCheckKey(String checkKey) { + this.checkKey = checkKey; + } + + public String getRsaPublicKey() { + return rsaPublicKey; + } + + public void setRsaPublicKey(String rsaPublicKey) { + this.rsaPublicKey = rsaPublicKey; + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java new file mode 100644 index 00000000..e66fab32 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysPermissionTree.java @@ -0,0 +1,394 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import com.jero.modules.system.entity.SysPermission; + +public class SysPermissionTree implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + private String key; + private String title; + + /** + * 父id + */ + private String parentId; + + /** + * 菜单名称 + */ + private String name; + + /** + * 菜单权限编码 + */ + private String perms; + /** + * 权限策略1显示2禁用 + */ + private String permsType; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 组件 + */ + private String component; + + /** + * 跳转网页链接 + */ + private String url; + + /** + * 一级菜单跳转地址 + */ + private String redirect; + + /** + * 菜单排序 + */ + private Double sortNo; + + /** + * 类型(0:一级菜单;1:子菜单 ;2:按钮权限) + */ + private Integer menuType; + + /** + * 是否叶子节点: 1:是 0:不是 + */ + private boolean isLeaf; + + /** + * 是否路由菜单: 0:不是 1:是(默认值1) + */ + private boolean route; + + + /** + * 是否路缓存页面: 0:不是 1:是(默认值1) + */ + private boolean keepAlive; + + + /** + * 描述 + */ + private String description; + + /** + * 删除状态 0正常 1已删除 + */ + private Integer delFlag; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /**alwaysShow*/ + private boolean alwaysShow; + /**是否隐藏路由菜单: 0否,1是(默认值0)*/ + private boolean hidden; + + /**按钮权限状态(0无效1有效)*/ + private java.lang.String status; + + /*update_begin author:wuxianquan date:20190908 for:model增加字段 */ + /** 外链菜单打开方式 0/内部打开 1/外部打开 */ + private boolean internalOrExternal; + /*update_end author:wuxianquan date:20190908 for:model增加字段 */ + + + public SysPermissionTree() { + } + + public SysPermissionTree(SysPermission permission) { + this.key = permission.getId(); + this.id = permission.getId(); + this.perms = permission.getPerms(); + this.permsType = permission.getPermsType(); + this.component = permission.getComponent(); + this.createBy = permission.getCreateBy(); + this.createTime = permission.getCreateTime(); + this.delFlag = permission.getDelFlag(); + this.description = permission.getDescription(); + this.icon = permission.getIcon(); + this.isLeaf = permission.isLeaf(); + this.menuType = permission.getMenuType(); + this.name = permission.getName(); + this.parentId = permission.getParentId(); + this.sortNo = permission.getSortNo(); + this.updateBy = permission.getUpdateBy(); + this.updateTime = permission.getUpdateTime(); + this.redirect = permission.getRedirect(); + this.url = permission.getUrl(); + this.hidden = permission.isHidden(); + this.route = permission.isRoute(); + this.keepAlive = permission.isKeepAlive(); + this.alwaysShow= permission.isAlwaysShow(); + /*update_begin author:wuxianquan date:20190908 for:赋值 */ + this.internalOrExternal = permission.isInternalOrExternal(); + /*update_end author:wuxianquan date:20190908 for:赋值 */ + this.title=permission.getName(); + if (!permission.isLeaf()) { + this.children = new ArrayList(); + } + this.status = permission.getStatus(); + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + private List children; + + public boolean isLeaf() { + return isLeaf; + } + + public void setLeaf(boolean leaf) { + isLeaf = leaf; + } + + public boolean isKeepAlive() { + return keepAlive; + } + + public void setKeepAlive(boolean keepAlive) { + this.keepAlive = keepAlive; + } + + public boolean isAlwaysShow() { + return alwaysShow; + } + + public void setAlwaysShow(boolean alwaysShow) { + this.alwaysShow = alwaysShow; + } + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public String getRedirect() { + return redirect; + } + + public void setRedirect(String redirect) { + this.redirect = redirect; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public boolean isHidden() { + return hidden; + } + + public void setHidden(boolean hidden) { + this.hidden = hidden; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getComponent() { + return component; + } + + public void setComponent(String component) { + this.component = component; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Double getSortNo() { + return sortNo; + } + + public void setSortNo(Double sortNo) { + this.sortNo = sortNo; + } + + public Integer getMenuType() { + return menuType; + } + + public void setMenuType(Integer menuType) { + this.menuType = menuType; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public boolean isRoute() { + return route; + } + + public void setRoute(boolean route) { + this.route = route; + } + + public Integer getDelFlag() { + return delFlag; + } + + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } + + public String getCreateBy() { + return createBy; + } + + public void setCreateBy(String createBy) { + this.createBy = createBy; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getPerms() { + return perms; + } + + public void setPerms(String perms) { + this.perms = perms; + } + + public boolean getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getPermsType() { + return permsType; + } + + public void setPermsType(String permsType) { + this.permsType = permsType; + } + + public java.lang.String getStatus() { + return status; + } + + public void setStatus(java.lang.String status) { + this.status = status; + } + + /*update_begin author:wuxianquan date:20190908 for:get set方法 */ + public boolean isInternalOrExternal() { + return internalOrExternal; + } + + public void setInternalOrExternal(boolean internalOrExternal) { + this.internalOrExternal = internalOrExternal; + } + /*update_end author:wuxianquan date:20190908 for:get set 方法 */ +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java new file mode 100644 index 00000000..3236702f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/SysUserSysDepartModel.java @@ -0,0 +1,26 @@ +package com.jero.modules.system.model; + +import lombok.Data; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; + +/** + * 包含 SysUser 和 SysDepart 的 Model + * + * @author sunjianlei + */ +@Data +public class SysUserSysDepartModel { + + private String id; + private String realname; + private String workNo; + private String post; + private String telephone; + private String email; + private String phone; + private String departId; + private String departName; + private String avatar; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/ThirdLoginModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/ThirdLoginModel.java new file mode 100644 index 00000000..97f7457e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/ThirdLoginModel.java @@ -0,0 +1,72 @@ +package com.jero.modules.system.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 第三方登录 信息存储 + */ +@Data +public class ThirdLoginModel implements Serializable { + private static final long serialVersionUID = 4098628709290780891L; + + /** + * 第三方登录 来源 + */ + private String source; + + /** + * 第三方登录 uuid + */ + private String uuid; + + /** + * 第三方登录 username + */ + private String username; + + /** + * 第三方登录 头像 + */ + private String avatar; + + /** + * 账号 后缀第三方登录 防止账号重复 + */ + private String suffix; + + /** + * 操作码 防止被攻击 + */ + private String operateCode; + + public ThirdLoginModel(){ + + } + + /** + * 构造器 + * @param source + * @param uuid + * @param username + * @param avatar + */ + public ThirdLoginModel(String source,String uuid,String username,String avatar){ + this.source = source; + this.uuid = uuid; + this.username = username; + this.avatar = avatar; + } + + /** + * 获取登录账号名 + * @return + */ + public String getUserLoginAccount(){ + if(suffix==null){ + return this.uuid; + } + return this.uuid + this.suffix; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java new file mode 100644 index 00000000..77e2d21c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeModel.java @@ -0,0 +1,174 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.jero.modules.system.entity.SysPermission; + +/** + * 树形列表用到 + */ +public class TreeModel implements Serializable { + + private static final long serialVersionUID = 4013193970046502756L; + + private String key; + + private String title; + + private String slotTitle; + + private boolean isLeaf; + + private String icon; + + private Integer ruleFlag; + + private Map scopedSlots; + + public Map getScopedSlots() { + return scopedSlots; + } + + public void setScopedSlots(Map scopedSlots) { + this.scopedSlots = scopedSlots; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean getIsLeaf() { + return isLeaf; + } + + public void setIsLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + private List children; + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public TreeModel() { + + } + + public TreeModel(SysPermission permission) { + this.key = permission.getId(); + this.icon = permission.getIcon(); + this.parentId = permission.getParentId(); + this.title = permission.getName(); + this.slotTitle = permission.getName(); + this.value = permission.getId(); + this.isLeaf = permission.isLeaf(); + this.label = permission.getName(); + if(!permission.isLeaf()) { + this.children = new ArrayList(); + } + } + + public TreeModel(String key,String parentId,String slotTitle,Integer ruleFlag,boolean isLeaf) { + this.key = key; + this.parentId = parentId; + this.ruleFlag=ruleFlag; + this.slotTitle = slotTitle; + Map map = new HashMap(); + map.put("title", "hasDatarule"); + this.scopedSlots = map; + this.isLeaf = isLeaf; + this.value = key; + if(!isLeaf) { + this.children = new ArrayList(); + } + } + + private String parentId; + + private String label; + + private String value; + + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + /** + * @return the label + */ + public String getLabel() { + return label; + } + + /** + * @param label the label to set + */ + public void setLabel(String label) { + this.label = label; + } + + /** + * @return the value + */ + public String getValue() { + return value; + } + + /** + * @param value the value to set + */ + public void setValue(String value) { + this.value = value; + } + + public String getSlotTitle() { + return slotTitle; + } + + public void setSlotTitle(String slotTitle) { + this.slotTitle = slotTitle; + } + + public Integer getRuleFlag() { + return ruleFlag; + } + + public void setRuleFlag(Integer ruleFlag) { + this.ruleFlag = ruleFlag; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeSelectModel.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeSelectModel.java new file mode 100644 index 00000000..448fc051 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/model/TreeSelectModel.java @@ -0,0 +1,94 @@ +package com.jero.modules.system.model; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 树形下拉框 + */ +public class TreeSelectModel implements Serializable { + + private static final long serialVersionUID = 9016390975325574747L; + + private String key; + + private String title; + + private boolean isLeaf; + + private String icon; + + private String parentId; + + private String value; + + private String code; + + private List children = new ArrayList<>(); + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getParentId() { + return parentId; + } + + public void setParentId(String parentId) { + this.parentId = parentId; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public boolean isLeaf() { + return isLeaf; + } + + public void setLeaf(boolean isLeaf) { + this.isLeaf = isLeaf; + } + + public String getIcon() { + return icon; + } + + public void setIcon(String icon) { + this.icon = icon; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java new file mode 100644 index 00000000..c3543f5f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/CategoryCodeRule.java @@ -0,0 +1,64 @@ +package com.jero.modules.system.rule; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.handler.IFillRuleHandler; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.mapper.SysCategoryMapper; + +import java.util.List; + +/** + * @Author scott + * @Date 2019/12/9 11:32 + * @Description: 分类字典编码生成规则 + */ +public class CategoryCodeRule implements IFillRuleHandler { + + public static final String ROOT_PID_VALUE = "0"; + + @Override + public Object execute(JSONObject params, JSONObject formData) { + + String categoryPid = ROOT_PID_VALUE; + String categoryCode = null; + + if (formData != null && formData.size() > 0) { + Object obj = formData.get("pid"); + if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString(); + } else { + if (params != null) { + Object obj = params.get("pid"); + if (oConvertUtils.isNotEmpty(obj)) categoryPid = obj.toString(); + } + } + + /* + * 分成三种情况 + * 1.数据库无数据 调用YouBianCodeUtil.getNextYouBianCode(null); + * 2.添加子节点,无兄弟元素 YouBianCodeUtil.getSubYouBianCode(parentCode,null); + * 3.添加子节点有兄弟元素 YouBianCodeUtil.getNextYouBianCode(lastCode); + * */ + //找同类 确定上一个最大的code值 + LambdaQueryWrapper query = new LambdaQueryWrapper().eq(SysCategory::getPid, categoryPid).isNotNull(SysCategory::getCode).orderByDesc(SysCategory::getCode); + SysCategoryMapper baseMapper = (SysCategoryMapper) SpringContextUtils.getBean("sysCategoryMapper"); + List list = baseMapper.selectList(query); + if (list == null || list.size() == 0) { + if (ROOT_PID_VALUE.equals(categoryPid)) { + //情况1 + categoryCode = YouBianCodeUtil.getNextYouBianCode(null); + } else { + //情况2 + SysCategory parent = (SysCategory) baseMapper.selectById(categoryPid); + categoryCode = YouBianCodeUtil.getSubYouBianCode(parent.getCode(), null); + } + } else { + //情况3 + categoryCode = YouBianCodeUtil.getNextYouBianCode(list.get(0).getCode()); + } + return categoryCode; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrderNumberRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrderNumberRule.java new file mode 100644 index 00000000..a675a5e6 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrderNumberRule.java @@ -0,0 +1,36 @@ +package com.jero.modules.system.rule; + +import com.alibaba.fastjson.JSONObject; +import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.math.RandomUtils; +import com.jero.common.handler.IFillRuleHandler; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * 填值规则Demo:生成订单号 + * 【测试示例】 + */ +public class OrderNumberRule implements IFillRuleHandler { + + @Override + public Object execute(JSONObject params, JSONObject formData) { + String prefix = "CN"; + //订单前缀默认为CN 如果规则参数不为空,则取自定义前缀 + if (params != null) { + Object obj = params.get("prefix"); + if (obj != null) prefix = obj.toString(); + } + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); + int random = RandomUtils.nextInt(90) + 10; + String value = prefix + format.format(new Date()) + random; + // 根据formData的值的不同,生成不同的订单号 + String name = formData.getString("name"); + if (!StringUtils.isEmpty(name)) { + value += name; + } + return value; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java new file mode 100644 index 00000000..bef8b84c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/rule/OrgCodeRule.java @@ -0,0 +1,94 @@ +package com.jero.modules.system.rule; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import io.netty.util.internal.StringUtil; +import com.jero.common.handler.IFillRuleHandler; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.service.ISysDepartService; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author scott + * @Date 2019/12/9 11:33 + * @Description: 机构编码生成规则 + */ +public class OrgCodeRule implements IFillRuleHandler { + + @Override + public Object execute(JSONObject params, JSONObject formData) { + ISysDepartService sysDepartService = (ISysDepartService) SpringContextUtils.getBean("sysDepartServiceImpl"); + + LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + // 创建一个List集合,存储查询返回的所有SysDepart对象 + List departList = new ArrayList<>(); + String[] strArray = new String[2]; + //定义部门类型 + String orgType = ""; + // 定义新编码字符串 + String newOrgCode = ""; + // 定义旧编码字符串 + String oldOrgCode = ""; + + String parentId = null; + if (formData != null && formData.size() > 0) { + Object obj = formData.get("parentId"); + if (obj != null) parentId = obj.toString(); + } else { + if (params != null) { + Object obj = params.get("parentId"); + if (obj != null) parentId = obj.toString(); + } + } + + //如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 + if (StringUtil.isNullOrEmpty(parentId)) { + // 线判断数据库中的表是否为空,空则直接返回初始编码 + query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId); + query1.orderByDesc(SysDepart::getOrgCode); + departList = sysDepartService.list(query1); + if (departList == null || departList.size() == 0) { + strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); + strArray[1] = "1"; + return strArray; + } else { + SysDepart depart = departList.get(0); + oldOrgCode = depart.getOrgCode(); + orgType = depart.getOrgType(); + newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode); + } + } else {//反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 + // 封装查询同级的条件 + query.eq(SysDepart::getParentId, parentId); + // 降序排序 + query.orderByDesc(SysDepart::getOrgCode); + // 查询出同级部门的集合 + List parentList = sysDepartService.list(query); + // 查询出父级部门 + SysDepart depart = sysDepartService.getById(parentId); + // 获取父级部门的Code + String parentCode = depart.getOrgCode(); + // 根据父级部门类型算出当前部门的类型 + orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); + // 处理同级部门为null的情况 + if (parentList == null || parentList.size() == 0) { + // 直接生成当前的部门编码并返回 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); + } else { //处理有同级部门的情况 + // 获取同级部门的编码,利用工具类 + String subCode = parentList.get(0).getOrgCode(); + // 返回生成的当前部门编码 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode); + } + } + // 返回最终封装了部门编码和部门类型的数组 + strArray[0] = newOrgCode; + strArray[1] = orgType; + return strArray; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementSendService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementSendService.java new file mode 100644 index 00000000..74413002 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementSendService.java @@ -0,0 +1,28 @@ +package com.jero.modules.system.service; + +import java.util.List; + +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.model.AnnouncementSendModel; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +public interface ISysAnnouncementSendService extends IService { + + public List queryByUserId(String userId); + + /** + * @功能:获取我的消息 + * @param announcementSendModel + * @return + */ + public Page getMyAnnouncementSendPage(Page page,AnnouncementSendModel announcementSendModel); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementService.java new file mode 100644 index 00000000..7ceccbb1 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysAnnouncementService.java @@ -0,0 +1,25 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysAnnouncement; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 系统通告表 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +public interface ISysAnnouncementService extends IService { + + public void saveAnnouncement(SysAnnouncement sysAnnouncement); + + public boolean upDateAnnouncement(SysAnnouncement sysAnnouncement); + + public void saveSysAnnouncement(String title, String msgContent); + + public Page querySysCementPageByUserId(Page page,String userId,String msgCategory); + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCategoryService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCategoryService.java new file mode 100644 index 00000000..f5833247 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCategoryService.java @@ -0,0 +1,62 @@ +package com.jero.modules.system.service; + +import java.util.List; +import java.util.Map; + +import com.jero.common.exception.JeroBootException; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.model.TreeSelectModel; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 分类字典 + * @Author: jero-boot + * @Date: 2019-05-29 + * @Version: V1.0 + */ +public interface ISysCategoryService extends IService { + + /**根节点父ID的值*/ + public static final String ROOT_PID_VALUE = "0"; + + void addSysCategory(SysCategory sysCategory); + + void updateSysCategory(SysCategory sysCategory); + + /** + * 根据父级编码加载分类字典的数据 + * @param pcode + * @return + */ + public List queryListByCode(String pcode) throws JeroBootException; + + /** + * 根据pid查询子节点集合 + * @param pid + * @return + */ + public List queryListByPid(String pid); + + /** + * 根据pid查询子节点集合,支持查询条件 + * @param pid + * @param condition + * @return + */ + public List queryListByPid(String pid, Map condition); + + /** + * 根据code查询id + * @param code + * @return + */ + public String queryIdByCode(String code); + + /** + * 删除节点时同时删除子节点及修改父级节点 + * @param ids + */ + void deleteSysCategory(String ids); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCheckRuleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCheckRuleService.java new file mode 100644 index 00000000..fb647f6b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysCheckRuleService.java @@ -0,0 +1,33 @@ +package com.jero.modules.system.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysCheckRule; + +/** + * @Description: 编码校验规则 + * @Author: jero-boot + * @Date: 2020-02-04 + * @Version: V1.0 + */ +public interface ISysCheckRuleService extends IService { + + /** + * 通过 code 获取规则 + * + * @param ruleCode + * @return + */ + SysCheckRule getByCode(String ruleCode); + + + /** + * 通过用户设定的自定义校验规则校验传入的值 + * + * @param checkRule + * @param value + * @return 返回 null代表通过校验,否则就是返回的错误提示文本 + */ + JSONObject checkValue(SysCheckRule checkRule, String value); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysConfusionService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysConfusionService.java new file mode 100644 index 00000000..abff554b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysConfusionService.java @@ -0,0 +1,61 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysConfusion; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: 混淆表 + * @Author: jero-boot + * @Date: 2021-08-05 + * @Version: V1.0 + */ +public interface ISysConfusionService extends IService { + + /** + * 保存 + * + * @param sysConfusion + * @return + */ + void add(SysConfusion sysConfusion); + + /** + * 更新 + * + * @param sysConfusion + * @return + */ + void editById(SysConfusion sysConfusion); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + SysConfusion queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataLogService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataLogService.java new file mode 100644 index 00000000..7a94ed2b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataLogService.java @@ -0,0 +1,17 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDataLog; + +import com.baomidou.mybatisplus.extension.service.IService; + +public interface ISysDataLogService extends IService { + + /** + * 添加数据日志 + * @param tableName + * @param dataId + * @param dataContent + */ + public void addDataLog(String tableName, String dataId, String dataContent); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataSourceService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataSourceService.java new file mode 100644 index 00000000..9f552cbc --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDataSourceService.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysDataSource; + +/** + * @Description: 多数据源管理 + * @Author: jero-boot + * @Date: 2019-12-25 + * @Version: V1.0 + */ +public interface ISysDataSourceService extends IService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartPermissionService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartPermissionService.java new file mode 100644 index 00000000..1338f0fa --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartPermissionService.java @@ -0,0 +1,30 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDepartPermission; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysPermissionDataRule; + +import java.util.List; + +/** + * @Description: 部门权限表 + * @Author: jero-boot + * @Date: 2020-02-11 + * @Version: V1.0 + */ +public interface ISysDepartPermissionService extends IService { + /** + * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * @param departId + * @param permissionIds + * @param lastPermissionIds + */ + public void saveDepartPermission(String departId,String permissionIds,String lastPermissionIds); + + /** + * 根据部门id,菜单id获取数据规则 + * @param permissionId + * @return + */ + List getPermRuleListByDeptIdAndPermId(String departId,String permissionId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRolePermissionService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRolePermissionService.java new file mode 100644 index 00000000..f434fa60 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRolePermissionService.java @@ -0,0 +1,20 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 部门角色权限 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +public interface ISysDepartRolePermissionService extends IService { + /** + * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * @param roleId + * @param permissionIds + * @param lastPermissionIds + */ + public void saveDeptRolePermission(String roleId,String permissionIds,String lastPermissionIds); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleService.java new file mode 100644 index 00000000..1a307ccd --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleService.java @@ -0,0 +1,24 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDepartRole; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * @Description: 部门角色 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +public interface ISysDepartRoleService extends IService { + + /** + * 根据用户id,部门id查询可授权所有部门角色 + * @param orgCode + * @param userId + * @return + */ + List queryDeptRoleByDeptAndUser(String orgCode, String userId); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleUserService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleUserService.java new file mode 100644 index 00000000..cc168726 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartRoleUserService.java @@ -0,0 +1,24 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDepartRoleUser; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * @Description: 部门角色人员信息 + * @Author: jero-boot + * @Date: 2020-02-13 + * @Version: V1.0 + */ +public interface ISysDepartRoleUserService extends IService { + + void deptRoleUserAdd(String userId,String newRoleId,String oldRoleId); + + /** + * 取消用户与部门关联,删除关联关系 + * @param userIds + * @param depId + */ + void removeDeptRoleUser(List userIds,String depId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java new file mode 100644 index 00000000..c38b75a4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDepartService.java @@ -0,0 +1,126 @@ +package com.jero.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.common.system.vo.SysDepartTreeModel; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.model.DepartIdModel; +import java.util.List; + +/** + *

+ * 部门表 服务实现类 + *

+ * + * @Author:Steve + * @Since: 2019-01-22 + */ +public interface ISysDepartService extends IService{ + + /** + * 查询我的部门信息,并分节点进行显示 + * @return + */ + List queryMyDeptTreeList(String departIds); + + /** + * 查询所有部门信息,并分节点进行显示 + * @return + */ + List queryTreeList(); + + /** + * 查询所有部门DepartId信息,并分节点进行显示 + * @return + */ + public List queryDepartIdTreeList(); + + /** + * 保存部门数据 + * @param sysDepart + */ + void saveDepartData(SysDepart sysDepart,String username); + + /** + * 更新depart数据 + * @param sysDepart + * @return + */ + Boolean updateDepartDataById(SysDepart sysDepart,String username); + + /** + * 删除depart数据 + * @param id + * @return + */ + /* boolean removeDepartDataById(String id); */ + + /** + * 根据关键字搜索相关的部门数据 + * @param keyWord + * @return + */ + List searhBy(String keyWord,String myDeptSearch,String departIds); + + /** + * 根据部门id删除并删除其可能存在的子级部门 + * @param id + * @return + */ + boolean delete(String id); + + /** + * 查询SysDepart集合 + * @param userId + * @return + */ + public List queryUserDeparts(String userId); + + /** + * 根据用户名查询部门 + * + * @param username + * @return + */ + List queryDepartsByUsername(String username); + + /** + * 根据部门id批量删除并删除其可能存在的子级部门 + * @param id + * @return + */ + void deleteBatchWithChildren(List ids); + + /** + * 根据部门Id查询,当前和下级所有部门IDS + * @param departId + * @return + */ + List getSubDepIdsByDepId(String departId); + + /** + * 获取我的部门下级所有部门IDS + * @return + */ + List getMySubDepIdsByDepId(String departIds); + /** + * 根据关键字获取部门信息(通讯录) + * @return + */ + List queryTreeByKeyWord(String keyWord); + + /** + * 根据部门id查询部门所有的父级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:50 + * @param departId 部门id + */ + List listParentDepartsByDepId(String departId); + + /** + * 根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:54 + * @param departId 部门id + */ + List listSonDepartsByDepId(String departId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictItemService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictItemService.java new file mode 100644 index 00000000..81c0cba9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictItemService.java @@ -0,0 +1,18 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysDictItem; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + *

+ * 服务类 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +public interface ISysDictItemService extends IService { + public List selectItemsByMainId(String mainId); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java new file mode 100644 index 00000000..ba8807cb --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java @@ -0,0 +1,145 @@ +package com.jero.modules.system.service; + +import java.util.List; +import java.util.Map; + +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.DictQuery; +import com.jero.modules.system.entity.SysDict; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.model.TreeSelectModel; + +/** + *

+ * 字典表 服务类 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +public interface ISysDictService extends IService { + + public List queryDictItemsByCode(String code); + + public Map> queryAllDictItems(); + + @Deprecated + List queryTableDictItemsByCode(String table, String text, String code); + + @Deprecated + public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql); + + public String queryDictTextByKey(String code, String key); + + @Deprecated + String queryTableDictTextByKey(String table, String text, String code, String key); + + @Deprecated + List queryTableDictByKeys(String table, String text, String code, String keys); + + /** + * 根据字典类型删除关联表中其对应的数据 + * + * @param sysDict + * @return + */ + boolean deleteByDictId(SysDict sysDict); + + /** + * 添加一对多 + */ + public Integer saveMain(SysDict sysDict, List sysDictItemList); + + /** + * 查询所有部门 作为字典信息 id -->value,departName -->text + * @return + */ + public List queryAllDepartBackDictModel(); + + /** + * 查询所有用户 作为字典信息 username -->value,realname -->text + * @return + */ + public List queryAllUserBackDictModel(); + + /** + * 通过关键字查询字典表 + * @param table + * @param text + * @param code + * @param keyword + * @return + */ + @Deprecated + public List queryTableDictItems(String table, String text, String code,String keyword); + + /** + * 查询字典表数据 只查询前10条 + * @param table + * @param text + * @param code + * @param keyword + * @return + */ + public List queryLittleTableDictItems(String table, String text, String code,String keyword, int pageSize); + + /** + * 根据表名、显示字段名、存储字段名 查询树 + * @param table + * @param text + * @param code + * @param pidField + * @param pid + * @param hasChildField + * @return + */ + List queryTreeList(String query,String table, String text, String code, String pidField,String pid,String hasChildField); + + /** + * 根据表名、显示字段名、存储字段名 和查询条件拼接树结构 + * @param table + * @param text + * @param code + * @param pidField + * @return + */ + List queryAllTreeData(String table, String text, String code, String pidField); + + /** + * 真实删除 + * @param id + */ + public void deleteOneDictPhysically(String id); + + /** + * 修改delFlag + * @param delFlag + * @param id + */ + public void updateDictDelFlag(int delFlag,String id); + + /** + * 查询被逻辑删除的数据 + * @return + */ + public List queryDeleteList(); + + /** + * 分页查询 + * @param query + * @param pageSize + * @param pageNo + * @return + */ + @Deprecated + public List queryDictTablePageList(DictQuery query,int pageSize, int pageNo); + + /** + * 刷新dict缓存 + * @date 2021/4/8 9:06 + * @return void + */ + void refreshCache(); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysFillRuleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysFillRuleService.java new file mode 100644 index 00000000..6f5c20ca --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysFillRuleService.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysFillRule; + +/** + * @Description: 填值规则 + * @Author: jero-boot + * @Date: 2019-11-07 + * @Version: V1.0 + */ +public interface ISysFillRuleService extends IService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysGatewayRouteService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysGatewayRouteService.java new file mode 100644 index 00000000..336e98a9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysGatewayRouteService.java @@ -0,0 +1,38 @@ +package com.jero.modules.system.service; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysGatewayRoute; + +/** + * @Description: gateway路由管理 + * @Author: jero-boot + * @Date: 2020-05-26 + * @Version: V1.0 + */ +public interface ISysGatewayRouteService extends IService { + + /** + * 添加所有的路由信息到redis + * @param key + */ + void addRoute2Redis(String key); + + /** + * 删除路由 + * @param id + */ + void deleteById(String id); + + /** + * 保存路由配置 + * @param array + */ + void updateAll(JSONObject array); + + /** + * 清空redis中的route信息 + */ + void clearRedis(); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysLogService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysLogService.java new file mode 100644 index 00000000..acd26457 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysLogService.java @@ -0,0 +1,56 @@ +package com.jero.modules.system.service; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import com.jero.modules.system.entity.SysLog; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 系统日志表 服务类 + *

+ * + * @Author zhangweijian + * @since 2018-12-26 + */ +public interface ISysLogService extends IService { + + /** + * @功能:清空所有日志记录 + */ + public void removeAll(); + + /** + * 获取系统总访问次数 + * + * @return Long + */ + Long findTotalVisitCount(); + + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + /** + * 获取系统今日访问次数 + * + * @return Long + */ + Long findTodayVisitCount(Date dayStart, Date dayEnd); + + /** + * 获取系统今日访问 IP数 + * + * @return Long + */ + Long findTodayIp(Date dayStart, Date dayEnd); + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + /** + * 首页:根据时间统计访问数量/ip数量 + * @param dayStart + * @param dayEnd + * @return + */ + List> findVisitCount(Date dayStart, Date dayEnd); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionDataRuleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionDataRuleService.java new file mode 100644 index 00000000..87dfad27 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionDataRuleService.java @@ -0,0 +1,55 @@ +package com.jero.modules.system.service; + +import java.util.List; + +import com.jero.modules.system.entity.SysPermissionDataRule; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 菜单权限规则 服务类 + *

+ * + * @Author huangzhilin + * @since 2019-04-01 + */ +public interface ISysPermissionDataRuleService extends IService { + + /** + * 根据菜单id查询其对应的权限数据 + * + * @param permRule + */ + List getPermRuleListByPermId(String permissionId); + + /** + * 根据页面传递的参数查询菜单权限数据 + * + * @return + */ + List queryPermissionRule(SysPermissionDataRule permRule); + + + /** + * 根据菜单ID和用户名查找数据权限配置信息 + * @param permission + * @param username + * @return + */ + List queryPermissionDataRules(String username,String permissionId); + + /** + * 新增菜单权限配置 修改菜单rule_flag + * @param sysPermissionDataRule + */ + public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule); + + /** + * 删除菜单权限配置 判断菜单还有无权限 + * @param dataRuleId + */ + public void deletePermissionDataRule(String dataRuleId); + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java new file mode 100644 index 00000000..8f48db4f --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysPermissionService.java @@ -0,0 +1,64 @@ +package com.jero.modules.system.service; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.common.exception.JeroBootException; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.model.TreeModel; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 菜单权限表 服务类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface ISysPermissionService extends IService { + + public List queryListByParentId(String parentId); + + /**真实删除*/ + public void deletePermission(String id) throws JeroBootException; + /**逻辑删除*/ + public void deletePermissionLogical(String id) throws JeroBootException; + + public void addPermission(SysPermission sysPermission) throws JeroBootException; + + public void editPermission(SysPermission sysPermission) throws JeroBootException; + + public List queryByUser(String username); + + /** + * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 + * + * @param id + * @return + */ + public void deletePermRuleByPermId(String id); + + /** + * 查询出带有特殊符号的菜单地址的集合 + * @return + */ + public List queryPermissionUrlWithStar(); + + /** + * 判断用户否拥有权限 + * @param username + * @param sysPermission + * @return + */ + public boolean hasPermission(String username, SysPermission sysPermission); + + /** + * 根据用户和请求地址判断是否有此权限 + * @param username + * @param url + * @return + */ + public boolean hasPermission(String username, String url); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRolePermissionService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRolePermissionService.java new file mode 100644 index 00000000..5afb36d4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRolePermissionService.java @@ -0,0 +1,31 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysRolePermission; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 角色权限表 服务类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface ISysRolePermissionService extends IService { + + /** + * 保存授权/先删后增 + * @param roleId + * @param permissionIds + */ + public void saveRolePermission(String roleId,String permissionIds); + + /** + * 保存授权 将上次的权限和这次作比较 差异处理提高效率 + * @param roleId + * @param permissionIds + * @param lastPermissionIds + */ + public void saveRolePermission(String roleId,String permissionIds,String lastPermissionIds); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java new file mode 100644 index 00000000..a2c02569 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysRoleService.java @@ -0,0 +1,43 @@ +package com.jero.modules.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.common.api.vo.Result; +import com.jero.modules.system.entity.SysRole; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.web.multipart.MultipartFile; + +/** + *

+ * 角色表 服务类 + *

+ * + * @Author scott + * @since 2018-12-19 + */ +public interface ISysRoleService extends IService { + + /** + * 导入 excel ,检查 roleCode 的唯一性 + * + * @param file + * @param params + * @return + * @throws Exception + */ + Result importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws Exception; + + /** + * 删除角色 + * @param roleid + * @return + */ + public boolean deleteRole(String roleid); + + /** + * 批量删除角色 + * @param roleids + * @return + */ + public boolean deleteBatchRole(String[] roleids); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysThirdAccountService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysThirdAccountService.java new file mode 100644 index 00000000..068dcef9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysThirdAccountService.java @@ -0,0 +1,19 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysThirdAccount; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.entity.SysUser; + +/** + * @Description: 第三方登录账号表 + * @Author: jero-boot + * @Date: 2020-11-17 + * @Version: V1.0 + */ +public interface ISysThirdAccountService extends IService { + /**更新第三方账户信息*/ + void updateThirdUserId(SysUser sysUser,String thirdUserUuid); + /**创建第三方用户*/ + SysUser createUser(String phone, String thirdUserUuid); + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserAgentService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserAgentService.java new file mode 100644 index 00000000..4ec1ca46 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserAgentService.java @@ -0,0 +1,14 @@ +package com.jero.modules.system.service; + +import com.jero.modules.system.entity.SysUserAgent; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 用户代理人设置 + * @Author: jero-boot + * @Date: 2019-04-17 + * @Version: V1.0 + */ +public interface ISysUserAgentService extends IService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java new file mode 100644 index 00000000..69036006 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserDepartService.java @@ -0,0 +1,41 @@ +package com.jero.modules.system.service; + + +import java.util.List; + +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserDepart; +import com.jero.modules.system.model.DepartIdModel; + + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * SysUserDpeart用户组织机构service + *

+ * @Author ZhiLin + * + */ +public interface ISysUserDepartService extends IService { + + + /** + * 根据指定用户id查询部门信息 + * @param userId + * @return + */ + List queryDepartIdsOfUser(String userId); + + + /** + * 根据部门id查询用户信息 + * @param depId + * @return + */ + List queryUserByDepId(String depId); + /** + * 根据部门code,查询当前部门和下级部门的用户信息 + */ + public List queryUserByDepCode(String depCode,String realname); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java new file mode 100644 index 00000000..c70cf633 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserRoleService.java @@ -0,0 +1,18 @@ +package com.jero.modules.system.service; + +import java.util.Map; + +import com.jero.modules.system.entity.SysUserRole; + +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 用户角色表 服务类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +public interface ISysUserRoleService extends IService { +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java new file mode 100644 index 00000000..11a3fb7b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysUserService.java @@ -0,0 +1,236 @@ +package com.jero.modules.system.service; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; + +import com.jero.common.api.vo.Result; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.modules.system.entity.SysUser; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.system.model.SysUserSysDepartModel; +import org.springframework.transaction.annotation.Transactional; + +/** + *

+ * 用户表 服务类 + *

+ * + * @Author scott + * @since 2018-12-20 + */ +public interface ISysUserService extends IService { + + /** + * 修改密码 + * + * @param username + * @param oldPassword + * @param newPassword + * @param confirmPassword + * @return + */ + public Result resetPassword(String username, String oldPassword, String newPassword, String confirmPassword); + + /** + * 修改密码 + * + * @param sysUser + * @return + */ + public Result changePassword(SysUser sysUser); + + /** + * 删除用户 + * @param userId + * @return + */ + public boolean deleteUser(String userId); + + /** + * 批量删除用户 + * @param userIds + * @return + */ + public boolean deleteBatchUsers(String userIds); + + public SysUser getUserByName(String username); + + /** + * 添加用户和用户角色关系 + * @param user + * @param roles + */ + public void addUserWithRole(SysUser user,String roles); + + + /** + * 修改用户和用户角色关系 + * @param user + * @param roles + */ + public void editUserWithRole(SysUser user,String roles); + + /** + * 获取用户的授权角色 + * @param username + * @return + */ + public List getRole(String username); + + /** + * 查询用户信息包括 部门信息 + * @param username + * @return + */ + public SysUserCacheInfo getCacheUser(String username); + + /** + * 根据部门Id查询 + * @param + * @return + */ + public IPage getUserByDepId(Page page, String departId, String username); + + /** + * 根据部门Ids查询 + * @param + * @return + */ + public IPage getUserByDepIds(Page page, List departIds, String username); + + /** + * 根据 userIds查询,查询用户所属部门的名称(多个部门名逗号隔开) + * @param + * @return + */ + public Map getDepNamesByUserIds(List userIds); + + /** + * 根据部门 Id 和 QueryWrapper 查询 + * + * @param page + * @param departId + * @param queryWrapper + * @return + */ + public IPage getUserByDepartIdAndQueryWrapper(Page page, String departId, QueryWrapper queryWrapper); + + /** + * 根据 orgCode 查询用户,包括子部门下的用户 + * + * @param orgCode + * @param userParams 用户查询条件,可为空 + * @param page 分页参数 + * @return + */ + IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page); + + /** + * 根据角色Id查询 + * @param + * @return + */ + public IPage getUserByRoleId(Page page,String roleId, String username); + + /** + * 通过用户名获取用户角色集合 + * + * @param username 用户名 + * @return 角色集合 + */ + Set getUserRolesSet(String username); + + /** + * 通过用户名获取用户权限集合 + * + * @param username 用户名 + * @return 权限集合 + */ + Set getUserPermissionsSet(String username); + + /** + * 根据用户名设置部门ID + * @param username + * @param orgCode + */ + void updateUserDepart(String username,String orgCode); + + /** + * 根据手机号获取用户名和密码 + */ + public SysUser getUserByPhone(String phone); + + + /** + * 根据邮箱获取用户 + */ + public SysUser getUserByEmail(String email); + + + /** + * 添加用户和用户部门关系 + * @param user + * @param selectedParts + */ + void addUserWithDepart(SysUser user, String selectedParts); + + /** + * 编辑用户和用户部门关系 + * @param user + * @param departs + */ + void editUserWithDepart(SysUser user, String departs); + + /** + * 校验用户是否有效 + * @param sysUser + * @return + */ + Result checkUserIsEffective(SysUser sysUser); + + /** + * 查询被逻辑删除的用户 + */ + List queryLogicDeleted(); + + /** + * 查询被逻辑删除的用户(可拼装查询条件) + */ + List queryLogicDeleted(LambdaQueryWrapper wrapper); + + /** + * 还原被逻辑删除的用户 + */ + boolean revertLogicDeleted(List userIds, SysUser updateEntity); + + /** + * 彻底删除被逻辑删除的用户 + */ + boolean removeLogicDeleted(List userIds); + + /** + * 更新手机号、邮箱空字符串为 null + */ + @Transactional(rollbackFor = Exception.class) + boolean updateNullPhoneEmail(); + + /** + * 保存第三方用户信息 + * @param sysUser + */ + void saveThirdUser(SysUser sysUser); + + /** + * 根据部门Ids查询 + * @param + * @return + */ + List queryByDepIds(List departIds, String username); +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/ImportFileServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/ImportFileServiceImpl.java new file mode 100644 index 00000000..b4e6e1eb --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/ImportFileServiceImpl.java @@ -0,0 +1,26 @@ +package com.jero.modules.system.service.impl; + +import lombok.extern.slf4j.Slf4j; +import com.jero.common.util.CommonUtils; +import org.jeecgframework.poi.excel.imports.base.ImportFileServiceI; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +/** + * excel导入 实现类 + */ +@Slf4j +@Service +public class ImportFileServiceImpl implements ImportFileServiceI { + + @Value("${jero.path.upload}") + private String upLoadPath; + + @Value(value="${jero.uploadType}") + private String uploadType; + + @Override + public String doUpload(byte[] data) { + return CommonUtils.uploadOnlineImage(data, upLoadPath, "import", uploadType); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementSendServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementSendServiceImpl.java new file mode 100644 index 00000000..52a65b6a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementSendServiceImpl.java @@ -0,0 +1,39 @@ +package com.jero.modules.system.service.impl; + +import java.util.List; + +import javax.annotation.Resource; + +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.mapper.SysAnnouncementSendMapper; +import com.jero.modules.system.model.AnnouncementSendModel; +import com.jero.modules.system.service.ISysAnnouncementSendService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 用户通告阅读标记表 + * @Author: jero-boot + * @Date: 2019-02-21 + * @Version: V1.0 + */ +@Service +public class SysAnnouncementSendServiceImpl extends ServiceImpl implements ISysAnnouncementSendService { + + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; + + @Override + public List queryByUserId(String userId) { + return sysAnnouncementSendMapper.queryByUserId(userId); + } + + @Override + public Page getMyAnnouncementSendPage(Page page, + AnnouncementSendModel announcementSendModel) { + return page.setRecords(sysAnnouncementSendMapper.getMyAnnouncementSendList(page, announcementSendModel)); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java new file mode 100644 index 00000000..65e36eb8 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysAnnouncementServiceImpl.java @@ -0,0 +1,121 @@ +package com.jero.modules.system.service.impl; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.List; + +import javax.annotation.Resource; + +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysAnnouncementSend; +import com.jero.modules.system.mapper.SysAnnouncementMapper; +import com.jero.modules.system.mapper.SysAnnouncementSendMapper; +import com.jero.modules.system.service.ISysAnnouncementService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 系统通告表 + * @Author: jero-boot + * @Date: 2019-01-02 + * @Version: V1.0 + */ +@Service +public class SysAnnouncementServiceImpl extends ServiceImpl implements ISysAnnouncementService { + + @Resource + private SysAnnouncementMapper sysAnnouncementMapper; + + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; + + @Transactional + @Override + public void saveAnnouncement(SysAnnouncement sysAnnouncement) { + if(sysAnnouncement.getMsgType().equals(CommonConstant.MSG_TYPE_ALL)) { + sysAnnouncementMapper.insert(sysAnnouncement); + }else { + // 1.插入通告表记录 + sysAnnouncementMapper.insert(sysAnnouncement); + // 2.插入用户通告阅读标记表记录 + String userId = sysAnnouncement.getUserIds(); + String[] userIds = userId.substring(0, (userId.length()-1)).split(","); + String anntId = sysAnnouncement.getId(); + Date refDate = new Date(); + for(int i=0;i queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); + queryWrapper.eq(SysAnnouncementSend::getUserId, userIds[i]); + List announcementSends=sysAnnouncementSendMapper.selectList(queryWrapper); + if(announcementSends.size()<=0) { + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + announcementSend.setAnntId(anntId); + announcementSend.setUserId(userIds[i]); + announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG); + announcementSend.setReadTime(refDate); + sysAnnouncementSendMapper.insert(announcementSend); + } + } + // 3. 删除多余通知用户数据 + Collection delUserIds = Arrays.asList(userIds); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.notIn(SysAnnouncementSend::getUserId, delUserIds); + queryWrapper.eq(SysAnnouncementSend::getAnntId, anntId); + sysAnnouncementSendMapper.delete(queryWrapper); + } + return true; + } + + // @功能:流程执行完成保存消息通知 + @Override + public void saveSysAnnouncement(String title, String msgContent) { + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(msgContent); + announcement.setSender("JERO BOOT"); + announcement.setPriority(CommonConstant.PRIORITY_L); + announcement.setMsgType(CommonConstant.MSG_TYPE_ALL); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + sysAnnouncementMapper.insert(announcement); + } + + @Override + public Page querySysCementPageByUserId(Page page, String userId,String msgCategory) { + return page.setRecords(sysAnnouncementMapper.querySysCementListByUserId(page, userId, msgCategory)); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java new file mode 100644 index 00000000..1fee9b4a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysBaseApiImpl.java @@ -0,0 +1,1018 @@ +package com.jero.modules.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.google.common.base.Joiner; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; +import com.jero.common.api.dto.OnlineAuthDTO; +import com.jero.common.api.dto.message.*; +import com.jero.common.aspect.UrlMatchEnum; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.DataBaseConstant; +import com.jero.common.constant.WebsocketConst; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.system.vo.*; +import com.jero.common.util.SysAnnmentTypeEnum; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.message.entity.SysMessageTemplate; +import com.jero.modules.message.handle.impl.EmailSendMsgHandle; +import com.jero.modules.message.service.ISysMessageTemplateService; +import com.jero.modules.message.websocket.WebSocket; +import com.jero.modules.system.entity.*; +import com.jero.modules.system.mapper.*; +import com.jero.modules.system.service.*; +import com.jero.modules.system.util.SecurityUtil; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.util.AntPathMatcher; +import org.springframework.util.PathMatcher; + +import javax.annotation.Resource; +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.SQLException; +import java.util.*; + +/** + * @Description: 底层共通业务API,提供其他独立模块调用 + * @Author: scott + * @Date:2019-4-20 + * @Version:V1.0 + */ +@Slf4j +@Service +public class SysBaseApiImpl implements ISysBaseAPI { + /** 当前系统数据库类型 */ + private static String DB_TYPE = ""; + @Autowired + private ISysMessageTemplateService sysMessageTemplateService; + @Resource + private SysLogMapper sysLogMapper; + @Resource + private SysUserMapper userMapper; + @Resource + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private ISysDictService sysDictService; + @Resource + private SysAnnouncementMapper sysAnnouncementMapper; + @Resource + private SysAnnouncementSendMapper sysAnnouncementSendMapper; + @Resource + private WebSocket webSocket; + @Resource + private SysRoleMapper roleMapper; + @Resource + private SysDepartMapper departMapper; + @Resource + private SysCategoryMapper categoryMapper; + + @Autowired + private ISysDataSourceService dataSourceService; + @Autowired + private ISysUserDepartService sysUserDepartService; + @Resource + private SysPermissionMapper sysPermissionMapper; + @Autowired + private ISysPermissionDataRuleService sysPermissionDataRuleService; + + @Override + @Cacheable(cacheNames=CacheConstant.SYS_USERS_CACHE, key="#username") + public LoginUser getUserByName(String username) { + if(oConvertUtils.isEmpty(username)) { + return null; + } + LoginUser loginUser = new LoginUser(); + SysUser sysUser = userMapper.getUserByName(username); + if(sysUser==null) { + return null; + } + BeanUtils.copyProperties(sysUser, loginUser); + return loginUser; + } + + @Override + public String translateDictFromTable(String table, String text, String code, String key) { + return sysDictService.queryTableDictTextByKey(table, text, code, key); + } + + @Override + public String translateDict(String code, String key) { + return sysDictService.queryDictTextByKey(code, key); + } + + @Override + public List queryPermissionDataRule(String component, String requestPath, String username) { + List currentSyspermission = null; + if(oConvertUtils.isNotEmpty(component)) { + //1.通过注解属性pageComponent 获取菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag,0); + query.eq(SysPermission::getComponent, component); + currentSyspermission = sysPermissionMapper.selectList(query); + }else { + //1.直接通过前端请求地址查询菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getMenuType,2); + query.eq(SysPermission::getDelFlag,0); + query.eq(SysPermission::getUrl, requestPath); + currentSyspermission = sysPermissionMapper.selectList(query); + //2.未找到 再通过自定义匹配URL 获取菜单 + if(currentSyspermission==null || currentSyspermission.size()==0) { + //通过自定义URL匹配规则 获取菜单(实现通过菜单配置数据权限规则,实际上针对获取数据接口进行数据规则控制) + String userMatchUrl = UrlMatchEnum.getMatchResultByUrl(requestPath); + LambdaQueryWrapper queryQserMatch = new LambdaQueryWrapper(); + queryQserMatch.eq(SysPermission::getMenuType, 1); + queryQserMatch.eq(SysPermission::getDelFlag, 0); + queryQserMatch.eq(SysPermission::getUrl, userMatchUrl); + if(oConvertUtils.isNotEmpty(userMatchUrl)){ + currentSyspermission = sysPermissionMapper.selectList(queryQserMatch); + } + } + //3.未找到 再通过正则匹配获取菜单 + if(currentSyspermission==null || currentSyspermission.size()==0) { + //通过正则匹配权限配置 + String regUrl = getRegexpUrl(requestPath); + if(regUrl!=null) { + currentSyspermission = sysPermissionMapper.selectList(new LambdaQueryWrapper().eq(SysPermission::getMenuType,2).eq(SysPermission::getUrl, regUrl).eq(SysPermission::getDelFlag,0)); + } + } + } + if(currentSyspermission!=null && currentSyspermission.size()>0){ + List dataRules = new ArrayList(); + for (SysPermission sysPermission : currentSyspermission) { + // update-begin--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + List temp = sysPermissionDataRuleService.queryPermissionDataRules(username, sysPermission.getId()); + if(temp!=null && temp.size()>0) { + //dataRules.addAll(temp); + dataRules = oConvertUtils.entityListToModelList(temp,SysPermissionDataRuleModel.class); + } + // update-end--Author:scott Date:20191119 for:数据权限规则编码不规范,项目存在相同包名和类名 #722 + } + return dataRules; + } + return null; + } + + /** + * 匹配前端传过来的地址 匹配成功返回正则地址 + * AntPathMatcher匹配地址 + *()* 匹配0个或多个字符 + *()**匹配0个或多个目录 + */ + private String getRegexpUrl(String url) { + List list = sysPermissionMapper.queryPermissionUrlWithStar(); + if(list!=null && list.size()>0) { + for (String p : list) { + PathMatcher matcher = new AntPathMatcher(); + if(matcher.match(p, url)) { + return p; + } + } + } + return null; + } + + @Override + public SysUserCacheInfo getCacheUser(String username) { + SysUserCacheInfo info = new SysUserCacheInfo(); + info.setOneDepart(true); + LoginUser user = this.getUserByName(username); + if(user!=null) { + info.setSysUserCode(user.getUsername()); + info.setSysUserName(user.getRealname()); + info.setSysOrgCode(user.getOrgCode()); + } + //多部门支持in查询 + List list = departMapper.queryUserDeparts(user.getId()); + List sysMultiOrgCode = new ArrayList(); + if(list==null || list.size()==0) { + //当前用户无部门 + //sysMultiOrgCode.add("0"); + }else if(list.size()==1) { + sysMultiOrgCode.add(list.get(0).getOrgCode()); + }else { + info.setOneDepart(false); + for (SysDepart dpt : list) { + sysMultiOrgCode.add(dpt.getOrgCode()); + } + } + info.setSysMultiOrgCode(sysMultiOrgCode); + return info; + } + + @Override + public LoginUser getUserById(String id) { + if(oConvertUtils.isEmpty(id)) { + return null; + } + LoginUser loginUser = new LoginUser(); + SysUser sysUser = userMapper.selectById(id); + if(sysUser==null) { + return null; + } + BeanUtils.copyProperties(sysUser, loginUser); + return loginUser; + } + + @Override + public List getRolesByUsername(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } + + @Override + public List getDepartIdsByUsername(String username) { + List list = sysDepartService.queryDepartsByUsername(username); + List result = new ArrayList<>(list.size()); + for (SysDepart depart : list) { + result.add(depart.getId()); + } + return result; + } + + @Override + public List getDepartNamesByUsername(String username) { + List list = sysDepartService.queryDepartsByUsername(username); + List result = new ArrayList<>(list.size()); + for (SysDepart depart : list) { + result.add(depart.getDepartName()); + } + return result; + } + + @Override + public DictModel getParentDepartId(String departId) { + SysDepart depart = departMapper.getParentDepartId(departId); + DictModel model = new DictModel(depart.getId(),depart.getParentId()); + return model; + } + + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code") + public List queryDictItemsByCode(String code) { + return sysDictService.queryDictItemsByCode(code); + } + + @Override + public List queryTableDictItemsByCode(String table, String text, String code) { + //update-begin-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 + if(table.indexOf("#{")>=0){ + table = QueryGenerator.getSqlRuleValue(table); + } + //update-end-author:taoyan date:20200820 for:【Online+系统】字典表加权限控制机制逻辑,想法不错 LOWCOD-799 + return sysDictService.queryTableDictItemsByCode(table, text, code); + } + + @Override + public List queryAllDepartBackDictModel() { + return sysDictService.queryAllDepartBackDictModel(); + } + + @Override + public void sendSysAnnouncement(MessageDTO message) { + this.sendSysAnnouncement(message.getFromUser(), + message.getToUser(), + message.getTitle(), + message.getContent(), + message.getCategory()); + } + + @Override + public void sendBusAnnouncement(BusMessageDTO message) { + sendBusAnnouncement(message.getFromUser(), + message.getToUser(), + message.getTitle(), + message.getContent(), + message.getCategory(), + message.getBusType(), + message.getBusId()); + } + + @Override + public void sendTemplateAnnouncement(TemplateMessageDTO message) { + String templateCode = message.getTemplateCode(); + String title = message.getTitle(); + Map map = message.getTemplateParam(); + String fromUser = message.getFromUser(); + String toUser = message.getToUser(); + + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ + throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板标题 + title = title==null?sysSmsTemplate.getTemplateName():title; + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if(map!=null) { + for (Map.Entry entry : map.entrySet()) { + String str = "${" + entry.getKey() + "}"; + if(oConvertUtils.isNotEmpty(title)){ + title = title.replace(str, entry.getValue()); + } + content = content.replace(str, entry.getValue()); + } + } + + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(content); + announcement.setSender(fromUser); + announcement.setPriority(CommonConstant.PRIORITY_M); + announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); + announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + sysAnnouncementMapper.insert(announcement); + // 2.插入用户通告阅读标记表记录 + String userId = toUser; + String[] userIds = userId.split(","); + String anntId = announcement.getId(); + for(int i=0;i map = message.getTemplateParam(); + String fromUser = message.getFromUser(); + String toUser = message.getToUser(); + String busId = message.getBusId(); + String busType = message.getBusType(); + + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ + throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板标题 + title = title==null?sysSmsTemplate.getTemplateName():title; + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if(map!=null) { + for (Map.Entry entry : map.entrySet()) { + String str = "${" + entry.getKey() + "}"; + title = title.replace(str, entry.getValue()); + content = content.replace(str, entry.getValue()); + } + } + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(content); + announcement.setSender(fromUser); + announcement.setPriority(CommonConstant.PRIORITY_M); + announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setMsgCategory(CommonConstant.MSG_CATEGORY_2); + announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + announcement.setBusId(busId); + announcement.setBusType(busType); + announcement.setOpenType(SysAnnmentTypeEnum.getByType(busType).getOpenType()); + announcement.setOpenPage(SysAnnmentTypeEnum.getByType(busType).getOpenPage()); + sysAnnouncementMapper.insert(announcement); + // 2.插入用户通告阅读标记表记录 + String userId = toUser; + String[] userIds = userId.split(","); + String anntId = announcement.getId(); + for(int i=0;i map = templateDTO.getTemplateParam(); + List sysSmsTemplates = sysMessageTemplateService.selectByCode(templateCode); + if(sysSmsTemplates==null||sysSmsTemplates.size()==0){ + throw new JeroBootException("消息模板不存在,模板编码:"+templateCode); + } + SysMessageTemplate sysSmsTemplate = sysSmsTemplates.get(0); + //模板内容 + String content = sysSmsTemplate.getTemplateContent(); + if(map!=null) { + for (Map.Entry entry : map.entrySet()) { + String str = "${" + entry.getKey() + "}"; + content = content.replace(str, entry.getValue()); + } + } + return content; + } + + @Override + public void updateSysAnnounReadFlag(String busType, String busId) { + SysAnnouncement announcement = sysAnnouncementMapper.selectOne(new QueryWrapper().eq("bus_type",busType).eq("bus_id",busId)); + if(announcement != null){ + LoginUser sysUser = (LoginUser)SecurityUtils.getSubject().getPrincipal(); + String userId = sysUser.getId(); + LambdaUpdateWrapper updateWrapper = new UpdateWrapper().lambda(); + updateWrapper.set(SysAnnouncementSend::getReadFlag, CommonConstant.HAS_READ_FLAG); + updateWrapper.set(SysAnnouncementSend::getReadTime, new Date()); + updateWrapper.last("where annt_id ='"+announcement.getId()+"' and user_id ='"+userId+"'"); + SysAnnouncementSend announcementSend = new SysAnnouncementSend(); + sysAnnouncementSendMapper.update(announcementSend, updateWrapper); + } + } + + /** + * 获取数据库类型 + * @param dataSource + * @return + * @throws SQLException + */ + private String getDatabaseTypeByDataSource(DataSource dataSource) throws SQLException{ + if("".equals(DB_TYPE)) { + Connection connection = dataSource.getConnection(); + try { + DatabaseMetaData md = connection.getMetaData(); + String dbType = md.getDatabaseProductName().toLowerCase(); + if(dbType.indexOf("mysql")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_MYSQL; + }else if(dbType.indexOf("oracle")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_ORACLE; + }else if(dbType.indexOf("sqlserver")>=0||dbType.indexOf("sql server")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_SQLSERVER; + }else if(dbType.indexOf("postgresql")>=0) { + DB_TYPE = DataBaseConstant.DB_TYPE_POSTGRESQL; + }else { + throw new JeroBootException("数据库类型:["+dbType+"]不识别!"); + } + } catch (Exception e) { + log.error(e.getMessage(), e); + }finally { + connection.close(); + } + } + return DB_TYPE; + + } + + @Override + public List queryAllDict() { + // 查询并排序 + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.orderByAsc("create_time"); + List dicts = sysDictService.list(queryWrapper); + // 封装成 model + List list = new ArrayList(); + for (SysDict dict : dicts) { + list.add(new DictModel(dict.getDictCode(), dict.getDictName())); + } + + return list; + } + + @Override + public List queryAllDSysCategory() { + List ls = categoryMapper.selectList(null); + List res = oConvertUtils.entityListToModelList(ls,SysCategoryModel.class); + return res; + } + + @Override + public List queryFilterTableDictInfo(String table, String text, String code, String filterSql) { + return sysDictService.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql); + } + + @Override + public List queryTableDictByKeys(String table, String text, String code, String[] keyArray) { + return sysDictService.queryTableDictByKeys(table,text,code,Joiner.on(",").join(keyArray)); + } + + @Override + public List queryAllUserBackCombo() { + List list = new ArrayList(); + List userList = userMapper.selectList(new QueryWrapper().eq("status",1).eq("del_flag",0)); + for(SysUser user : userList){ + ComboModel model = new ComboModel(); + model.setTitle(user.getRealname()); + model.setId(user.getId()); + model.setUsername(user.getUsername()); + list.add(model); + } + return list; + } + + @Override + public JSONObject queryAllUser(String userIds, Integer pageNo, Integer pageSize) { + JSONObject json = new JSONObject(); + QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); + List list = new ArrayList(); + Page page = new Page(pageNo, pageSize); + IPage pageList = userMapper.selectPage(page, queryWrapper); + for(SysUser user : pageList.getRecords()){ + ComboModel model = new ComboModel(); + model.setUsername(user.getUsername()); + model.setTitle(user.getRealname()); + model.setId(user.getId()); + model.setEmail(user.getEmail()); + if(oConvertUtils.isNotEmpty(userIds)){ + String[] temp = userIds.split(","); + for(int i = 0; i queryAllRole() { + List list = new ArrayList(); + List roleList = roleMapper.selectList(new QueryWrapper()); + for(SysRole role : roleList){ + ComboModel model = new ComboModel(); + model.setTitle(role.getRoleName()); + model.setId(role.getId()); + list.add(model); + } + return list; + } + + @Override + public List queryAllRole(String[] roleIds) { + List list = new ArrayList(); + List roleList = roleMapper.selectList(new QueryWrapper()); + for(SysRole role : roleList){ + ComboModel model = new ComboModel(); + model.setTitle(role.getRoleName()); + model.setId(role.getId()); + model.setRoleCode(role.getRoleCode()); + if(oConvertUtils.isNotEmpty(roleIds)) { + for (int i = 0; i < roleIds.length; i++) { + if (roleIds[i].equals(role.getId())) { + model.setChecked(true); + } + } + } + list.add(model); + } + return list; + } + + @Override + public List getRoleIdsByUsername(String username) { + return sysUserRoleMapper.getRoleIdByUserName(username); + } + + @Override + public String getDepartIdsByOrgCode(String orgCode) { + return departMapper.queryDepartIdByOrgCode(orgCode); + } + + @Override + public List getAllSysDepart() { + List departModelList = new ArrayList(); + List departList = departMapper.selectList(new QueryWrapper().eq("del_flag","0")); + for(SysDepart depart : departList){ + SysDepartModel model = new SysDepartModel(); + BeanUtils.copyProperties(depart,model); + departModelList.add(model); + } + return departModelList; + } + + @Override + public DynamicDataSourceModel getDynamicDbSourceById(String dbSourceId) { + SysDataSource dbSource = dataSourceService.getById(dbSourceId); + if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){ + String dbPassword = dbSource.getDbPassword(); + String decodedStr = SecurityUtil.jiemi(dbPassword); + dbSource.setDbPassword(decodedStr); + } + return new DynamicDataSourceModel(dbSource); + } + + @Override + public DynamicDataSourceModel getDynamicDbSourceByCode(String dbSourceCode) { + SysDataSource dbSource = dataSourceService.getOne(new LambdaQueryWrapper().eq(SysDataSource::getCode, dbSourceCode)); + if(dbSource!=null && StringUtils.isNotBlank(dbSource.getDbPassword())){ + String dbPassword = dbSource.getDbPassword(); + String decodedStr = SecurityUtil.jiemi(dbPassword); + dbSource.setDbPassword(decodedStr); + } + return new DynamicDataSourceModel(dbSource); + } + + @Override + public List getDeptHeadByDepId(String deptId) { + List userList = userMapper.selectList(new QueryWrapper().like("depart_ids",deptId).eq("status",1).eq("del_flag",0)); + List list = new ArrayList<>(); + for(SysUser user : userList){ + list.add(user.getUsername()); + } + return list; + } + + @Override + public void sendWebSocketMsg(String[] userIds, String cmd) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, cmd); + webSocket.sendMessage(userIds, obj.toJSONString()); + } + + @Override + public List queryAllUserByIds(String[] userIds) { + QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); + queryWrapper.in("id",userIds); + List loginUsers = new ArrayList<>(); + List sysUsers = userMapper.selectList(queryWrapper); + for (SysUser user:sysUsers) { + LoginUser loginUser=new LoginUser(); + BeanUtils.copyProperties(user, loginUser); + loginUsers.add(loginUser); + } + return loginUsers; + } + + /** + * 推送签到人员信息 + * @param userId + */ + @Override + public void meetingSignWebsocket(String userId) { + JSONObject obj = new JSONObject(); + obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_SIGN); + obj.put(WebsocketConst.MSG_USER_ID,userId); + //TODO 目前全部推送,后面修改 + webSocket.sendMessage(obj.toJSONString()); + } + + @Override + public List queryUserByNames(String[] userNames) { + QueryWrapper queryWrapper = new QueryWrapper().eq("status",1).eq("del_flag",0); + queryWrapper.in("username",userNames); + List loginUsers = new ArrayList<>(); + List sysUsers = userMapper.selectList(queryWrapper); + for (SysUser user:sysUsers) { + LoginUser loginUser=new LoginUser(); + BeanUtils.copyProperties(user, loginUser); + loginUsers.add(loginUser); + } + return loginUsers; + } + + @Override + public SysDepartModel selectAllById(String id) { + SysDepart sysDepart = sysDepartService.getById(id); + SysDepartModel sysDepartModel = new SysDepartModel(); + BeanUtils.copyProperties(sysDepart,sysDepartModel); + return sysDepartModel; + } + + @Override + public List queryDeptUsersByUserId(String userId) { + List userIds = new ArrayList<>(); + List userDepartList = sysUserDepartService.list(new QueryWrapper().eq("user_id",userId)); + if(userDepartList != null){ + //查找所属公司 + String orgCodes = ""; + for(SysUserDepart userDepart : userDepartList){ + //查询所属公司编码 + SysDepart depart = sysDepartService.getById(userDepart.getDepId()); + int length = YouBianCodeUtil.zhanweiLength; + String compyOrgCode = ""; + if(depart != null && depart.getOrgCode() != null){ + compyOrgCode = depart.getOrgCode().substring(0,length); + if(orgCodes.indexOf(compyOrgCode) == -1){ + orgCodes = orgCodes + "," + compyOrgCode; + } + } + } + if(oConvertUtils.isNotEmpty(orgCodes)){ + orgCodes = orgCodes.substring(1); + List listIds = departMapper.getSubDepIdsByOrgCodes(orgCodes.split(",")); + List userList = sysUserDepartService.list(new QueryWrapper().in("dep_id",listIds)); + for(SysUserDepart userDepart : userList){ + if(!userIds.contains(userDepart.getUserId())){ + userIds.add(userDepart.getUserId()); + } + } + } + } + return userIds; + } + + /** + * 查询用户拥有的角色集合 + * @param username + * @return + */ + @Override + public Set getUserRoleSet(String username) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleByUserName(username); + log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } + + /** + * 查询用户拥有的权限集合 + * @param username + * @return + */ + @Override + public Set getUserPermissionSet(String username) { + Set permissionSet = new HashSet<>(); + List permissionList = sysPermissionMapper.queryByUser(username); + for (SysPermission po : permissionList) { +// // TODO URL规则有问题? +// if (oConvertUtils.isNotEmpty(po.getUrl())) { +// permissionSet.add(po.getUrl()); +// } + if (oConvertUtils.isNotEmpty(po.getPerms())) { + permissionSet.add(po.getPerms()); + } + } + log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); + return permissionSet; + } + + /** + * 判断online菜单是否有权限 + * @param onlineAuthDTO + * @return + */ + @Override + public boolean hasOnlineAuth(OnlineAuthDTO onlineAuthDTO) { + String username = onlineAuthDTO.getUsername(); + List possibleUrl = onlineAuthDTO.getPossibleUrl(); + String onlineFormUrl = onlineAuthDTO.getOnlineFormUrl(); + //查询菜单 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermission::getDelFlag, 0); + query.in(SysPermission::getUrl, possibleUrl); + List permissionList = sysPermissionMapper.selectList(query); + if (permissionList == null || permissionList.size() == 0) { + //没有配置菜单 找online表单菜单地址 + SysPermission sysPermission = new SysPermission(); + sysPermission.setUrl(onlineFormUrl); + int count = sysPermissionMapper.queryCountByUsername(username, sysPermission); + if(count<=0){ + return false; + } + } else { + //找到菜单了 + boolean has = false; + for (SysPermission p : permissionList) { + int count = sysPermissionMapper.queryCountByUsername(username, p); + has = has || (count>0); + } + return has; + } + return true; + } + + /** + * 查询用户拥有的角色集合 common api 里面的接口实现 + * @param username + * @return + */ + @Override + public Set queryUserRoles(String username) { + return getUserRoleSet(username); + } + + /** + * 查询用户拥有的权限集合 common api 里面的接口实现 + * @param username + * @return + */ + @Override + public Set queryUserAuths(String username) { + return getUserPermissionSet(username); + } + + /** + * 36根据多个用户账号(逗号分隔),查询返回多个用户信息 + * @param usernames + * @return + */ + @Override + public List queryUsersByUsernames(String usernames) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getUsername,usernames.split(",")); + return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); + } + + @Override + public List queryUsersByIds(String ids) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysUser::getId,ids.split(",")); + return JSON.parseArray(JSON.toJSONString(userMapper.selectList(queryWrapper))).toJavaList(JSONObject.class); + } + + /** + * 37根据多个部门编码(逗号分隔),查询返回多个部门信息 + * @param orgCodes + * @return + */ + @Override + public List queryDepartsByOrgcodes(String orgCodes) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysDepart::getOrgCode,orgCodes.split(",")); + return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); + } + + @Override + public List queryDepartsByIds(String ids) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.in(SysDepart::getId,ids.split(",")); + return JSON.parseArray(JSON.toJSONString(sysDepartService.list(queryWrapper))).toJavaList(JSONObject.class); + } + + /** + * 发消息 + * @param fromUser + * @param toUser + * @param title + * @param msgContent + * @param setMsgCategory + */ + private void sendSysAnnouncement(String fromUser, String toUser, String title, String msgContent, String setMsgCategory) { + SysAnnouncement announcement = new SysAnnouncement(); + announcement.setTitile(title); + announcement.setMsgContent(msgContent); + announcement.setSender(fromUser); + announcement.setPriority(CommonConstant.PRIORITY_M); + announcement.setMsgType(CommonConstant.MSG_TYPE_UESR); + announcement.setSendStatus(CommonConstant.HAS_SEND); + announcement.setSendTime(new Date()); + announcement.setMsgCategory(setMsgCategory); + announcement.setDelFlag(String.valueOf(CommonConstant.DEL_FLAG_0)); + sysAnnouncementMapper.insert(announcement); + // 2.插入用户通告阅读标记表记录 + String userId = toUser; + String[] userIds = userId.split(","); + String anntId = announcement.getId(); + for(int i=0;i listParentDepartsByDepId(String departId) { + return sysDepartService.listParentDepartsByDepId(departId); + } + + + /** + * 42根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 8:54 + * @param departId 部门id + * @return JSONObject + */ + @Override + public List listSonDepartsByDepId(String departId) { + return sysDepartService.listSonDepartsByDepId(departId); + } +} \ No newline at end of file diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java new file mode 100644 index 00000000..f216f32a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java @@ -0,0 +1,207 @@ +package com.jero.modules.system.service.impl; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.jero.common.constant.FillRuleConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.FillRuleUtil; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysCategory; +import com.jero.modules.system.mapper.SysCategoryMapper; +import com.jero.modules.system.model.TreeSelectModel; +import com.jero.modules.system.service.ISysCategoryService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Transactional; + +/** + * @Description: 分类字典 + * @Author: jero-boot + * @Date: 2019-05-29 + * @Version: V1.0 + */ +@Service +public class SysCategoryServiceImpl extends ServiceImpl implements ISysCategoryService { + + @Override + public void addSysCategory(SysCategory sysCategory) { + String categoryCode = ""; + String categoryPid = ISysCategoryService.ROOT_PID_VALUE; + String parentCode = null; + if(oConvertUtils.isNotEmpty(sysCategory.getPid())){ + categoryPid = sysCategory.getPid(); + + //PID 不是根节点 说明需要设置父节点 hasChild 为1 + if(!ISysCategoryService.ROOT_PID_VALUE.equals(categoryPid)){ + SysCategory parent = baseMapper.selectById(categoryPid); + parentCode = parent.getCode(); + if(parent!=null && !"1".equals(parent.getHasChild())){ + parent.setHasChild("1"); + baseMapper.updateById(parent); + } + } + } + //update-begin--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + JSONObject formData = new JSONObject(); + formData.put("pid",categoryPid); + categoryCode = (String) FillRuleUtil.executeRule(FillRuleConstant.CATEGORY,formData); + //update-end--Author:baihailong Date:20191209 for:分类字典编码规则生成器做成公用配置 + sysCategory.setCode(categoryCode); + sysCategory.setPid(categoryPid); + baseMapper.insert(sysCategory); + } + + @Override + public void updateSysCategory(SysCategory sysCategory) { + if(oConvertUtils.isEmpty(sysCategory.getPid())){ + sysCategory.setPid(ISysCategoryService.ROOT_PID_VALUE); + }else{ + //如果当前节点父ID不为空 则设置父节点的hasChild 为1 + SysCategory parent = baseMapper.selectById(sysCategory.getPid()); + if(parent!=null && !"1".equals(parent.getHasChild())){ + parent.setHasChild("1"); + baseMapper.updateById(parent); + } + } + baseMapper.updateById(sysCategory); + } + + @Override + public List queryListByCode(String pcode) throws JeroBootException{ + String pid = ROOT_PID_VALUE; + if(oConvertUtils.isNotEmpty(pcode)) { + List list = baseMapper.selectList(new LambdaQueryWrapper().eq(SysCategory::getCode, pcode)); + if(list==null || list.size() ==0) { + throw new JeroBootException("该编码【"+pcode+"】不存在,请核实!"); + } + if(list.size()>1) { + throw new JeroBootException("该编码【"+pcode+"】存在多个,请核实!"); + } + pid = list.get(0).getId(); + } + return baseMapper.queryListByPid(pid,null); + } + + @Override + public List queryListByPid(String pid) { + if(oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid,null); + } + + @Override + public List queryListByPid(String pid, Map condition) { + if(oConvertUtils.isEmpty(pid)) { + pid = ROOT_PID_VALUE; + } + return baseMapper.queryListByPid(pid,condition); + } + + @Override + public String queryIdByCode(String code) { + return baseMapper.queryIdByCode(code); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteSysCategory(String ids) { + String allIds = this.queryTreeChildIds(ids); + String pids = this.queryTreePids(ids); + //1.删除时将节点下所有子节点一并删除 + this.baseMapper.deleteBatchIds(Arrays.asList(allIds.split(","))); + //2.将父节点中已经没有下级的节点,修改为没有子节点 + if(oConvertUtils.isNotEmpty(pids)){ + LambdaUpdateWrapper updateWrapper = new UpdateWrapper() + .lambda() + .in(SysCategory::getId,Arrays.asList(pids.split(","))) + .set(SysCategory::getHasChild,"0"); + this.update(updateWrapper); + } + } + + /** + * 查询节点下所有子节点 + * @param ids + * @return + */ + private String queryTreeChildIds(String ids) { + //获取id数组 + String[] idArr = ids.split(","); + StringBuffer sb = new StringBuffer(); + for (String pidVal : idArr) { + if(pidVal != null){ + if(!sb.toString().contains(pidVal)){ + if(sb.toString().length() > 0){ + sb.append(","); + } + sb.append(pidVal); + this.getTreeChildIds(pidVal,sb); + } + } + } + return sb.toString(); + } + + /** + * 查询需修改标识的父节点ids + * @param ids + * @return + */ + private String queryTreePids(String ids) { + StringBuffer sb = new StringBuffer(); + //获取id数组 + String[] idArr = ids.split(","); + for (String id : idArr) { + if(id != null){ + SysCategory category = this.baseMapper.selectById(id); + //根据id查询pid值 + String metaPid = category.getPid(); + //查询此节点上一级是否还有其他子节点 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid,metaPid); + queryWrapper.notIn(SysCategory::getId,Arrays.asList(idArr)); + List dataList = this.baseMapper.selectList(queryWrapper); + if((dataList == null || dataList.size()==0) && !Arrays.asList(idArr).contains(metaPid) + && !sb.toString().contains(metaPid)){ + //如果当前节点原本有子节点 现在木有了,更新状态 + sb.append(metaPid).append(","); + } + } + } + if(sb.toString().endsWith(",")){ + sb = sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } + + /** + * 递归 根据父id获取子节点id + * @param pidVal + * @param sb + * @return + */ + private StringBuffer getTreeChildIds(String pidVal,StringBuffer sb){ + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCategory::getPid,pidVal); + List dataList = baseMapper.selectList(queryWrapper); + if(dataList != null && dataList.size()>0){ + for(SysCategory category : dataList) { + if(!sb.toString().contains(category.getId())){ + sb.append(",").append(category.getId()); + } + this.getTreeChildIds(category.getId(), sb); + } + } + return sb; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java new file mode 100644 index 00000000..eb2b5fff --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCheckRuleServiceImpl.java @@ -0,0 +1,98 @@ +package com.jero.modules.system.service.impl; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang.StringUtils; +import com.jero.modules.system.entity.SysCheckRule; +import com.jero.modules.system.mapper.SysCheckRuleMapper; +import com.jero.modules.system.service.ISysCheckRuleService; +import org.springframework.stereotype.Service; + +import java.util.regex.Pattern; + +/** + * @Description: 编码校验规则 + * @Author: jero-boot + * @Date: 2020-02-04 + * @Version: V1.0 + */ +@Service +public class SysCheckRuleServiceImpl extends ServiceImpl implements ISysCheckRuleService { + + /** + * 位数特殊符号,用于检查整个值,而不是裁剪某一段 + */ + private final String CHECK_ALL_SYMBOL = "*"; + + @Override + public SysCheckRule getByCode(String ruleCode) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysCheckRule::getRuleCode, ruleCode); + return super.getOne(queryWrapper); + } + + /** + * 通过用户设定的自定义校验规则校验传入的值 + * + * @param checkRule + * @param value + * @return 返回 null代表通过校验,否则就是返回的错误提示文本 + */ + @Override + public JSONObject checkValue(SysCheckRule checkRule, String value) { + if (checkRule != null && StringUtils.isNotBlank(value)) { + String ruleJson = checkRule.getRuleJson(); + if (StringUtils.isNotBlank(ruleJson)) { + // 开始截取的下标,根据规则的顺序递增,但是 * 号不计入递增范围 + int beginIndex = 0; + JSONArray rules = JSON.parseArray(ruleJson); + for (int i = 0; i < rules.size(); i++) { + JSONObject result = new JSONObject(); + JSONObject rule = rules.getJSONObject(i); + // 位数 + String digits = rule.getString("digits"); + result.put("digits", digits); + // 验证规则 + String pattern = rule.getString("pattern"); + result.put("pattern", pattern); + // 未通过时的提示文本 + String message = rule.getString("message"); + result.put("message", message); + + // 根据用户设定的区间,截取字符串进行验证 + String checkValue; + // 是否检查整个值而不截取 + if (CHECK_ALL_SYMBOL.equals(digits)) { + checkValue = value; + } else { + int num = Integer.parseInt(digits); + int endIndex = beginIndex + num; + // 如果结束下标大于给定的值的长度,则取到最后一位 + endIndex = endIndex > value.length() ? value.length() : endIndex; + // 如果开始下标大于结束下标,则说明用户还尚未输入到该位置,直接赋空值 + if (beginIndex > endIndex) { + checkValue = ""; + } else { + checkValue = value.substring(beginIndex, endIndex); + } + result.put("beginIndex", beginIndex); + result.put("endIndex", endIndex); + beginIndex += num; + } + result.put("checkValue", checkValue); + boolean passed = Pattern.matches(pattern, checkValue); + result.put("passed", passed); + // 如果没有通过校验就返回错误信息 + if (!passed) { + return result; + } + } + } + } + return null; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysConfusionServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysConfusionServiceImpl.java new file mode 100644 index 00000000..e8e3a900 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysConfusionServiceImpl.java @@ -0,0 +1,89 @@ +package com.jero.modules.system.service.impl; + +import com.jero.modules.system.entity.SysConfusion; +import com.jero.modules.system.mapper.SysConfusionMapper; +import com.jero.modules.system.service.ISysConfusionService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 混淆表 + * @Author: jero-boot + * @Date: 2021-08-05 + * @Version: V1.0 + */ +@Service +public class SysConfusionServiceImpl extends ServiceImpl implements ISysConfusionService { + + /** + * 保存 + * + * @param sysConfusion + * @return + */ + @Override + public void add(SysConfusion sysConfusion) { + LocalDateTime now = LocalDateTime.now(); + sysConfusion.setCreateTime(now); + sysConfusion.setUpdateTime(now); + save(sysConfusion); + } + + /** + * 更新 + * + * @param sysConfusion + * @return + */ + @Override + public void editById(SysConfusion sysConfusion) { + LocalDateTime now = LocalDateTime.now(); + sysConfusion.setUpdateTime(now); + saveOrUpdate(sysConfusion); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public SysConfusion queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataLogServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataLogServiceImpl.java new file mode 100644 index 00000000..b9c8fbcc --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataLogServiceImpl.java @@ -0,0 +1,33 @@ +package com.jero.modules.system.service.impl; + +import com.jero.modules.system.entity.SysDataLog; +import com.jero.modules.system.mapper.SysDataLogMapper; +import com.jero.modules.system.service.ISysDataLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +@Service +public class SysDataLogServiceImpl extends ServiceImpl implements ISysDataLogService { + @Autowired + private SysDataLogMapper logMapper; + + /** + * 添加数据日志 + */ + @Override + public void addDataLog(String tableName, String dataId, String dataContent) { + String versionNumber = "0"; + String dataVersion = logMapper.queryMaxDataVer(tableName, dataId); + if(dataVersion != null ) { + versionNumber = String.valueOf(Integer.parseInt(dataVersion)+1); + } + SysDataLog log = new SysDataLog(); + log.setDataTable(tableName); + log.setDataId(dataId); + log.setDataContent(dataContent); + log.setDataVersion(versionNumber); + this.save(log); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataSourceServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataSourceServiceImpl.java new file mode 100644 index 00000000..8e36a73c --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDataSourceServiceImpl.java @@ -0,0 +1,18 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.modules.system.entity.SysDataSource; +import com.jero.modules.system.mapper.SysDataSourceMapper; +import com.jero.modules.system.service.ISysDataSourceService; +import org.springframework.stereotype.Service; + +/** + * @Description: 多数据源管理 + * @Author: jero-boot + * @Date: 2019-12-25 + * @Version: V1.0 + */ +@Service +public class SysDataSourceServiceImpl extends ServiceImpl implements ISysDataSourceService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java new file mode 100644 index 00000000..032b0697 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartPermissionServiceImpl.java @@ -0,0 +1,111 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepartPermission; +import com.jero.modules.system.entity.SysDepartRole; +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.jero.modules.system.entity.SysPermissionDataRule; +import com.jero.modules.system.mapper.SysDepartPermissionMapper; +import com.jero.modules.system.mapper.SysDepartRoleMapper; +import com.jero.modules.system.mapper.SysDepartRolePermissionMapper; +import com.jero.modules.system.mapper.SysPermissionDataRuleMapper; +import com.jero.modules.system.service.ISysDepartPermissionService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 部门权限表 + * @Author: jero-boot + * @Date: 2020-02-11 + * @Version: V1.0 + */ +@Service +public class SysDepartPermissionServiceImpl extends ServiceImpl implements ISysDepartPermissionService { + @Resource + private SysPermissionDataRuleMapper ruleMapper; + + @Resource + private SysDepartRoleMapper sysDepartRoleMapper; + + @Resource + private SysDepartRolePermissionMapper departRolePermissionMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveDepartPermission(String departId, String permissionIds, String lastPermissionIds) { + List add = getDiff(lastPermissionIds,permissionIds); + if(add!=null && add.size()>0) { + List list = new ArrayList(); + for (String p : add) { + if(oConvertUtils.isNotEmpty(p)) { + SysDepartPermission rolepms = new SysDepartPermission(departId, p); + list.add(rolepms); + } + } + this.saveBatch(list); + } + List delete = getDiff(permissionIds,lastPermissionIds); + if(delete!=null && delete.size()>0) { + for (String permissionId : delete) { + this.remove(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId)); + //删除部门权限时,删除部门角色中已授权的权限 + List sysDepartRoleList = sysDepartRoleMapper.selectList(new LambdaQueryWrapper().eq(SysDepartRole::getDepartId,departId)); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + departRolePermissionMapper.delete(new LambdaQueryWrapper().eq(SysDepartRolePermission::getPermissionId,permissionId)); + } + } + } + } + + @Override + public List getPermRuleListByDeptIdAndPermId(String departId, String permissionId) { + SysDepartPermission departPermission = this.getOne(new QueryWrapper().lambda().eq(SysDepartPermission::getDepartId, departId).eq(SysDepartPermission::getPermissionId, permissionId)); + if(departPermission != null){ + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.in(SysPermissionDataRule::getId, Arrays.asList(departPermission.getDataRuleIds().split(","))); + query.orderByDesc(SysPermissionDataRule::getCreateTime); + List permRuleList = this.ruleMapper.selectList(query); + return permRuleList; + }else{ + return null; + } + } + + /** + * 从diff中找出main中没有的元素 + * @param main + * @param diff + * @return + */ + private List getDiff(String main,String diff){ + if(oConvertUtils.isEmpty(diff)) { + return null; + } + if(oConvertUtils.isEmpty(main)) { + return Arrays.asList(diff.split(",")); + } + + String[] mainArr = main.split(","); + String[] diffArr = diff.split(","); + Map map = new HashMap<>(); + for (String string : mainArr) { + map.put(string, 1); + } + List res = new ArrayList(); + for (String key : diffArr) { + if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + res.add(key); + } + } + return res; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java new file mode 100644 index 00000000..3bf3d7ef --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRolePermissionServiceImpl.java @@ -0,0 +1,87 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.util.IPUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepartRolePermission; +import com.jero.modules.system.mapper.SysDepartRolePermissionMapper; +import com.jero.modules.system.service.ISysDepartRolePermissionService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +/** + * @Description: 部门角色权限 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +@Service +public class SysDepartRolePermissionServiceImpl extends ServiceImpl implements ISysDepartRolePermissionService { + + @Override + public void saveDeptRolePermission(String roleId, String permissionIds, String lastPermissionIds) { + String ip = ""; + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //获取IP地址 + ip = IPUtils.getIpAddr(request); + } catch (Exception e) { + ip = "127.0.0.1"; + } + List add = getDiff(lastPermissionIds,permissionIds); + if(add!=null && add.size()>0) { + List list = new ArrayList(); + for (String p : add) { + if(oConvertUtils.isNotEmpty(p)) { + SysDepartRolePermission rolepms = new SysDepartRolePermission(roleId, p); + rolepms.setOperateDate(new Date()); + rolepms.setOperateIp(ip); + list.add(rolepms); + } + } + this.saveBatch(list); + } + + List delete = getDiff(permissionIds,lastPermissionIds); + if(delete!=null && delete.size()>0) { + for (String permissionId : delete) { + this.remove(new QueryWrapper().lambda().eq(SysDepartRolePermission::getRoleId, roleId).eq(SysDepartRolePermission::getPermissionId, permissionId)); + } + } + } + + /** + * 从diff中找出main中没有的元素 + * @param main + * @param diff + * @return + */ + private List getDiff(String main, String diff){ + if(oConvertUtils.isEmpty(diff)) { + return null; + } + if(oConvertUtils.isEmpty(main)) { + return Arrays.asList(diff.split(",")); + } + + String[] mainArr = main.split(","); + String[] diffArr = diff.split(","); + Map map = new HashMap<>(); + for (String string : mainArr) { + map.put(string, 1); + } + List res = new ArrayList(); + for (String key : diffArr) { + if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + res.add(key); + } + } + return res; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleServiceImpl.java new file mode 100644 index 00000000..a3f859a2 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleServiceImpl.java @@ -0,0 +1,25 @@ +package com.jero.modules.system.service.impl; + +import com.jero.modules.system.entity.SysDepartRole; +import com.jero.modules.system.mapper.SysDepartRoleMapper; +import com.jero.modules.system.service.ISysDepartRoleService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.List; + +/** + * @Description: 部门角色 + * @Author: jero-boot + * @Date: 2020-02-12 + * @Version: V1.0 + */ +@Service +public class SysDepartRoleServiceImpl extends ServiceImpl implements ISysDepartRoleService { + + @Override + public List queryDeptRoleByDeptAndUser(String orgCode, String userId) { + return this.baseMapper.queryDeptRoleByDeptAndUser(orgCode,userId); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleUserServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleUserServiceImpl.java new file mode 100644 index 00000000..900a850d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartRoleUserServiceImpl.java @@ -0,0 +1,93 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepartRole; +import com.jero.modules.system.entity.SysDepartRoleUser; +import com.jero.modules.system.mapper.SysDepartRoleMapper; +import com.jero.modules.system.mapper.SysDepartRoleUserMapper; +import com.jero.modules.system.service.ISysDepartRoleUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @Description: 部门角色人员信息 + * @Author: jero-boot + * @Date: 2020-02-13 + * @Version: V1.0 + */ +@Service +public class SysDepartRoleUserServiceImpl extends ServiceImpl implements ISysDepartRoleUserService { + @Autowired + private SysDepartRoleMapper sysDepartRoleMapper; + + @Override + public void deptRoleUserAdd(String userId, String newRoleId, String oldRoleId) { + List add = getDiff(oldRoleId,newRoleId); + if(add!=null && add.size()>0) { + List list = new ArrayList<>(); + for (String roleId : add) { + if(oConvertUtils.isNotEmpty(roleId)) { + SysDepartRoleUser rolepms = new SysDepartRoleUser(userId, roleId); + list.add(rolepms); + } + } + this.saveBatch(list); + } + List remove = getDiff(newRoleId,oldRoleId); + if(remove!=null && remove.size()>0) { + for (String roleId : remove) { + this.remove(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, userId).eq(SysDepartRoleUser::getDroleId, roleId)); + } + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void removeDeptRoleUser(List userIds, String depId) { + for(String userId : userIds){ + List sysDepartRoleList = sysDepartRoleMapper.selectList(new QueryWrapper().eq("depart_id",depId)); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + QueryWrapper query = new QueryWrapper<>(); + query.eq("user_id",userId).in("drole_id",roleIds); + this.remove(query); + } + } + } + + /** + * 从diff中找出main中没有的元素 + * @param main + * @param diff + * @return + */ + private List getDiff(String main, String diff){ + if(oConvertUtils.isEmpty(diff)) { + return null; + } + if(oConvertUtils.isEmpty(main)) { + return Arrays.asList(diff.split(",")); + } + + String[] mainArr = main.split(","); + String[] diffArr = diff.split(","); + Map map = new HashMap<>(); + for (String string : mainArr) { + map.put(string, 1); + } + List res = new ArrayList(); + for (String key : diffArr) { + if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + res.add(key); + } + } + return res; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java new file mode 100644 index 00000000..be8394be --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDepartServiceImpl.java @@ -0,0 +1,530 @@ +package com.jero.modules.system.service.impl; + +import java.util.*; + +import com.alibaba.fastjson.JSONObject; +import com.jero.common.system.vo.SysDepartTreeModel; +import org.apache.commons.lang.StringUtils; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.constant.FillRuleConstant; +import com.jero.common.util.FillRuleUtil; +import com.jero.common.util.YouBianCodeUtil; +import com.jero.modules.system.entity.*; +import com.jero.modules.system.mapper.*; +import com.jero.modules.system.model.DepartIdModel; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.util.FindsDepartsChildrenUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import io.netty.util.internal.StringUtil; + +/** + *

+ * 部门表 服务实现类 + *

+ * + * @Author Steve + * @Since 2019-01-22 + */ +@Service +public class SysDepartServiceImpl extends ServiceImpl implements ISysDepartService { + + @Autowired + private SysUserDepartMapper userDepartMapper; + @Autowired + private SysDepartRoleMapper sysDepartRoleMapper; + @Autowired + private SysDepartPermissionMapper departPermissionMapper; + @Autowired + private SysDepartRolePermissionMapper departRolePermissionMapper; + @Autowired + private SysDepartRoleUserMapper departRoleUserMapper; + @Autowired + private SysUserMapper sysUserMapper; + + @Override + public List queryMyDeptTreeList(String departIds) { + //根据部门id获取所负责部门 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + for(int i=0;i listDepts = this.list(query); + for(int i=0;i listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listDepts); + return listResult; + } + + /** + * queryTreeList 对应 queryTreeList 查询所有的部门数据,以树结构形式响应给前端 + */ + @Cacheable(value = CacheConstant.SYS_DEPARTS_CACHE) + @Override + public List queryTreeList() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); + return listResult; + } + + @Cacheable(value = CacheConstant.SYS_DEPART_IDS_CACHE) + @Override + public List queryDepartIdTreeList() { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToDepartIdTreeList(list); + return listResult; + } + + /** + * saveDepartData 对应 add 保存用户在页面添加的新的部门对象数据 + */ + @Override + @Transactional + public void saveDepartData(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + if (sysDepart.getParentId() == null) { + sysDepart.setParentId(""); + } + String s = UUID.randomUUID().toString().replace("-", ""); + sysDepart.setId(s); + // 先判断该对象有无父级ID,有则意味着不是最高级,否则意味着是最高级 + // 获取父级ID + String parentId = sysDepart.getParentId(); + //update-begin--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 + JSONObject formData = new JSONObject(); + formData.put("parentId",parentId); + String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.DEPART,formData); + //update-end--Author:baihailong Date:20191209 for:部门编码规则生成器做成公用配置 + sysDepart.setOrgCode(codeArray[0]); + String orgType = codeArray[1]; + sysDepart.setOrgType(String.valueOf(orgType)); + sysDepart.setCreateTime(new Date()); + sysDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString()); + this.save(sysDepart); + } + + } + + /** + * saveDepartData 的调用方法,生成部门编码和部门类型(作废逻辑) + * @deprecated + * @param parentId + * @return + */ + private String[] generateOrgCode(String parentId) { + //update-begin--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + LambdaQueryWrapper query1 = new LambdaQueryWrapper(); + String[] strArray = new String[2]; + // 创建一个List集合,存储查询返回的所有SysDepart对象 + List departList = new ArrayList<>(); + // 定义新编码字符串 + String newOrgCode = ""; + // 定义旧编码字符串 + String oldOrgCode = ""; + // 定义部门类型 + String orgType = ""; + // 如果是最高级,则查询出同级的org_code, 调用工具类生成编码并返回 + if (StringUtil.isNullOrEmpty(parentId)) { + // 线判断数据库中的表是否为空,空则直接返回初始编码 + query1.eq(SysDepart::getParentId, "").or().isNull(SysDepart::getParentId); + query1.orderByDesc(SysDepart::getOrgCode); + departList = this.list(query1); + if(departList == null || departList.size() == 0) { + strArray[0] = YouBianCodeUtil.getNextYouBianCode(null); + strArray[1] = "1"; + return strArray; + }else { + SysDepart depart = departList.get(0); + oldOrgCode = depart.getOrgCode(); + orgType = depart.getOrgType(); + newOrgCode = YouBianCodeUtil.getNextYouBianCode(oldOrgCode); + } + } else { // 反之则查询出所有同级的部门,获取结果后有两种情况,有同级和没有同级 + // 封装查询同级的条件 + query.eq(SysDepart::getParentId, parentId); + // 降序排序 + query.orderByDesc(SysDepart::getOrgCode); + // 查询出同级部门的集合 + List parentList = this.list(query); + // 查询出父级部门 + SysDepart depart = this.getById(parentId); + // 获取父级部门的Code + String parentCode = depart.getOrgCode(); + // 根据父级部门类型算出当前部门的类型 + orgType = String.valueOf(Integer.valueOf(depart.getOrgType()) + 1); + // 处理同级部门为null的情况 + if (parentList == null || parentList.size() == 0) { + // 直接生成当前的部门编码并返回 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, null); + } else { //处理有同级部门的情况 + // 获取同级部门的编码,利用工具类 + String subCode = parentList.get(0).getOrgCode(); + // 返回生成的当前部门编码 + newOrgCode = YouBianCodeUtil.getSubYouBianCode(parentCode, subCode); + } + } + // 返回最终封装了部门编码和部门类型的数组 + strArray[0] = newOrgCode; + strArray[1] = orgType; + return strArray; + //update-end--Author:Steve Date:20190201 for:组织机构添加数据代码调整 + } + + + /** + * removeDepartDataById 对应 delete方法 根据ID删除相关部门数据 + * + */ + /* + * @Override + * + * @Transactional public boolean removeDepartDataById(String id) { + * System.out.println("要删除的ID 为=============================>>>>>"+id); boolean + * flag = this.removeById(id); return flag; } + */ + + /** + * updateDepartDataById 对应 edit 根据部门主键来更新对应的部门数据 + */ + @Override + @Transactional + public Boolean updateDepartDataById(SysDepart sysDepart, String username) { + if (sysDepart != null && username != null) { + sysDepart.setUpdateTime(new Date()); + sysDepart.setUpdateBy(username); + this.updateById(sysDepart); + return true; + } else { + return false; + } + + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteBatchWithChildren(List ids) { + List idList = new ArrayList(); + for(String id: ids) { + idList.add(id); + this.checkChildrenExists(id, idList); + } + this.removeByIds(idList); + //根据部门id获取部门角色id + List roleIdList = new ArrayList<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); + List depRoleList = sysDepartRoleMapper.selectList(query); + for(SysDepartRole deptRole : depRoleList){ + roleIdList.add(deptRole.getId()); + } + //根据部门id删除用户与部门关系 + userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId,idList)); + //根据部门id删除部门授权 + departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); + //根据部门id删除部门角色 + sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId,idList)); + if(roleIdList != null && roleIdList.size()>0){ + //根据角色id删除部门角色授权 + departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId,roleIdList)); + //根据角色id删除部门角色用户信息 + departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId,roleIdList)); + } + } + + @Override + public List getSubDepIdsByDepId(String departId) { + return this.baseMapper.getSubDepIdsByDepId(departId); + } + + @Override + public List getMySubDepIdsByDepId(String departIds) { + //根据部门id获取所负责部门 + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + return this.baseMapper.getSubDepIdsByOrgCodes(codeArr); + } + + /** + *

+ * 根据关键字搜索相关的部门数据 + *

+ */ + @Override + public List searhBy(String keyWord,String myDeptSearch,String departIds) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + List newList = new ArrayList<>(); + //myDeptSearch不为空时为我的部门搜索,只搜索所负责部门 + if(!StringUtil.isNullOrEmpty(myDeptSearch)){ + //departIds 为空普通用户或没有管理部门 + if(StringUtil.isNullOrEmpty(departIds)){ + return newList; + } + //根据部门id获取所负责部门 + String[] codeArr = this.getMyDeptParentOrgCode(departIds); + for(int i=0;i departList = this.list(query); + if(departList.size() > 0) { + for(SysDepart depart : departList) { + SysDepartTreeModel sysDepartTreeModel = new SysDepartTreeModel(); + // 将sysDepart转换为sysDepartTreeModel + FindsDepartsChildrenUtil.convertSysDepartToSysDepartTreeModel(depart, sysDepartTreeModel); + model = sysDepartTreeModel; + model.setChildren(null); + //update-end--Author:huangzhilin Date:20140417 for:[bugfree号]组织机构搜索功回显优化---------------------- + newList.add(model); + } + return newList; + } + return null; + } + + /** + * 根据部门id删除并且删除其可能存在的子级任何部门 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean delete(String id) { + List idList = new ArrayList<>(); + idList.add(id); + this.checkChildrenExists(id, idList); + //清空部门树内存 + //FindsDepartsChildrenUtil.clearDepartIdModel(); + boolean ok = this.removeByIds(idList); + //根据部门id获取部门角色id + List roleIdList = new ArrayList<>(); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.select(SysDepartRole::getId).in(SysDepartRole::getDepartId, idList); + List depRoleList = sysDepartRoleMapper.selectList(query); + for(SysDepartRole deptRole : depRoleList){ + roleIdList.add(deptRole.getId()); + } + //根据部门id删除用户与部门关系 + userDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getDepId,idList)); + //根据部门id删除部门授权 + departPermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartPermission::getDepartId,idList)); + //根据部门id删除部门角色 + sysDepartRoleMapper.delete(new LambdaQueryWrapper().in(SysDepartRole::getDepartId,idList)); + if(roleIdList != null && roleIdList.size()>0){ + //根据角色id删除部门角色授权 + departRolePermissionMapper.delete(new LambdaQueryWrapper().in(SysDepartRolePermission::getRoleId,roleIdList)); + //根据角色id删除部门角色用户信息 + departRoleUserMapper.delete(new LambdaQueryWrapper().in(SysDepartRoleUser::getDroleId,roleIdList)); + } + return ok; + } + + /** + * delete 方法调用 + * @param id + * @param idList + */ + private void checkChildrenExists(String id, List idList) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getParentId,id); + List departList = this.list(query); + if(departList != null && departList.size() > 0) { + for(SysDepart depart : departList) { + idList.add(depart.getId()); + this.checkChildrenExists(depart.getId(), idList); + } + } + } + + @Override + public List queryUserDeparts(String userId) { + return baseMapper.queryUserDeparts(userId); + } + + @Override + public List queryDepartsByUsername(String username) { + return baseMapper.queryDepartsByUsername(username); + } + + /** + * 根据用户所负责部门ids获取父级部门编码 + * @param departIds + * @return + */ + private String[] getMyDeptParentOrgCode(String departIds){ + //根据部门id查询所负责部门 + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + query.in(SysDepart::getId, Arrays.asList(departIds.split(","))); + query.orderByAsc(SysDepart::getOrgCode); + List list = this.list(query); + //查找根部门 + if(list == null || list.size()==0){ + return null; + } + String orgCode = this.getMyDeptParentNode(list); + String[] codeArr = orgCode.split(","); + return codeArr; + } + + /** + * 获取负责部门父节点 + * @param list + * @return + */ + private String getMyDeptParentNode(List list){ + Map map = new HashMap<>(); + //1.先将同一公司归类 + for(SysDepart dept : list){ + String code = dept.getOrgCode().substring(0,3); + if(map.containsKey(code)){ + String mapCode = map.get(code)+","+dept.getOrgCode(); + map.put(code,mapCode); + }else{ + map.put(code,dept.getOrgCode()); + } + } + StringBuffer parentOrgCode = new StringBuffer(); + //2.获取同一公司的根节点 + for(String str : map.values()){ + String[] arrStr = str.split(","); + parentOrgCode.append(",").append(this.getMinLengthNode(arrStr)); + } + return parentOrgCode.substring(1); + } + + /** + * 获取同一公司中部门编码长度最小的部门 + * @param str + * @return + */ + private String getMinLengthNode(String[] str){ + int min =str[0].length(); + String orgCode = str[0]; + for(int i =1;i queryTreeByKeyWord(String keyWord) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString()); + query.orderByAsc(SysDepart::getDepartOrder); + List list = this.list(query); + // 调用wrapTreeDataToTreeList方法生成树状数据 + List listResult = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); + List treelist =new ArrayList<>(); + if(StringUtils.isNotBlank(keyWord)){ + this.getTreeByKeyWord(keyWord,listResult,treelist); + }else{ + return listResult; + } + return treelist; + } + + /** + * 根据关键字筛选部门信息 + * @param keyWord + * @return + */ + public void getTreeByKeyWord(String keyWord,List allResult,List newResult){ + for (SysDepartTreeModel model:allResult) { + if (model.getDepartName().contains(keyWord)){ + newResult.add(model); + continue; + }else if(model.getChildren()!=null){ + getTreeByKeyWord(keyWord,model.getChildren(),newResult); + } + } + } + /** + * 根据部门id查询部门所有的父级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 9:10 + * @param departId 部门id + * @return java.util.List + */ + @Override + public List listParentDepartsByDepId(String departId) { + List list = new ArrayList<>(); + SysDepart depart = this.getById(departId); + String parentId = depart.getParentId(); + // 查询父部门 + SysDepart parentDepart = this.getById(parentId); + while (parentDepart != null){ + list.add(parentDepart); + parentId = parentDepart.getParentId(); + parentDepart = this.getById(parentId); + } + Collections.reverse(list); + // 调用wrapTreeDataToTreeList方法生成树状数据 + return FindsDepartsChildrenUtil.wrapTreeDataToTreeList(list); + } + + /** + * 根据部门id查询部门所有的子级(不包含自己) + * @author 马志朝 + * @date 2021/3/24 9:11 + * @param departId 部门id + * @return java.util.List + */ + @Override + public List listSonDepartsByDepId(String departId) { + List realResult = new ArrayList<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + //获取直接子节点 + List sonDepartList = this.list(queryWrapper.eq(SysDepart::getParentId, departId)); + for(SysDepart depart : sonDepartList){ + String tempId = depart.getId(); + List listResult = new ArrayList<>(); + // 将每个直接子节点的parentId设为空来构成树的头节点 + depart.setParentId(null); + listResult.add(depart); + List idListTemp = new ArrayList<>(); + this.checkChildrenExists(tempId, idListTemp); + idListTemp.forEach(id -> { + SysDepart sysDepartTemp = this.getById(id); + listResult.add(sysDepartTemp); + }); + List sysDepartTreeModels = FindsDepartsChildrenUtil.wrapTreeDataToTreeList(listResult); + realResult.addAll(sysDepartTreeModels); + } + + return realResult; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictItemServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictItemServiceImpl.java new file mode 100644 index 00000000..11922993 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictItemServiceImpl.java @@ -0,0 +1,30 @@ +package com.jero.modules.system.service.impl; + +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.mapper.SysDictItemMapper; +import com.jero.modules.system.service.ISysDictItemService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + *

+ * 服务实现类 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@Service +public class SysDictItemServiceImpl extends ServiceImpl implements ISysDictItemService { + + @Autowired + private SysDictItemMapper sysDictItemMapper; + + @Override + public List selectItemsByMainId(String mainId) { + return sysDictItemMapper.selectItemsByMainId(mainId); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java new file mode 100644 index 00000000..5b7c7eb5 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysDictServiceImpl.java @@ -0,0 +1,313 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.vo.DictModel; +import com.jero.common.system.vo.DictQuery; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDict; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.mapper.SysDictItemMapper; +import com.jero.modules.system.mapper.SysDictMapper; +import com.jero.modules.system.model.TreeSelectModel; +import com.jero.modules.system.service.ISysDictService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 字典表 服务实现类 + *

+ * + * @Author zhangweijian + * @since 2018-12-28 + */ +@Service +@Slf4j +public class SysDictServiceImpl extends ServiceImpl implements ISysDictService { + + @Autowired + private SysDictMapper sysDictMapper; + @Autowired + private SysDictItemMapper sysDictItemMapper; + @Resource + private RedisTemplate redisTemplate; + + /** + * 通过查询指定code 获取字典 + * @param code + * @return + */ + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code") + public List queryDictItemsByCode(String code) { + log.debug("无缓存dictCache的时候调用这里!"); + return sysDictMapper.queryDictItemsByCode(code); + } + + @Override + public Map> queryAllDictItems() { + Map> res = new HashMap>(); + List ls = sysDictMapper.selectList(null); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(SysDictItem::getStatus, 1); + queryWrapper.orderByAsc(SysDictItem::getSortOrder); + List sysDictItemList = sysDictItemMapper.selectList(queryWrapper); + + for (SysDict d : ls) { + List dictModelList = sysDictItemList.stream().filter(s -> d.getId().equals(s.getDictId())).map(item -> { + DictModel dictModel = new DictModel(); + dictModel.setText(item.getItemText()); + dictModel.setValue(item.getItemValue()); + return dictModel; + }).collect(Collectors.toList()); + res.put(d.getDictCode(), dictModelList); + } + log.debug("-------登录加载系统字典-----" + res.toString()); + return res; + } + + /** + * 通过查询指定code 获取字典值text + * @param code + * @param key + * @return + */ + + @Override + @Cacheable(value = CacheConstant.SYS_DICT_CACHE,key = "#code+':'+#key") + public String queryDictTextByKey(String code, String key) { + log.debug("无缓存dictText的时候调用这里!"); + return sysDictMapper.queryDictTextByKey(code, key); + } + + /** + * 通过查询指定table的 text code 获取字典 + * dictTableCache采用redis缓存有效期10分钟 + * @param table + * @param text + * @param code + * @return + */ + @Override + //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE) + public List queryTableDictItemsByCode(String table, String text, String code) { + log.debug("无缓存dictTableList的时候调用这里!"); + return sysDictMapper.queryTableDictItemsByCode(table,text,code); + } + + @Override + public List queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql) { + log.debug("无缓存dictTableList的时候调用这里!"); + return sysDictMapper.queryTableDictItemsByCodeAndFilter(table,text,code,filterSql); + } + + /** + * 通过查询指定table的 text code 获取字典值text + * dictTableCache采用redis缓存有效期10分钟 + * @param table + * @param text + * @param code + * @param key + * @return + */ + @Override + @Cacheable(value = CacheConstant.SYS_DICT_TABLE_CACHE) + public String queryTableDictTextByKey(String table,String text,String code, String key) { + log.debug("无缓存dictTable的时候调用这里!"); + return sysDictMapper.queryTableDictTextByKey(table,text,code,key); + } + + /** + * 通过查询指定table的 text code 获取字典,包含text和value + * dictTableCache采用redis缓存有效期10分钟 + * @param table + * @param text + * @param code + * @param keys (逗号分隔) + * @return + */ + @Override + //update-begin--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存 + //@Cacheable(value = CacheConstant.SYS_DICT_TABLE_BY_KEYS_CACHE) + //update-end--Author:lvdandan Date:20201204 for:JT-36【online】树形列表bug修改后,还是显示原来值 暂时去掉缓存 + public List queryTableDictByKeys(String table, String text, String code, String keys) { + if(oConvertUtils.isEmpty(keys)){ + return null; + } + String[] keyArray = keys.split(","); + List dicts = sysDictMapper.queryTableDictByKeys(table, text, code, keyArray); + List texts = new ArrayList<>(dicts.size()); + // 查询出来的顺序可能是乱的,需要排个序 + for (String key : keyArray) { + for (DictModel dict : dicts) { + if (key.equals(dict.getValue())) { + texts.add(dict.getText()); + break; + } + } + } + return texts; + } + + /** + * 根据字典类型id删除关联表中其对应的数据 + */ + @Override + public boolean deleteByDictId(SysDict sysDict) { + sysDict.setDelFlag(CommonConstant.DEL_FLAG_1); + return this.updateById(sysDict); + } + + @Override + @Transactional + public Integer saveMain(SysDict sysDict, List sysDictItemList) { + int insert=0; + try{ + insert = sysDictMapper.insert(sysDict); + if (sysDictItemList != null) { + for (SysDictItem entity : sysDictItemList) { + entity.setDictId(sysDict.getId()); + entity.setStatus(1); + sysDictItemMapper.insert(entity); + } + } + }catch(Exception e){ + return insert; + } + return insert; + } + + @Override + public List queryAllDepartBackDictModel() { + return baseMapper.queryAllDepartBackDictModel(); + } + + @Override + public List queryAllUserBackDictModel() { + return baseMapper.queryAllUserBackDictModel(); + } + + @Override + public List queryTableDictItems(String table, String text, String code, String keyword) { + return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%"); + } + + @Override + public List queryLittleTableDictItems(String table, String text, String code, String keyword, int pageSize) { + Page page = new Page(1, pageSize); + IPage pageList = baseMapper.queryTableDictItems(page, table, text, code, "%"+keyword+"%"); + return pageList.getRecords(); + } + + @Override + public List queryTreeList(String query,String table, String text, String code, String pidField, String pid, String hasChildField) { + return baseMapper.queryTreeList(query, table, text, code, pidField, pid,hasChildField); + } + + @Override + public List queryAllTreeData(String table, String text, String code, String pidField) { + // 先查出要查询的数据 + List serachTreeNode = this.baseMapper.queryTreeDataByKeyword(table, text, code, pidField); + + // 构建一个HashMap,按ID为key存储全部查询出的数据结构 + HashMap resultMap = new HashMap<>(); + for (TreeSelectModel treeSelectModel : serachTreeNode){ + resultMap.put(treeSelectModel.getKey(), treeSelectModel); + + TreeSelectModel copyTreeSelectModel = treeSelectModel; + // 叠加的查询父节点 + while (StringUtils.isNotEmpty(copyTreeSelectModel.getParentId())){ + if (resultMap.get(copyTreeSelectModel.getParentId()) != null){ + break; + } + + TreeSelectModel newTreeSelectModel = this.baseMapper.queryTreeDataItemById(copyTreeSelectModel.getParentId(), table, text, code, pidField); + if(newTreeSelectModel == null){ + break; + } + + resultMap.put(newTreeSelectModel.getKey(), newTreeSelectModel); + + copyTreeSelectModel = newTreeSelectModel; + } + } + System.out.println("aaa"); + + // 遍历map里全部的节点,取出父节点放入list,并循环添加他的子节点 + List treeNodeList = new ArrayList<>(); + for (String key : resultMap.keySet()){ + TreeSelectModel curTreeSelectModel = resultMap.get(key); + if (StringUtils.isEmpty(curTreeSelectModel.getParentId())){ + treeNodeList.add(curTreeSelectModel); + } else { + // 如果有父节点,则找出自己的父节点,把自己添加进父节点的children属性里 + TreeSelectModel existParentNode = resultMap.get(curTreeSelectModel.getParentId()); + if (existParentNode != null){ + existParentNode.getChildren().add(curTreeSelectModel); + } + } + } + + return treeNodeList; + } + + @Override + public void deleteOneDictPhysically(String id) { + this.baseMapper.deleteOneById(id); + this.sysDictItemMapper.delete(new LambdaQueryWrapper().eq(SysDictItem::getDictId,id)); + } + + @Override + public void updateDictDelFlag(int delFlag, String id) { + baseMapper.updateDictDelFlag(delFlag,id); + } + + @Override + public List queryDeleteList() { + return baseMapper.queryDeleteList(); + } + + @Override + public List queryDictTablePageList(DictQuery query, int pageSize, int pageNo) { + Page page = new Page(pageNo,pageSize,false); + Page pageList = baseMapper.queryDictTablePageList(page, query); + return pageList.getRecords(); + } + /** + * 刷新dict缓存 + * @date 2021/4/8 9:07 + * @param + * @return void + */ + @Override + public void refreshCache() { + //清空字典缓存 + Set keys = redisTemplate.keys(CacheConstant.SYS_DICT_CACHE + "*"); + Set keys2 = redisTemplate.keys(CacheConstant.SYS_DICT_TABLE_CACHE + "*"); + Set keys3 = redisTemplate.keys(CacheConstant.SYS_DEPARTS_CACHE + "*"); + Set keys4 = redisTemplate.keys(CacheConstant.SYS_DEPART_IDS_CACHE + "*"); + Set keys5 = redisTemplate.keys( "jmreport:cache:dict*"); + Set keys6 = redisTemplate.keys( "jmreport:cache:dictTable*"); + redisTemplate.delete(keys); + redisTemplate.delete(keys2); + redisTemplate.delete(keys3); + redisTemplate.delete(keys4); + redisTemplate.delete(keys5); + redisTemplate.delete(keys6); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysFillRuleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysFillRuleServiceImpl.java new file mode 100644 index 00000000..2684a7c1 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysFillRuleServiceImpl.java @@ -0,0 +1,18 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.modules.system.entity.SysFillRule; +import com.jero.modules.system.mapper.SysFillRuleMapper; +import com.jero.modules.system.service.ISysFillRuleService; +import org.springframework.stereotype.Service; + +/** + * @Description: 填值规则 + * @Author: jero-boot + * @Date: 2019-11-07 + * @Version: V1.0 + */ +@Service("sysFillRuleServiceImpl") +public class SysFillRuleServiceImpl extends ServiceImpl implements ISysFillRuleService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java new file mode 100644 index 00000000..a436d3a2 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysGatewayRouteServiceImpl.java @@ -0,0 +1,102 @@ +package com.jero.modules.system.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.base.BaseMap; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.GlobalConstants; +import com.jero.modules.system.entity.SysGatewayRoute; +import com.jero.modules.system.mapper.SysGatewayRouteMapper; +import com.jero.modules.system.service.ISysGatewayRouteService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: gateway路由管理 + * @Author: jero-boot + * @Date: 2020-05-26 + * @Version: V1.0 + */ +@Service +@Slf4j +public class SysGatewayRouteServiceImpl extends ServiceImpl implements ISysGatewayRouteService { + + @Autowired + private RedisTemplate redisTemplate; + + + @Override + public void addRoute2Redis(String key) { + List ls = this.list(new LambdaQueryWrapper().eq(SysGatewayRoute::getStatus, 1)); + redisTemplate.opsForValue().set(key, JSON.toJSONString(ls)); + } + + @Override + public void deleteById(String id) { + this.removeById(id); + this.resreshRouter(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateAll(JSONObject json) { + log.info("--gateway 路由配置修改--"); + try { + json = json.getJSONObject("router"); + String id = json.getString("id"); + SysGatewayRoute route = getById(id); + if (ObjectUtil.isEmpty(route)) { + route = new SysGatewayRoute(); + } + route.setRouterId(json.getString("routerId")); + route.setName(json.getString("name")); + route.setPredicates(json.getString("predicates")); + String filters = json.getString("filters"); + if (ObjectUtil.isEmpty(filters)) { + filters = "[]"; + } + route.setFilters(filters); + route.setUri(json.getString("uri")); + if (json.get("status") == null) { + route.setStatus(1); + } else { + route.setStatus(json.getInteger("status")); + } + this.saveOrUpdate(route); + resreshRouter(); + } catch (Exception e) { + log.error("路由配置解析失败", e); + resreshRouter(); + e.printStackTrace(); + } + } + + /** + * 更新redis路由缓存 + */ + private void resreshRouter() { + //更新redis路由缓存 + addRoute2Redis(CacheConstant.GATEWAY_ROUTES); + BaseMap params = new BaseMap(); + params.put(GlobalConstants.HANDLER_NAME, "loderRouderHandler"); + //刷新网关 + redisTemplate.convertAndSend(GlobalConstants.REDIS_TOPIC_NAME, params); + } + + @Override + public void clearRedis() { + redisTemplate.opsForValue().set(CacheConstant.GATEWAY_ROUTES, null); + } + + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysLogServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysLogServiceImpl.java new file mode 100644 index 00000000..fc25d3d9 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysLogServiceImpl.java @@ -0,0 +1,66 @@ +package com.jero.modules.system.service.impl; + +import java.sql.SQLException; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.common.util.CommonUtils; +import com.jero.modules.system.entity.SysLog; +import com.jero.modules.system.mapper.SysLogMapper; +import com.jero.modules.system.service.ISysLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

+ * 系统日志表 服务实现类 + *

+ * + * @Author zhangweijian + * @since 2018-12-26 + */ +@Service +public class SysLogServiceImpl extends ServiceImpl implements ISysLogService { + + @Resource + private SysLogMapper sysLogMapper; + @Autowired + private ISysBaseAPI sysBaseAPI; + + /** + * @功能:清空所有日志记录 + */ + @Override + public void removeAll() { + sysLogMapper.removeAll(); + } + + @Override + public Long findTotalVisitCount() { + return sysLogMapper.findTotalVisitCount(); + } + + //update-begin--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + @Override + public Long findTodayVisitCount(Date dayStart, Date dayEnd) { + return sysLogMapper.findTodayVisitCount(dayStart,dayEnd); + } + + @Override + public Long findTodayIp(Date dayStart, Date dayEnd) { + return sysLogMapper.findTodayIp(dayStart,dayEnd); + } + //update-end--Author:zhangweijian Date:20190428 for:传入开始时间,结束时间参数 + + @Override + public List> findVisitCount(Date dayStart, Date dayEnd) { + String dbType = CommonUtils.getDatabaseType(); + return sysLogMapper.findVisitCount(dayStart, dayEnd,dbType); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java new file mode 100644 index 00000000..43e9cb42 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionDataRuleImpl.java @@ -0,0 +1,116 @@ +package com.jero.modules.system.service.impl; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import javax.annotation.Resource; + +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.query.QueryGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.entity.SysPermissionDataRule; +import com.jero.modules.system.mapper.SysPermissionDataRuleMapper; +import com.jero.modules.system.mapper.SysPermissionMapper; +import com.jero.modules.system.service.ISysPermissionDataRuleService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

+ * 菜单权限规则 服务实现类 + *

+ * + * @Author huangzhilin + * @since 2019-04-01 + */ +@Service +public class SysPermissionDataRuleImpl extends ServiceImpl + implements ISysPermissionDataRuleService { + + @Resource + private SysPermissionMapper sysPermissionMapper; + + /** + * 根据菜单id查询其对应的权限数据 + */ + @Override + public List getPermRuleListByPermId(String permissionId) { + LambdaQueryWrapper query = new LambdaQueryWrapper(); + query.eq(SysPermissionDataRule::getPermissionId, permissionId); + query.orderByDesc(SysPermissionDataRule::getCreateTime); + List permRuleList = this.list(query); + return permRuleList; + } + + /** + * 根据前端传递的权限名称和权限值参数来查询权限数据 + */ + @Override + public List queryPermissionRule(SysPermissionDataRule permRule) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(permRule, null); + return this.list(queryWrapper); + } + + @Override + public List queryPermissionDataRules(String username,String permissionId) { + List idsList = this.baseMapper.queryDataRuleIds(username, permissionId); + //update-begin--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- + if(idsList==null || idsList.size()==0) { + return null; + } + //update-end--Author:scott Date:20191119 for:数据权限失效问题处理-------------------- + Set set = new HashSet(); + for (String ids : idsList) { + if(oConvertUtils.isEmpty(ids)) { + continue; + } + String[] arr = ids.split(","); + for (String id : arr) { + if(oConvertUtils.isNotEmpty(id) && !set.contains(id)) { + set.add(id); + } + } + } + if(set.size()==0) { + return null; + } + return this.baseMapper.selectList(new QueryWrapper().in("id", set).eq("status",CommonConstant.STATUS_1)); + } + + @Override + @Transactional + public void savePermissionDataRule(SysPermissionDataRule sysPermissionDataRule) { + this.save(sysPermissionDataRule); + SysPermission permission = sysPermissionMapper.selectById(sysPermissionDataRule.getPermissionId()); + if(permission!=null && (permission.getRuleFlag()==null || permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_0))) { + permission.setRuleFlag(CommonConstant.RULE_FLAG_1); + sysPermissionMapper.updateById(permission); + } + } + + @Override + @Transactional + public void deletePermissionDataRule(String dataRuleId) { + SysPermissionDataRule dataRule = this.baseMapper.selectById(dataRuleId); + if(dataRule!=null) { + this.removeById(dataRuleId); + Integer count = this.baseMapper.selectCount(new LambdaQueryWrapper().eq(SysPermissionDataRule::getPermissionId, dataRule.getPermissionId())); + //注:同一个事务中删除后再查询是会认为数据已被删除的 若事务回滚上述删除无效 + if(count==null || count==0) { + SysPermission permission = sysPermissionMapper.selectById(dataRule.getPermissionId()); + if(permission!=null && permission.getRuleFlag().equals(CommonConstant.RULE_FLAG_1)) { + permission.setRuleFlag(CommonConstant.RULE_FLAG_0); + sysPermissionMapper.updateById(permission); + } + } + } + + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionServiceImpl.java new file mode 100644 index 00000000..042ce05d --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysPermissionServiceImpl.java @@ -0,0 +1,266 @@ +package com.jero.modules.system.service.impl; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Resource; + +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysPermission; +import com.jero.modules.system.entity.SysPermissionDataRule; +import com.jero.modules.system.mapper.SysDepartPermissionMapper; +import com.jero.modules.system.mapper.SysDepartRolePermissionMapper; +import com.jero.modules.system.mapper.SysPermissionMapper; +import com.jero.modules.system.mapper.SysRolePermissionMapper; +import com.jero.modules.system.model.TreeModel; +import com.jero.modules.system.service.ISysPermissionDataRuleService; +import com.jero.modules.system.service.ISysPermissionService; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

+ * 菜单权限表 服务实现类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Service +public class SysPermissionServiceImpl extends ServiceImpl implements ISysPermissionService { + + @Resource + private SysPermissionMapper sysPermissionMapper; + + @Resource + private ISysPermissionDataRuleService permissionDataRuleService; + + @Resource + private SysRolePermissionMapper sysRolePermissionMapper; + + @Resource + private SysDepartPermissionMapper sysDepartPermissionMapper; + + @Resource + private SysDepartRolePermissionMapper sysDepartRolePermissionMapper; + + @Override + public List queryListByParentId(String parentId) { + return sysPermissionMapper.queryListByParentId(parentId); + } + + /** + * 真实删除 + */ + @Override + @Transactional + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) + public void deletePermission(String id) throws JeroBootException { + SysPermission sysPermission = this.getById(id); + if(sysPermission==null) { + throw new JeroBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + if(oConvertUtils.isNotEmpty(pid)) { + int count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if(count==1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 1); + } + } + sysPermissionMapper.deleteById(id); + // 该节点可能是子节点但也可能是其它节点的父节点,所以需要级联删除 + this.removeChildrenBy(sysPermission.getId()); + //关联删除 + Map map = new HashMap<>(); + map.put("permission_id",id); + //删除数据规则 + this.deletePermRuleByPermId(id); + //删除角色授权表 + sysRolePermissionMapper.deleteByMap(map); + //删除部门权限表 + sysDepartPermissionMapper.deleteByMap(map); + //删除部门角色授权 + sysDepartRolePermissionMapper.deleteByMap(map); + } + + /** + * 根据父id删除其关联的子节点数据 + * + * @return + */ + public void removeChildrenBy(String parentId) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + // 封装查询条件parentId为主键, + query.eq(SysPermission::getParentId, parentId); + // 查出该主键下的所有子级 + List permissionList = this.list(query); + if (permissionList != null && permissionList.size() > 0) { + String id = ""; // id + int num = 0; // 查出的子级数量 + // 如果查出的集合不为空, 则先删除所有 + this.remove(query); + // 再遍历刚才查出的集合, 根据每个对象,查找其是否仍有子级 + for (int i = 0, len = permissionList.size(); i < len; i++) { + id = permissionList.get(i).getId(); + Map map = new HashMap<>(); + map.put("permission_id",id); + //删除数据规则 + this.deletePermRuleByPermId(id); + //删除角色授权表 + sysRolePermissionMapper.deleteByMap(map); + //删除部门权限表 + sysDepartPermissionMapper.deleteByMap(map); + //删除部门角色授权 + sysDepartRolePermissionMapper.deleteByMap(map); + num = this.count(new LambdaQueryWrapper().eq(SysPermission::getParentId, id)); + // 如果有, 则递归 + if (num > 0) { + this.removeChildrenBy(id); + } + } + } + } + + /** + * 逻辑删除 + */ + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) + //@CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true,condition="#sysPermission.menuType==2") + public void deletePermissionLogical(String id) throws JeroBootException { + SysPermission sysPermission = this.getById(id); + if(sysPermission==null) { + throw new JeroBootException("未找到菜单信息"); + } + String pid = sysPermission.getParentId(); + int count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, pid)); + if(count==1) { + //若父节点无其他子节点,则该父节点是叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 1); + } + sysPermission.setDelFlag(1); + this.updateById(sysPermission); + } + + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) + public void addPermission(SysPermission sysPermission) throws JeroBootException { + //---------------------------------------------------------------------- + //判断是否是一级菜单,是的话清空父菜单 + if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(null); + } + //---------------------------------------------------------------------- + String pid = sysPermission.getParentId(); + if(oConvertUtils.isNotEmpty(pid)) { + //设置父节点不为叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 0); + } + sysPermission.setCreateTime(new Date()); + sysPermission.setDelFlag(0); + sysPermission.setLeaf(true); + this.save(sysPermission); + } + + @Override + @CacheEvict(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE,allEntries=true) + public void editPermission(SysPermission sysPermission) throws JeroBootException { + SysPermission p = this.getById(sysPermission.getId()); + //TODO 该节点判断是否还有子节点 + if(p==null) { + throw new JeroBootException("未找到菜单信息"); + }else { + sysPermission.setUpdateTime(new Date()); + //---------------------------------------------------------------------- + //Step1.判断是否是一级菜单,是的话清空父菜单ID + if(CommonConstant.MENU_TYPE_0.equals(sysPermission.getMenuType())) { + sysPermission.setParentId(""); + } + //Step2.判断菜单下级是否有菜单,无则设置为叶子节点 + int count = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, sysPermission.getId())); + if(count==0) { + sysPermission.setLeaf(true); + } + //---------------------------------------------------------------------- + this.updateById(sysPermission); + + //如果当前菜单的父菜单变了,则需要修改新父菜单和老父菜单的,叶子节点状态 + String pid = sysPermission.getParentId(); + if((oConvertUtils.isNotEmpty(pid) && !pid.equals(p.getParentId())) || oConvertUtils.isEmpty(pid)&&oConvertUtils.isNotEmpty(p.getParentId())) { + //a.设置新的父菜单不为叶子节点 + this.sysPermissionMapper.setMenuLeaf(pid, 0); + //b.判断老的菜单下是否还有其他子菜单,没有的话则设置为叶子节点 + int cc = this.count(new QueryWrapper().lambda().eq(SysPermission::getParentId, p.getParentId())); + if(cc==0) { + if(oConvertUtils.isNotEmpty(p.getParentId())) { + this.sysPermissionMapper.setMenuLeaf(p.getParentId(), 1); + } + } + + } + } + + } + + @Override + public List queryByUser(String username) { + return this.sysPermissionMapper.queryByUser(username); + } + + /** + * 根据permissionId删除其关联的SysPermissionDataRule表中的数据 + */ + @Override + public void deletePermRuleByPermId(String id) { + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysPermissionDataRule::getPermissionId, id); + int countValue = this.permissionDataRuleService.count(query); + if(countValue > 0) { + this.permissionDataRuleService.remove(query); + } + } + + /** + * 获取模糊匹配规则的数据权限URL + */ + @Override + @Cacheable(value = CacheConstant.SYS_DATA_PERMISSIONS_CACHE) + public List queryPermissionUrlWithStar() { + return this.baseMapper.queryPermissionUrlWithStar(); + } + + @Override + public boolean hasPermission(String username, SysPermission sysPermission) { + int count = baseMapper.queryCountByUsername(username,sysPermission); + if(count>0){ + return true; + }else{ + return false; + } + } + + @Override + public boolean hasPermission(String username, String url) { + SysPermission sysPermission = new SysPermission(); + sysPermission.setUrl(url); + int count = baseMapper.queryCountByUsername(username,sysPermission); + if(count>0){ + return true; + }else{ + return false; + } + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java new file mode 100644 index 00000000..5e85be41 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRolePermissionServiceImpl.java @@ -0,0 +1,121 @@ +package com.jero.modules.system.service.impl; + +import java.util.*; + +import com.jero.common.constant.CacheConstant; +import com.jero.common.util.IPUtils; +import com.jero.common.util.SpringContextUtils; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysRolePermission; +import com.jero.modules.system.mapper.SysRolePermissionMapper; +import com.jero.modules.system.service.ISysRolePermissionService; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.stereotype.Service; + +import javax.servlet.http.HttpServletRequest; + +/** + *

+ * 角色权限表 服务实现类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Service +public class SysRolePermissionServiceImpl extends ServiceImpl implements ISysRolePermissionService { + + @Override + public void saveRolePermission(String roleId, String permissionIds) { + String ip = ""; + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //获取IP地址 + ip = IPUtils.getIpAddr(request); + } catch (Exception e) { + ip = "127.0.0.1"; + } + LambdaQueryWrapper query = new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId); + this.remove(query); + List list = new ArrayList(); + String[] arr = permissionIds.split(","); + for (String p : arr) { + if(oConvertUtils.isNotEmpty(p)) { + SysRolePermission rolepms = new SysRolePermission(roleId, p); + rolepms.setOperateDate(new Date()); + rolepms.setOperateIp(ip); + list.add(rolepms); + } + } + this.saveBatch(list); + } + + @Override + public void saveRolePermission(String roleId, String permissionIds, String lastPermissionIds) { + String ip = ""; + try { + //获取request + HttpServletRequest request = SpringContextUtils.getHttpServletRequest(); + //获取IP地址 + ip = IPUtils.getIpAddr(request); + } catch (Exception e) { + ip = "127.0.0.1"; + } + List add = getDiff(lastPermissionIds,permissionIds); + if(add!=null && add.size()>0) { + List list = new ArrayList(); + for (String p : add) { + if(oConvertUtils.isNotEmpty(p)) { + SysRolePermission rolepms = new SysRolePermission(roleId, p); + rolepms.setOperateDate(new Date()); + rolepms.setOperateIp(ip); + list.add(rolepms); + } + } + this.saveBatch(list); + } + + List delete = getDiff(permissionIds,lastPermissionIds); + if(delete!=null && delete.size()>0) { + for (String permissionId : delete) { + this.remove(new QueryWrapper().lambda().eq(SysRolePermission::getRoleId, roleId).eq(SysRolePermission::getPermissionId, permissionId)); + } + } + } + + /** + * 从diff中找出main中没有的元素 + * @param main + * @param diff + * @return + */ + private List getDiff(String main,String diff){ + if(oConvertUtils.isEmpty(diff)) { + return null; + } + if(oConvertUtils.isEmpty(main)) { + return Arrays.asList(diff.split(",")); + } + + String[] mainArr = main.split(","); + String[] diffArr = diff.split(","); + Map map = new HashMap<>(); + for (String string : mainArr) { + map.put(string, 1); + } + List res = new ArrayList(); + for (String key : diffArr) { + if(oConvertUtils.isNotEmpty(key) && !map.containsKey(key)) { + res.add(key); + } + } + return res; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 00000000..a0fd63aa --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,93 @@ +package com.jero.modules.system.service.impl; + +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.poi.ss.formula.functions.T; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.ImportExcelUtil; +import com.jero.common.util.PmsUtil; +import com.jero.modules.quartz.service.IQuartzJobService; +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.system.mapper.SysRoleMapper; +import com.jero.modules.system.mapper.SysUserMapper; +import com.jero.modules.system.service.ISysRoleService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + *

+ * 角色表 服务实现类 + *

+ * + * @Author scott + * @since 2018-12-19 + */ +@Service +public class SysRoleServiceImpl extends ServiceImpl implements ISysRoleService { + @Autowired + SysRoleMapper sysRoleMapper; + @Autowired + SysUserMapper sysUserMapper; + + @Override + public Result importExcelCheckRoleCode(MultipartFile file, ImportParams params) throws Exception { + List listSysRoles = ExcelImportUtil.importExcel(file.getInputStream(), SysRole.class, params); + int totalCount = listSysRoles.size(); + List errorStrs = new ArrayList<>(); + + // 去除 listSysRoles 中重复的数据 + for (int i = 0; i < listSysRoles.size(); i++) { + String roleCodeI =((SysRole)listSysRoles.get(i)).getRoleCode(); + for (int j = i + 1; j < listSysRoles.size(); j++) { + String roleCodeJ =((SysRole)listSysRoles.get(j)).getRoleCode(); + // 发现重复数据 + if (roleCodeI.equals(roleCodeJ)) { + errorStrs.add("第 " + (j + 1) + " 行的 roleCode 值:" + roleCodeI + " 已存在,忽略导入"); + listSysRoles.remove(j); + break; + } + } + } + // 去掉 sql 中的重复数据 + Integer errorLines=0; + Integer successLines=0; + List list = ImportExcelUtil.importDateSave(listSysRoles, ISysRoleService.class, errorStrs, CommonConstant.SQL_INDEX_UNIQ_SYS_ROLE_CODE); + errorLines+=list.size(); + successLines+=(listSysRoles.size()-errorLines); + return ImportExcelUtil.imporReturnRes(errorLines,successLines,list); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deleteRole(String roleid) { + //1.删除角色和用户关系 + sysRoleMapper.deleteRoleUserRelation(roleid); + //2.删除角色和权限关系 + sysRoleMapper.deleteRolePermissionRelation(roleid); + //3.删除角色 + this.removeById(roleid); + return true; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean deleteBatchRole(String[] roleIds) { + //1.删除角色和用户关系 + sysUserMapper.deleteBathRoleUserRelation(roleIds); + //2.删除角色和权限关系 + sysUserMapper.deleteBathRolePermissionRelation(roleIds); + //3.删除角色 + this.removeByIds(Arrays.asList(roleIds)); + return true; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java new file mode 100644 index 00000000..446596cf --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysThirdAccountServiceImpl.java @@ -0,0 +1,106 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.constant.CommonConstant; +import com.jero.common.util.PasswordUtil; +import com.jero.common.util.UUIDGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.system.entity.SysThirdAccount; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserRole; +import com.jero.modules.system.mapper.SysRoleMapper; +import com.jero.modules.system.mapper.SysThirdAccountMapper; +import com.jero.modules.system.mapper.SysUserMapper; +import com.jero.modules.system.mapper.SysUserRoleMapper; +import com.jero.modules.system.service.ISysThirdAccountService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import java.util.List; + +/** + * @Description: 第三方登录账号表 + * @Author: jero-boot + * @Date: 2020-11-17 + * @Version: V1.0 + */ +@Service +public class SysThirdAccountServiceImpl extends ServiceImpl implements ISysThirdAccountService { + + @Autowired + private SysThirdAccountMapper sysThirdAccountMapper; + + @Autowired + private SysUserMapper sysUserMapper; + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + + @Override + public void updateThirdUserId(SysUser sysUser,String thirdUserUuid) { + //修改第三方登录账户表使其进行添加用户id + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid); + SysThirdAccount account = sysThirdAccountMapper.selectOne(query); + SysThirdAccount sysThirdAccount = new SysThirdAccount(); + sysThirdAccount.setSysUserId(sysUser.getId()); + //根据当前用户id和登录方式查询第三方登录表 + LambdaQueryWrapper thirdQuery = new LambdaQueryWrapper<>(); + thirdQuery.eq(SysThirdAccount::getSysUserId,sysUser.getId()); + thirdQuery.eq(SysThirdAccount::getThirdType,account.getThirdType()); + SysThirdAccount sysThirdAccounts = sysThirdAccountMapper.selectOne(thirdQuery); + if(sysThirdAccounts!=null){ + sysThirdAccountMapper.deleteById(sysThirdAccounts.getId()); + } + //更新用户账户表sys_user_id + sysThirdAccountMapper.update(sysThirdAccount,query); + } + + @Override + public SysUser createUser(String phone, String thirdUserUuid) { + //先查询第三方,获取登录方式 + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.eq(SysThirdAccount::getThirdUserUuid,thirdUserUuid); + SysThirdAccount account = sysThirdAccountMapper.selectOne(query); + //添加用户 + SysUser user = new SysUser(); + user.setActivitiSync(CommonConstant.ACT_SYNC_0); + user.setDelFlag(CommonConstant.DEL_FLAG_0); + user.setStatus(1); + user.setUsername(thirdUserUuid); + user.setPhone(phone); + //设置初始密码 + String salt = oConvertUtils.randomGen(8); + user.setSalt(salt); + String passwordEncode = PasswordUtil.encrypt(user.getUsername(), "123456", salt); + user.setPassword(passwordEncode); + user.setRealname(account.getRealname()); + user.setAvatar(account.getAvatar()); + String s = this.saveThirdUser(user); + //更新用户第三方账户表的userId + SysThirdAccount sysThirdAccount = new SysThirdAccount(); + sysThirdAccount.setSysUserId(s); + sysThirdAccountMapper.update(sysThirdAccount,query); + return user; + } + + public String saveThirdUser(SysUser sysUser) { + //保存用户 + String userid = UUIDGenerator.generate(); + sysUser.setId(userid); + sysUserMapper.insert(sysUser); + //获取第三方角色 + SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getRoleCode, "third_role")); + //保存用户角色 + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(sysRole.getId()); + userRole.setUserId(userid); + sysUserRoleMapper.insert(userRole); + return userid; + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserAgentServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserAgentServiceImpl.java new file mode 100644 index 00000000..172ec90e --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserAgentServiceImpl.java @@ -0,0 +1,19 @@ +package com.jero.modules.system.service.impl; + +import com.jero.modules.system.entity.SysUserAgent; +import com.jero.modules.system.mapper.SysUserAgentMapper; +import com.jero.modules.system.service.ISysUserAgentService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 用户代理人设置 + * @Author: jero-boot + * @Date: 2019-04-17 + * @Version: V1.0 + */ +@Service +public class SysUserAgentServiceImpl extends ServiceImpl implements ISysUserAgentService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserDepartServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserDepartServiceImpl.java new file mode 100644 index 00000000..0f5b77ab --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserDepartServiceImpl.java @@ -0,0 +1,133 @@ +package com.jero.modules.system.service.impl; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Collectors; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserDepart; +import com.jero.modules.system.mapper.SysUserDepartMapper; +import com.jero.modules.system.model.DepartIdModel; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserDepartService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

+ * 用户部门表实现类 + *

+ * @Author ZhiLin + *@since 2019-02-22 + */ +@Service +public class SysUserDepartServiceImpl extends ServiceImpl implements ISysUserDepartService { + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private ISysUserService sysUserService; + + + /** + * 根据用户id查询部门信息 + */ + @Override + public List queryDepartIdsOfUser(String userId) { + LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); + LambdaQueryWrapper queryDep = new LambdaQueryWrapper(); + try { + queryUDep.eq(SysUserDepart::getUserId, userId); + List depIdList = new ArrayList<>(); + List depIdModelList = new ArrayList<>(); + List userDepList = this.list(queryUDep); + if(userDepList != null && userDepList.size() > 0) { + for(SysUserDepart userDepart : userDepList) { + depIdList.add(userDepart.getDepId()); + } + queryDep.in(SysDepart::getId, depIdList); + List depList = sysDepartService.list(queryDep); + if(depList != null || depList.size() > 0) { + for(SysDepart depart : depList) { + depIdModelList.add(new DepartIdModel().convertByUserDepart(depart)); + } + } + return depIdModelList; + } + }catch(Exception e) { + e.fillInStackTrace(); + } + return null; + + + } + + + /** + * 根据部门id查询用户信息 + */ + @Override + public List queryUserByDepId(String depId) { + LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); + queryUDep.eq(SysUserDepart::getDepId, depId); + List userIdList = new ArrayList<>(); + List uDepList = this.list(queryUDep); + if(uDepList != null && uDepList.size() > 0) { + for(SysUserDepart uDep : uDepList) { + userIdList.add(uDep.getUserId()); + } + List userList = (List) sysUserService.listByIds(userIdList); + //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + for (SysUser sysUser : userList) { + sysUser.setSalt(""); + sysUser.setPassword(""); + } + //update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + return userList; + } + return new ArrayList(); + } + + /** + * 根据部门code,查询当前部门和下级部门的 用户信息 + */ + @Override + public List queryUserByDepCode(String depCode,String realname) { + LambdaQueryWrapper queryByDepCode = new LambdaQueryWrapper(); + queryByDepCode.likeRight(SysDepart::getOrgCode,depCode); + List sysDepartList = sysDepartService.list(queryByDepCode); + List depIds = sysDepartList.stream().map(SysDepart::getId).collect(Collectors.toList()); + + LambdaQueryWrapper queryUDep = new LambdaQueryWrapper(); + queryUDep.in(SysUserDepart::getDepId, depIds); + List userIdList = new ArrayList<>(); + List uDepList = this.list(queryUDep); + if(uDepList != null && uDepList.size() > 0) { + for(SysUserDepart uDep : uDepList) { + userIdList.add(uDep.getUserId()); + } + LambdaQueryWrapper queryUser = new LambdaQueryWrapper(); + queryUser.in(SysUser::getId,userIdList); + if(oConvertUtils.isNotEmpty(realname)){ + queryUser.like(SysUser::getRealname,realname.trim()); + } + List userList = (List) sysUserService.list(queryUser); + //update-begin-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + for (SysUser sysUser : userList) { + sysUser.setSalt(""); + sysUser.setPassword(""); + } + //update-end-author:taoyan date:201905047 for:接口调用查询返回结果不能返回密码相关信息 + return userList; + } + return new ArrayList(); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java new file mode 100644 index 00000000..2959316b --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserRoleServiceImpl.java @@ -0,0 +1,30 @@ +package com.jero.modules.system.service.impl; + +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; + +import com.jero.modules.system.entity.SysRole; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.entity.SysUserRole; +import com.jero.modules.system.mapper.SysUserRoleMapper; +import com.jero.modules.system.service.ISysRoleService; +import com.jero.modules.system.service.ISysUserRoleService; +import com.jero.modules.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + *

+ * 用户角色表 服务实现类 + *

+ * + * @Author scott + * @since 2018-12-21 + */ +@Service +public class SysUserRoleServiceImpl extends ServiceImpl implements ISysUserRoleService { + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 00000000..f5973989 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,442 @@ +package com.jero.modules.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.api.vo.Result; +import com.jero.common.constant.CacheConstant; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.api.ISysBaseAPI; +import com.jero.modules.base.service.BaseCommonService; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.system.vo.SysUserCacheInfo; +import com.jero.common.util.PasswordUtil; +import com.jero.common.util.UUIDGenerator; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.*; +import com.jero.modules.system.mapper.*; +import com.jero.modules.system.model.SysUserSysDepartModel; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.system.vo.SysUserDepVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + *

+ * 用户表 服务实现类 + *

+ * + * @Author: scott + * @Date: 2018-12-20 + */ +@Service +@Slf4j +public class SysUserServiceImpl extends ServiceImpl implements ISysUserService { + + @Autowired + private SysUserMapper userMapper; + @Autowired + private SysPermissionMapper sysPermissionMapper; + @Autowired + private SysUserRoleMapper sysUserRoleMapper; + @Autowired + private SysUserDepartMapper sysUserDepartMapper; + @Autowired + private ISysBaseAPI sysBaseAPI; + @Autowired + private SysDepartMapper sysDepartMapper; + @Autowired + private SysRoleMapper sysRoleMapper; + @Autowired + private SysDepartRoleUserMapper departRoleUserMapper; + @Autowired + private SysDepartRoleMapper sysDepartRoleMapper; + @Resource + private BaseCommonService baseCommonService; + + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public Result resetPassword(String username, String oldPassword, String newPassword, String confirmPassword) { + SysUser user = userMapper.getUserByName(username); + String passwordEncode = PasswordUtil.encrypt(username, oldPassword, user.getSalt()); + if (!user.getPassword().equals(passwordEncode)) { + return Result.error("旧密码输入错误!"); + } + if (oConvertUtils.isEmpty(newPassword)) { + return Result.error("新密码不允许为空!"); + } + if (!newPassword.equals(confirmPassword)) { + return Result.error("两次输入密码不一致!"); + } + String password = PasswordUtil.encrypt(username, newPassword, user.getSalt()); + this.userMapper.update(new SysUser().setPassword(password), new LambdaQueryWrapper().eq(SysUser::getId, user.getId())); + return Result.OK("密码修改成功!"); + } + + @Override + @CacheEvict(value = {CacheConstant.SYS_USERS_CACHE}, allEntries = true) + public Result changePassword(SysUser sysUser) { + String salt = oConvertUtils.randomGen(8); + sysUser.setSalt(salt); + String password = sysUser.getPassword(); + String passwordEncode = PasswordUtil.encrypt(sysUser.getUsername(), password, salt); + sysUser.setPassword(passwordEncode); + this.userMapper.updateById(sysUser); + return Result.OK("密码修改成功!"); + } + + @Override + @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @Transactional(rollbackFor = Exception.class) + public boolean deleteUser(String userId) { + //1.删除用户 + this.removeById(userId); + return false; + } + + @Override + @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @Transactional(rollbackFor = Exception.class) + public boolean deleteBatchUsers(String userIds) { + //1.删除用户 + this.removeByIds(Arrays.asList(userIds.split(","))); + return false; + } + + @Override + public SysUser getUserByName(String username) { + return userMapper.getUserByName(username); + } + + + @Override + @Transactional + public void addUserWithRole(SysUser user, String roles) { + this.save(user); + if(oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + } + + @Override + @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, allEntries=true) + @Transactional + public void editUserWithRole(SysUser user, String roles) { + this.updateById(user); + //先删后加 + sysUserRoleMapper.delete(new QueryWrapper().lambda().eq(SysUserRole::getUserId, user.getId())); + if(oConvertUtils.isNotEmpty(roles)) { + String[] arr = roles.split(","); + for (String roleId : arr) { + SysUserRole userRole = new SysUserRole(user.getId(), roleId); + sysUserRoleMapper.insert(userRole); + } + } + } + + + @Override + public List getRole(String username) { + return sysUserRoleMapper.getRoleByUserName(username); + } + + /** + * 通过用户名获取用户角色集合 + * @param username 用户名 + * @return 角色集合 + */ + @Override + public Set getUserRolesSet(String username) { + // 查询用户拥有的角色集合 + List roles = sysUserRoleMapper.getRoleByUserName(username); + log.info("-------通过数据库读取用户拥有的角色Rules------username: " + username + ",Roles size: " + (roles == null ? 0 : roles.size())); + return new HashSet<>(roles); + } + + /** + * 通过用户名获取用户权限集合 + * + * @param username 用户名 + * @return 权限集合 + */ + @Override + public Set getUserPermissionsSet(String username) { + Set permissionSet = new HashSet<>(); + List permissionList = sysPermissionMapper.queryByUser(username); + for (SysPermission po : permissionList) { +// // TODO URL规则有问题? +// if (oConvertUtils.isNotEmpty(po.getUrl())) { +// permissionSet.add(po.getUrl()); +// } + if (oConvertUtils.isNotEmpty(po.getPerms())) { + permissionSet.add(po.getPerms()); + } + } + log.info("-------通过数据库读取用户拥有的权限Perms------username: "+ username+",Perms size: "+ (permissionSet==null?0:permissionSet.size()) ); + return permissionSet; + } + + @Override + public SysUserCacheInfo getCacheUser(String username) { + SysUserCacheInfo info = new SysUserCacheInfo(); + info.setOneDepart(true); +// SysUser user = userMapper.getUserByName(username); +// info.setSysUserCode(user.getUsername()); +// info.setSysUserName(user.getRealname()); + + + LoginUser user = sysBaseAPI.getUserByName(username); + if(user!=null) { + info.setSysUserCode(user.getUsername()); + info.setSysUserName(user.getRealname()); + info.setSysOrgCode(user.getOrgCode()); + } + + //多部门支持in查询 + List list = sysDepartMapper.queryUserDeparts(user.getId()); + List sysMultiOrgCode = new ArrayList(); + if(list==null || list.size()==0) { + //当前用户无部门 + //sysMultiOrgCode.add("0"); + }else if(list.size()==1) { + sysMultiOrgCode.add(list.get(0).getOrgCode()); + }else { + info.setOneDepart(false); + for (SysDepart dpt : list) { + sysMultiOrgCode.add(dpt.getOrgCode()); + } + } + info.setSysMultiOrgCode(sysMultiOrgCode); + + return info; + } + + // 根据部门Id查询 + @Override + public IPage getUserByDepId(Page page, String departId,String username) { + return userMapper.getUserByDepId(page, departId,username); + } + + @Override + public IPage getUserByDepIds(Page page, List departIds, String username) { + return userMapper.getUserByDepIds(page, departIds,username); + } + + @Override + public Map getDepNamesByUserIds(List userIds) { + List list = this.baseMapper.getDepNamesByUserIds(userIds); + + Map res = new HashMap(); + list.forEach(item -> { + if (res.get(item.getUserId()) == null) { + res.put(item.getUserId(), item.getDepartName()); + } else { + res.put(item.getUserId(), res.get(item.getUserId()) + "," + item.getDepartName()); + } + } + ); + return res; + } + + @Override + public IPage getUserByDepartIdAndQueryWrapper(Page page, String departId, QueryWrapper queryWrapper) { + LambdaQueryWrapper lambdaQueryWrapper = queryWrapper.lambda(); + + lambdaQueryWrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_0); + lambdaQueryWrapper.inSql(SysUser::getId, "SELECT user_id FROM sys_user_depart WHERE dep_id = '" + departId + "'"); + + return userMapper.selectPage(page, lambdaQueryWrapper); + } + + @Override + public IPage queryUserByOrgCode(String orgCode, SysUser userParams, IPage page) { + List list = baseMapper.getUserByOrgCode(page, orgCode, userParams); + Integer total = baseMapper.getUserByOrgCodeTotal(orgCode, userParams); + + IPage result = new Page<>(page.getCurrent(), page.getSize(), total); + result.setRecords(list); + + return result; + } + + // 根据角色Id查询 + @Override + public IPage getUserByRoleId(Page page, String roleId, String username) { + return userMapper.getUserByRoleId(page,roleId,username); + } + + + @Override + @CacheEvict(value= {CacheConstant.SYS_USERS_CACHE}, key="#username") + public void updateUserDepart(String username,String orgCode) { + baseMapper.updateUserDepart(username, orgCode); + } + + + @Override + public SysUser getUserByPhone(String phone) { + return userMapper.getUserByPhone(phone); + } + + + @Override + public SysUser getUserByEmail(String email) { + return userMapper.getUserByEmail(email); + } + + @Override + @Transactional + public void addUserWithDepart(SysUser user, String selectedParts) { +// this.save(user); //保存角色的时候已经添加过一次了 + if(oConvertUtils.isNotEmpty(selectedParts)) { + String[] arr = selectedParts.split(","); + for (String deaprtId : arr) { + SysUserDepart userDeaprt = new SysUserDepart(user.getId(), deaprtId); + sysUserDepartMapper.insert(userDeaprt); + } + } + } + + + @Override + @Transactional(rollbackFor = Exception.class) + @CacheEvict(value={CacheConstant.SYS_USERS_CACHE}, allEntries=true) + public void editUserWithDepart(SysUser user, String departs) { + this.updateById(user); //更新角色的时候已经更新了一次了,可以再跟新一次 + String[] arr = {}; + if(oConvertUtils.isNotEmpty(departs)){ + arr = departs.split(","); + } + //查询已关联部门 + List userDepartList = sysUserDepartMapper.selectList(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if(userDepartList != null && userDepartList.size()>0){ + for(SysUserDepart depart : userDepartList ){ + //修改已关联部门删除部门用户角色关系 + if(!Arrays.asList(arr).contains(depart.getDepId())){ + List sysDepartRoleList = sysDepartRoleMapper.selectList( + new QueryWrapper().lambda().eq(SysDepartRole::getDepartId,depart.getDepId())); + List roleIds = sysDepartRoleList.stream().map(SysDepartRole::getId).collect(Collectors.toList()); + if(roleIds != null && roleIds.size()>0){ + departRoleUserMapper.delete(new QueryWrapper().lambda().eq(SysDepartRoleUser::getUserId, user.getId()) + .in(SysDepartRoleUser::getDroleId,roleIds)); + } + } + } + } + //先删后加 + sysUserDepartMapper.delete(new QueryWrapper().lambda().eq(SysUserDepart::getUserId, user.getId())); + if(oConvertUtils.isNotEmpty(departs)) { + for (String departId : arr) { + SysUserDepart userDepart = new SysUserDepart(user.getId(), departId); + sysUserDepartMapper.insert(userDepart); + } + } + } + + + /** + * 校验用户是否有效 + * @param sysUser + * @return + */ + @Override + public Result checkUserIsEffective(SysUser sysUser) { + Result result = new Result(); + //情况1:根据用户信息查询,该用户不存在 + if (sysUser == null) { + result.error500("登录失败,用户名或密码错误!"); + baseCommonService.addLog("用户登录失败,用户不存在!", CommonConstant.LOG_TYPE_1, null); + return result; + } + //情况2:根据用户信息查询,该用户已注销 + //update-begin---author:王帅 Date:20200601 for:if条件永远为falsebug------------ + if (CommonConstant.DEL_FLAG_1.equals(sysUser.getDelFlag())) { + //update-end---author:王帅 Date:20200601 for:if条件永远为falsebug------------ + baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已注销!", CommonConstant.LOG_TYPE_1, null); + result.error500("该用户已注销"); + return result; + } + //情况3:根据用户信息查询,该用户已冻结 + if (CommonConstant.USER_FREEZE.equals(sysUser.getStatus())) { + baseCommonService.addLog("用户登录失败,用户名:" + sysUser.getUsername() + "已冻结!", CommonConstant.LOG_TYPE_1, null); + result.error500("该用户已冻结"); + return result; + } + return result; + } + + @Override + public List queryLogicDeleted() { + return this.queryLogicDeleted(null); + } + + @Override + public List queryLogicDeleted(LambdaQueryWrapper wrapper) { + if (wrapper == null) { + wrapper = new LambdaQueryWrapper<>(); + } + wrapper.eq(SysUser::getDelFlag, CommonConstant.DEL_FLAG_1); + return userMapper.selectLogicDeleted(wrapper); + } + + @Override + public boolean revertLogicDeleted(List userIds, SysUser updateEntity) { + String ids = String.format("'%s'", String.join("','", userIds)); + return userMapper.revertLogicDeleted(ids, updateEntity) > 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean removeLogicDeleted(List userIds) { + String ids = String.format("'%s'", String.join("','", userIds)); + // 1. 删除用户 + int line = userMapper.deleteLogicDeleted(ids); + // 2. 删除用户部门关系 + line += sysUserDepartMapper.delete(new LambdaQueryWrapper().in(SysUserDepart::getUserId, userIds)); + //3. 删除用户角色关系 + line += sysUserRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, userIds)); + return line != 0; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateNullPhoneEmail() { + userMapper.updateNullByEmptyString("email"); + userMapper.updateNullByEmptyString("phone"); + return true; + } + + @Override + public void saveThirdUser(SysUser sysUser) { + //保存用户 + String userid = UUIDGenerator.generate(); + sysUser.setId(userid); + baseMapper.insert(sysUser); + //获取第三方角色 + SysRole sysRole = sysRoleMapper.selectOne(new LambdaQueryWrapper().eq(SysRole::getRoleCode, "third_role")); + //保存用户角色 + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(sysRole.getId()); + userRole.setUserId(userid); + sysUserRoleMapper.insert(userRole); + } + + @Override + public List queryByDepIds(List departIds, String username) { + return userMapper.queryByDepIds(departIds,username); + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java new file mode 100644 index 00000000..ce47aa0a --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/FindsDepartsChildrenUtil.java @@ -0,0 +1,172 @@ +package com.jero.modules.system.util; + +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.vo.SysDepartTreeModel; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.model.DepartIdModel; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.List; + +/** + *

+ * 对应部门的表,处理并查找树级数据 + *

+ * + * @Author: Steve + * @Date: 2019-01-22 + */ +public class FindsDepartsChildrenUtil { + + //部门树信息-树结构 + //private static List sysDepartTreeList = new ArrayList(); + + //部门树id-树结构 + //private static List idList = new ArrayList<>(); + + + /** + * queryTreeList的子方法 ====1===== + * 该方法是s将SysDepart类型的list集合转换成SysDepartTreeModel类型的集合 + */ + public static List wrapTreeDataToTreeList(List recordList) { + // 在该方法每请求一次,都要对全局list集合进行一次清理 + //idList.clear(); + List idList = new ArrayList(); + List records = new ArrayList<>(); + for (int i = 0; i < recordList.size(); i++) { + SysDepart depart = recordList.get(i); + SysDepartTreeModel sysDepartTreeModel = new SysDepartTreeModel(); + // 将sysDepart转换为sysDepartTreeModel + convertSysDepartToSysDepartTreeModel(depart, sysDepartTreeModel); + records.add(sysDepartTreeModel); + } + List tree = findChildren(records, idList); + setEmptyChildrenAsNull(tree); + return tree; + } + + /** + * 获取 DepartIdModel + * @param recordList + * @return + */ + public static List wrapTreeDataToDepartIdTreeList(List recordList) { + // 在该方法每请求一次,都要对全局list集合进行一次清理 + //idList.clear(); + List idList = new ArrayList(); + List records = new ArrayList<>(); + for (int i = 0; i < recordList.size(); i++) { + SysDepart depart = recordList.get(i); + SysDepartTreeModel sysDepartTreeModel = new SysDepartTreeModel(); + // 将sysDepart转换为sysDepartTreeModel + convertSysDepartToSysDepartTreeModel(depart, sysDepartTreeModel); + records.add(sysDepartTreeModel); + } + findChildren(records, idList); + return idList; + } + + /** + * queryTreeList的子方法 ====2===== + * 该方法是找到并封装顶级父类的节点到TreeList集合 + */ + private static List findChildren(List recordList, + List departIdList) { + + List treeList = new ArrayList<>(); + for (int i = 0; i < recordList.size(); i++) { + SysDepartTreeModel branch = recordList.get(i); + if (oConvertUtils.isEmpty(branch.getParentId())) { + treeList.add(branch); + DepartIdModel departIdModel = new DepartIdModel().convert(branch); + + departIdList.add(departIdModel); + } + } + getGrandChildren(treeList,recordList,departIdList); + + //idList = departIdList; + return treeList; + } + + /** + * queryTreeList的子方法====3==== + *该方法是找到顶级父类下的所有子节点集合并封装到TreeList集合 + */ + private static void getGrandChildren(List treeList,List recordList,List idList) { + + for (int i = 0; i < treeList.size(); i++) { + SysDepartTreeModel model = treeList.get(i); + DepartIdModel idModel = idList.get(i); + for (int i1 = 0; i1 < recordList.size(); i1++) { + SysDepartTreeModel m = recordList.get(i1); + if (m.getParentId()!=null && m.getParentId().equals(model.getId())) { + model.getChildren().add(m); + DepartIdModel dim = new DepartIdModel().convert(m); + + idModel.getChildren().add(dim); + } + } + getGrandChildren(treeList.get(i).getChildren(), recordList, idList.get(i).getChildren()); + } + + } + + + /** + * queryTreeList的子方法 ====4==== + * 该方法是将子节点为空的List集合设置为Null值 + */ + private static void setEmptyChildrenAsNull(List treeList) { + + for (int i = 0; i < treeList.size(); i++) { + SysDepartTreeModel model = treeList.get(i); + if (model.getChildren().size() == 0) { + model.setChildren(null); + model.setIsLeaf(true); + }else{ + setEmptyChildrenAsNull(model.getChildren()); + model.setIsLeaf(false); + } + } + // sysDepartTreeList = treeList; + } + + /** + * 将SysDepart对象转换成SysDepartTreeModel对象 + * @author 马志朝 + * @date 2021/3/25 13:15 + * @param sysDepart 待转换的对象 + * @param sysDepartTreeModel 转换的结果对象 + * @return + */ + public static void convertSysDepartToSysDepartTreeModel(SysDepart sysDepart, SysDepartTreeModel sysDepartTreeModel){ + sysDepartTreeModel.setKey( sysDepart.getId()); + sysDepartTreeModel.setValue( sysDepart.getId()); + sysDepartTreeModel.setTitle(sysDepart.getDepartName()); + sysDepartTreeModel.setId(sysDepart.getId()); + sysDepartTreeModel.setParentId(sysDepart.getParentId()); + sysDepartTreeModel.setDepartName(sysDepart.getDepartName()); + sysDepartTreeModel.setDepartNameEn(sysDepart.getDepartNameEn()); + sysDepartTreeModel.setDepartNameAbbr(sysDepart.getDepartNameAbbr()); + sysDepartTreeModel.setDepartOrder(sysDepart.getDepartOrder()); + sysDepartTreeModel.setDescription(sysDepart.getDescription()); + sysDepartTreeModel.setOrgCategory(sysDepart.getOrgCategory()); + sysDepartTreeModel.setOrgType(sysDepart.getOrgType()); + sysDepartTreeModel.setOrgCode(sysDepart.getOrgCode()); + sysDepartTreeModel.setMobile(sysDepart.getMobile()); + sysDepartTreeModel.setFax(sysDepart.getFax()); + sysDepartTreeModel.setAddress(sysDepart.getAddress()); + sysDepartTreeModel.setMemo(sysDepart.getMemo()); + sysDepartTreeModel.setStatus(sysDepart.getStatus()); + sysDepartTreeModel.setDelFlag(sysDepart.getDelFlag()); + sysDepartTreeModel.setCreateBy(sysDepart.getCreateBy()); + sysDepartTreeModel.setCreateTime(sysDepart.getCreateTime()); + sysDepartTreeModel.setUpdateBy(sysDepart.getUpdateBy()); + sysDepartTreeModel.setUpdateTime(sysDepart.getUpdateTime()); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java new file mode 100644 index 00000000..3db51012 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/PermissionDataUtil.java @@ -0,0 +1,95 @@ +package com.jero.modules.system.util; + +import java.util.List; + +import com.jero.common.util.oConvertUtils; +import com.jero.modules.system.entity.SysPermission; + +/** + * @Author: scott + * @Date: 2019-04-03 + */ +public class PermissionDataUtil { + + /** + * 智能处理错误数据,简化用户失误操作 + * + * @param permission + */ + public static SysPermission intelligentProcessData(SysPermission permission) { + if (permission == null) { + return null; + } + + // 组件 + if (oConvertUtils.isNotEmpty(permission.getComponent())) { + String component = permission.getComponent(); + if (component.startsWith("/")) { + component = component.substring(1); + } + if (component.startsWith("views/")) { + component = component.replaceFirst("views/", ""); + } + if (component.startsWith("src/views/")) { + component = component.replaceFirst("src/views/", ""); + } + if (component.endsWith(".vue")) { + component = component.replace(".vue", ""); + } + permission.setComponent(component); + } + + // 请求URL + if (oConvertUtils.isNotEmpty(permission.getUrl())) { + String url = permission.getUrl(); + if (url.endsWith(".vue")) { + url = url.replace(".vue", ""); + } + if (!url.startsWith("http") && !url.startsWith("/")&&!url.trim().startsWith("{{")) { + url = "/" + url; + } + permission.setUrl(url); + } + + // 一级菜单默认组件 + if (0 == permission.getMenuType() && oConvertUtils.isEmpty(permission.getComponent())) { + // 一级菜单默认组件 + permission.setComponent("layouts/RouteView"); + } + return permission; + } + + /** + * 如果没有index页面 需要new 一个放到list中 + * @param metaList + */ + public static void addIndexPage(List metaList) { + boolean hasIndexMenu = false; + for (SysPermission sysPermission : metaList) { + if("首页".equals(sysPermission.getName())) { + hasIndexMenu = true; + break; + } + } + if(!hasIndexMenu) { + metaList.add(0,new SysPermission(true)); + } + } + + /** + * 判断是否授权首页 + * @param metaList + * @return + */ + public static boolean hasIndexPage(List metaList){ + boolean hasIndexMenu = false; + for (SysPermission sysPermission : metaList) { + if("首页".equals(sysPermission.getName())) { + hasIndexMenu = true; + break; + } + } + return hasIndexMenu; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java new file mode 100644 index 00000000..9c20aa54 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/RandImageUtil.java @@ -0,0 +1,144 @@ +package com.jero.modules.system.util; + +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Base64; +import java.util.Random; + +/** + * 登录验证码工具类 + */ +public class RandImageUtil { + + public static final String key = "JERO_LOGIN_KEY"; + + /** + * 定义图形大小 + */ + private static final int width = 105; + /** + * 定义图形大小 + */ + private static final int height = 35; + + /** + * 定义干扰线数量 + */ + private static final int count = 200; + + /** + * 干扰线的长度=1.414*lineWidth + */ + private static final int lineWidth = 2; + + /** + * 图片格式 + */ + private static final String IMG_FORMAT = "JPEG"; + + /** + * base64 图片前缀 + */ + private static final String BASE64_PRE = "data:image/jpg;base64,"; + + /** + * 直接通过response 返回图片 + * @param response + * @param resultCode + * @throws IOException + */ + public static void generate(HttpServletResponse response, String resultCode) throws IOException { + BufferedImage image = getImageBuffer(resultCode); + // 输出图象到页面 + ImageIO.write(image, IMG_FORMAT, response.getOutputStream()); + } + + /** + * 生成base64字符串 + * @param resultCode + * @return + * @throws IOException + */ + public static String generate(String resultCode) throws IOException { + BufferedImage image = getImageBuffer(resultCode); + + ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); + //写入流中 + ImageIO.write(image, IMG_FORMAT, byteStream); + //转换成字节 + byte[] bytes = byteStream.toByteArray(); + //转换成base64串 + String base64 = Base64.getEncoder().encodeToString(bytes).trim(); + base64 = base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n + + //写到指定位置 + //ImageIO.write(bufferedImage, "png", new File("")); + + return BASE64_PRE+base64; + } + + private static BufferedImage getImageBuffer(String resultCode){ + // 在内存中创建图象 + final BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + // 获取图形上下文 + final Graphics2D graphics = (Graphics2D) image.getGraphics(); + // 设定背景颜色 + graphics.setColor(Color.WHITE); // ---1 + graphics.fillRect(0, 0, width, height); + // 设定边框颜色 +// graphics.setColor(getRandColor(100, 200)); // ---2 + graphics.drawRect(0, 0, width - 1, height - 1); + + final Random random = new Random(); + // 随机产生干扰线,使图象中的认证码不易被其它程序探测到 + for (int i = 0; i < count; i++) { + graphics.setColor(getRandColor(150, 200)); // ---3 + + final int x = random.nextInt(width - lineWidth - 1) + 1; // 保证画在边框之内 + final int y = random.nextInt(height - lineWidth - 1) + 1; + final int xl = random.nextInt(lineWidth); + final int yl = random.nextInt(lineWidth); + graphics.drawLine(x, y, x + xl, y + yl); + } + // 取随机产生的认证码 + for (int i = 0; i < resultCode.length(); i++) { + // 将认证码显示到图象中,调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成 + // graphics.setColor(new Color(20 + random.nextInt(130), 20 + random + // .nextInt(130), 20 + random.nextInt(130))); + // 设置字体颜色 + graphics.setColor(Color.BLACK); + // 设置字体样式 +// graphics.setFont(new Font("Arial Black", Font.ITALIC, 18)); + graphics.setFont(new Font("Times New Roman", Font.BOLD, 24)); + // 设置字符,字符间距,上边距 + graphics.drawString(String.valueOf(resultCode.charAt(i)), (23 * i) + 8, 26); + } + for(int i = 0; i < 4; i++){ + graphics.setColor(getRandColor(0, 256)); + graphics.drawLine(0, random.nextInt(height), width, random.nextInt(height)); + } + // 图象生效 + graphics.dispose(); + return image; + } + + private static Color getRandColor(int fc, int bc) { // 取得给定范围随机颜色 + final Random random = new Random(); + if (fc > 255) { + fc = 255; + } + if (bc > 255) { + bc = 255; + } + + final int r = fc + random.nextInt(bc - fc); + final int g = fc + random.nextInt(bc - fc); + final int b = fc + random.nextInt(bc - fc); + + return new Color(r, g, b); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java new file mode 100644 index 00000000..366ee1e8 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/SecurityUtil.java @@ -0,0 +1,51 @@ +package com.jero.modules.system.util; + + +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.crypto.symmetric.SymmetricAlgorithm; +import cn.hutool.crypto.symmetric.SymmetricCrypto; + +/** + * @Description: 密码加密解密 + * @author: lsq + * @date: 2020年09月07日 14:26 + */ +public class SecurityUtil { + /**加密key*/ + private static String key = "JERO-BOOT1423670"; + + //---AES加密---------begin--------- + /**加密 + * @param content + * @return + */ + public static String jiami(String content) { + SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); + String encryptResultStr = aes.encryptHex(content); + return encryptResultStr; + } + + /**解密 + * @param encryptResultStr + * @return + */ + public static String jiemi(String encryptResultStr){ + SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key.getBytes()); + //解密为字符串 + String decryptResult = aes.decryptStr(encryptResultStr, CharsetUtil.CHARSET_UTF_8); + return decryptResult; + } + //---AES加密---------end--------- + /** + * 主函数 + */ + public static void main(String[] args) { + String content="test1111"; + String encrypt = jiami(content); + System.out.println(encrypt); + //构建 + String decrypt = jiemi(encrypt); + //解密为字符串 + System.out.println(decrypt); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/util/TenantContext.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/TenantContext.java new file mode 100644 index 00000000..7b9abaae --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/util/TenantContext.java @@ -0,0 +1,25 @@ +package com.jero.modules.system.util; + +import lombok.extern.slf4j.Slf4j; + +/** + * 多租户 tenant_id存储器 + */ +@Slf4j +public class TenantContext { + + private static ThreadLocal currentTenant = new ThreadLocal<>(); + + public static void setTenant(String tenant) { + log.debug(" setting tenant to " + tenant); + currentTenant.set(tenant); + } + + public static String getTenant() { + return currentTenant.get(); + } + + public static void clear(){ + currentTenant.remove(); + } +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDepartUsersVO.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDepartUsersVO.java new file mode 100644 index 00000000..3f432ab0 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDepartUsersVO.java @@ -0,0 +1,28 @@ +package com.jero.modules.system.vo; + +import java.io.Serializable; +import java.util.List; + +import lombok.Data; + +@Data +public class SysDepartUsersVO implements Serializable{ + private static final long serialVersionUID = 1L; + + /**部门id*/ + private String depId; + /**对应的用户id集合*/ + private List userIdList; + public SysDepartUsersVO(String depId, List userIdList) { + super(); + this.depId = depId; + this.userIdList = userIdList; + } + //update-begin--Author:kangxiaolin Date:20190908 for:[512][部门管理]点击添加已有用户失败修复-------------------- + + public SysDepartUsersVO(){ + + } + //update-begin--Author:kangxiaolin Date:20190908 for:[512][部门管理]点击添加已有用户失败修复-------------------- + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDictPage.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDictPage.java new file mode 100644 index 00000000..2647ebfa --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysDictPage.java @@ -0,0 +1,41 @@ +package com.jero.modules.system.vo; + +import lombok.Data; +import com.jero.modules.system.entity.SysDictItem; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelCollection; + +import java.util.List; + +@Data +public class SysDictPage { + + /** + * 主键 + */ + private String id; + /** + * 字典名称 + */ + @Excel(name = "字典名称", width = 20) + private String dictName; + + /** + * 字典编码 + */ + @Excel(name = "字典编码", width = 30) + private String dictCode; + /** + * 删除状态 + */ + private Integer delFlag; + /** + * 描述 + */ + @Excel(name = "描述", width = 30) + private String description; + + @ExcelCollection(name = "字典列表") + private List sysDictItemList; + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserDepVo.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserDepVo.java new file mode 100644 index 00000000..312e56a4 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserDepVo.java @@ -0,0 +1,15 @@ +package com.jero.modules.system.vo; + +import lombok.Data; + +/** + * @Author qinfeng + * @Date 2020/1/2 21:58 + * @Description: + * @Version 1.0 + */ +@Data +public class SysUserDepVo { + private String userId; + private String departName; +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserRoleVO.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserRoleVO.java new file mode 100644 index 00000000..9ac1ebe8 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/vo/SysUserRoleVO.java @@ -0,0 +1,27 @@ +package com.jero.modules.system.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class SysUserRoleVO implements Serializable{ + private static final long serialVersionUID = 1L; + + /**部门id*/ + private String roleId; + /**对应的用户id集合*/ + private List userIdList; + + public SysUserRoleVO() { + super(); + } + + public SysUserRoleVO(String roleId, List userIdList) { + super(); + this.roleId = roleId; + this.userIdList = userIdList; + } + +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/CreateGroup.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/CreateGroup.java new file mode 100644 index 00000000..27588249 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/CreateGroup.java @@ -0,0 +1,8 @@ +package com.jero.modules.system.volid.group; + +/** + * @author liJiaRao + * @date 2021-08-05 16:08 + */ +public interface CreateGroup { +} diff --git a/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/UpdateGroup.java b/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/UpdateGroup.java new file mode 100644 index 00000000..92bb2ed3 --- /dev/null +++ b/jero-boot-module-system/src/main/java/com/jero/modules/system/volid/group/UpdateGroup.java @@ -0,0 +1,8 @@ +package com.jero.modules.system.volid.group; + +/** + * @author liJiaRao + * @date 2021-08-05 16:07 + */ +public interface UpdateGroup { +} diff --git a/jero-boot-single-startup/pom.xml b/jero-boot-single-startup/pom.xml new file mode 100644 index 00000000..863248a0 --- /dev/null +++ b/jero-boot-single-startup/pom.xml @@ -0,0 +1,44 @@ + + + + jero-boot + com.jero.boot + 2.4.2 + + 4.0.0 + + jero-boot-single-startup + + + + com.jero.boot + jero-boot-module-system + ${jero.version} + + + com.jero.boot + jero-boot-module-demo + ${jero.version} + + + p6spy + p6spy + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + false + + + + + + \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/java/com/jero/JeroSystemSingleApplication.java b/jero-boot-single-startup/src/main/java/com/jero/JeroSystemSingleApplication.java new file mode 100644 index 00000000..078a88a1 --- /dev/null +++ b/jero-boot-single-startup/src/main/java/com/jero/JeroSystemSingleApplication.java @@ -0,0 +1,43 @@ +package com.jero; + +import com.jero.common.util.oConvertUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.core.env.Environment; + +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * @Description 单体应用启动类 + * @Author zero + * @Date 2021/3/15 + **/ +@Slf4j +@SpringBootApplication +public class JeroSystemSingleApplication extends SpringBootServletInitializer { + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(JeroSystemSingleApplication.class); + } + + public static void main(String[] args) throws UnknownHostException { + ConfigurableApplicationContext application = SpringApplication.run(JeroSystemSingleApplication.class, args); + Environment env = application.getEnvironment(); + String ip = InetAddress.getLocalHost().getHostAddress(); + String port = env.getProperty("server.port"); + String path = oConvertUtils.getString(env.getProperty("server.servlet.context-path")); + log.info("\n----------------------------------------------------------\n\t" + + "Application jero-boot is running! Access URLs:\n\t" + + "Local: \t\thttp://localhost:" + port + path + "/\n\t" + + "External: \thttp://" + ip + ":" + port + path + "/\n\t" + + "Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" + + "----------------------------------------------------------"); + } + +} diff --git a/jero-boot-single-startup/src/main/resources/application-dev.yml b/jero-boot-single-startup/src/main/resources/application-dev.yml new file mode 100644 index 00000000..993fcaea --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/application-dev.yml @@ -0,0 +1,296 @@ +server: + port: 8080 + tomcat: + max-swallow-size: -1 + error: + include-exception: true + include-stacktrace: ALWAYS + include-message: ALWAYS + servlet: + context-path: /jero-boot + compression: + enabled: true + min-response-size: 1024 + mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* + +management: + endpoints: + web: + exposure: + include: metrics,httptrace + +spring: + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + mail: + host: smtp.163.com + username: test@163.com + password: ?? + properties: + mail: + smtp: + auth: true + starttls: + enable: true + required: true + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + initialize-schema: embedded + #设置自动启动,默认为 true + auto-startup: true + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: MyScheduler + instanceId: AUTO + jobStore: + class: org.quartz.impl.jdbcjobstore.JobStoreTX + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: true + misfireThreshold: 60000 + clusterCheckinInterval: 10000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 10 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + jpa: + open-in-view: false + activiti: + check-process-definitions: false + #启用作业执行器 + async-executor-activate: false + #启用异步执行器 + job-executor-activate: false + aop: + proxy-target-class: true + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + prefer-file-system-access: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + datasource: + druid: + stat-view-servlet: + enabled: true + loginUsername: admin + loginPassword: 123456 + allow: + web-stat-filter: + enabled: true + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + datasource: + master: + url: jdbc:p6spy:mysql://10.0.3.44:3306/jero-boot-base?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: 123456 + driver-class-name: com.p6spy.engine.spy.P6SpyDriver + # 多数据源配置 + #multi-datasource1: + #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + #username: root + #password: root + #driver-class-name: com.mysql.cj.jdbc.Driver + #redis 配置 + redis: + database: 14 + host: 121.36.69.172 + lettuce: + pool: + max-active: 8 #最大连接数据库连接数,设 0 为没有限制 + max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 + max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 + min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 + shutdown-timeout: 100ms + password: hzwlsoft.com + port: 4780 +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:com/jero/**/xml/*Mapper.xml + global-config: + # 关闭MP3.0自带的banner + banner: false + db-config: + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; + id-type: ASSIGN_ID + # 默认数据库表下划线命名 + table-underline: true +# configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 返回类型为Map,显示null对应的字段 +# call-setters-on-nulls: true +#jero专用配置 +jero: + # 本地:local\Minio:minio\阿里云:alioss + uploadType: local + path: + #文件上传根目录 设置 + upload: D://opt//upFiles + #webapp文件路径 + webapp: D://opt//webapp + shiro: + excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/** + #阿里云oss存储配置 + oss: + endpoint: oss-cn-beijing.aliyuncs.com + accessKey: ?? + secretKey: ?? + bucketName: jeroos + staticDomain: ?? + # ElasticSearch 6设置 + elasticsearch: + cluster-name: jero-ES + cluster-nodes: 127.0.0.1:9200 + check-enabled: false + # 表单设计器配置 + desform: + # 主题颜色(仅支持 16进制颜色代码) + theme-color: "#1890ff" + # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置) + upload-type: system + # 在线预览文件服务器地址配置 + file-view-domain: 127.0.0.1:8012 + # minio文件上传 + minio: + minio_url: http://minio.jero.com + minio_name: ?? + minio_pass: ?? + bucketName: otatest + #大屏报表参数设置 + jmreport: + mode: dev + #数据字典是否可以全局看到 + saas: false + #是否需要校验token + is_verify_token: false + #必须校验方法 + verify_methods: remove,delete,save,add,update + #Wps在线文档 + wps: + domain: https://wwo.wps.cn/office/ + appid: ?? + appsecret: ?? + #xxl-job配置 + xxljob: + enabled: false + adminAddresses: http://127.0.0.1:9080/xxl-job-admin + appname: ${spring.application.name} + accessToken: '' + address: 127.0.0.1:30007 + ip: 127.0.0.1 + port: 30007 + logPath: logs/jero/job/jobhandler/ + logRetentionDays: 30 + #自定义路由配置 yml nacos database + route: + config: + data-id: jero-gateway-router + group: DEFAULT_GROUP + data-type: yml + #分布式锁配置 + redisson: + address: 127.0.0.1:4780 + password: + type: STANDALONE + enabled: true + # 文件限制后缀黑名单 + fileSuffixLimits: 0x00,%00,\\00,.jsp,.exe,.php,.asp,.aspx,.jspx,.xml,.html,.js,.sh,.bin + # 跨站白名单 + whiteUrls: + # xss白名单 + xssExcludedPages: /login,/updatePassword,/associationIntroduction/edit,/tbIndustryNews/add,/tbIndustryNews/edit,/essaySelection/edit,/essaySelection/add,/standardsDay/edit,/standardsDay/add,/rightsObligations/edit,/dynamic/add,/dynamic/edit,/dynamicManagement/add,/dynamicManagement/edit,/evaluationManagement/add,/evaluationManagement/edit,/meetingNews/add,/meetingNews/edit,/stableCrossTraining/add,/stableCrossTraining/edit,/memberRights/add,/memberRights/edit,/compreResource/add,/compreResource/edit,/councilIntro/edit,/businesManagement/edit,/standardManagement/edit + # cors白名单 + notFilter: + # origin地址 + originIp: http://localhost:3000,http://localhost:3001,http://localhost:8080,127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:8080,10.0.1.70:3000,10.0.1.81:3000,10.0.1.81:8080,192.168.1.7:8080,192.168.1.7:3000,192.168.1.7:3001,121.36.69.172:4780 + +#cas单点登录 +cas: + prefixUrl: http://cas.example.org:8443/cas +#Mybatis输出sql日志 +logging: + level: + com.jero.modules.system.mapper: info +#swagger +knife4j: + production: false + basic: + enable: false + username: jero + password: jero.com +#第三方登录 +justauth: + enabled: true + type: + GITHUB: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/github/callback + WECHAT_ENTERPRISE: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_enterprise/callback + agent-id: 1000002 + DINGTALK: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/dingtalk/callback + WECHAT_OPEN: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_open/callback + cache: + type: default + prefix: 'demo::' + timeout: 1h diff --git a/jero-boot-single-startup/src/main/resources/application-prod.yml b/jero-boot-single-startup/src/main/resources/application-prod.yml new file mode 100644 index 00000000..b7112cfa --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/application-prod.yml @@ -0,0 +1,289 @@ +server: + port: 8080 + tomcat: + max-swallow-size: -1 + error: + include-exception: true + include-stacktrace: ALWAYS + include-message: ALWAYS + servlet: + context-path: /jero-boot + compression: + enabled: true + min-response-size: 1024 + mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* + +management: + endpoints: + web: + exposure: + include: metrics,httptrace + +spring: + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + mail: + host: smtp.163.com + username: test@163.com + password: ?? + properties: + mail: + smtp: + auth: true + starttls: + enable: true + required: true + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + initialize-schema: embedded + #设置自动启动,默认为 true + auto-startup: true + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: MyScheduler + instanceId: AUTO + jobStore: + class: org.quartz.impl.jdbcjobstore.JobStoreTX + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: true + misfireThreshold: 60000 + clusterCheckinInterval: 10000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 10 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + jpa: + open-in-view: false + activiti: + check-process-definitions: false + #启用作业执行器 + async-executor-activate: false + #启用异步执行器 + job-executor-activate: false + aop: + proxy-target-class: true + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + prefer-file-system-access: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + datasource: + druid: + stat-view-servlet: + enabled: true + loginUsername: admin + loginPassword: 123456 + allow: + web-stat-filter: + enabled: true + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + # 多数据源配置 + #multi-datasource1: + #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + #username: root + #password: root + #driver-class-name: com.mysql.cj.jdbc.Driver + #redis 配置 + redis: + database: 0 + host: 127.0.0.1 + lettuce: + pool: + max-active: 8 #最大连接数据库连接数,设 0 为没有限制 + max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 + max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 + min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 + shutdown-timeout: 100ms + password: '' + port: 4780 +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:com/jero/**/xml/*Mapper.xml + global-config: + # 关闭MP3.0自带的banner + banner: false + db-config: + #主键类型 0:"数据库ID自增",1:"该类型为未设置主键类型", 2:"用户输入ID",3:"全局唯一ID (数字类型唯一ID)", 4:"全局唯一ID UUID",5:"字符串全局唯一ID (idWorker 的字符串表示)"; + id-type: ASSIGN_ID + # 默认数据库表下划线命名 + table-underline: true + configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 + #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 返回类型为Map,显示null对应的字段 + call-setters-on-nulls: true +#jero专用配置 +jero : + # 本地:local\Minio:minio\阿里云:alioss + uploadType: alioss + path : + #文件上传根目录 设置 + upload: /opt/jero-boot/upload + #webapp文件路径 + webapp: /opt/jero-boot/webapp + shiro: + excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/** + #阿里云oss存储配置 + oss: + endpoint: oss-cn-beijing.aliyuncs.com + accessKey: ?? + secretKey: ?? + bucketName: jeroos + staticDomain: https://static.jero.com + # ElasticSearch 设置 + elasticsearch: + cluster-name: jero-ES + cluster-nodes: 111.225.222.176:9200 + check-enabled: true + # 表单设计器配置 + desform: + # 主题颜色(仅支持 16进制颜色代码) + theme-color: "#1890ff" + # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置) + upload-type: system + # 在线预览文件服务器地址配置 + file-view-domain: http://fileview.jero.com + # minio文件上传 + minio: + minio_url: http://minio.jero.com + minio_name: ?? + minio_pass: ?? + bucketName: otatest + #大屏报表参数设置 + jmreport: + mode: prod + #数据字典是否可以全局看到 + saas: false + #是否需要校验token + is_verify_token: true + #必须校验方法 + verify_methods: remove,delete,save,add,update + #Wps在线文档 + wps: + domain: https://wwo.wps.cn/office/ + appid: true + appsecret: true + #xxl-job配置 + xxljob: + enabled: false + adminAddresses: http://127.0.0.1:9080/xxl-job-admin + appname: ${spring.application.name} + accessToken: '' + address: 127.0.0.1:30007 + ip: 127.0.0.1 + port: 30007 + logPath: logs/jero/job/jobhandler/ + logRetentionDays: 30 + #自定义路由配置 yml nacos database + route: + config: + data-id: jero-gateway-router + group: DEFAULT_GROUP + data-type: yml + #分布式锁配置 + redisson: + address: 127.0.0.1:4780 + password: + type: STANDALONE + enabled: true + # 文件限制后缀黑名单 + fileSuffixLimits : 0x00,%00,\\00,.jsp,.exe,.php,.asp,.aspx,.jspx,.xml,.html,.js,.sh,.bin + # 跨站白名单 + whiteUrls: +#cas单点登录 +cas: + prefixUrl: http://cas.example.org:8443/cas +#Mybatis输出sql日志 +logging: + level: + com.jero.modules.system.mapper : info +#swagger +knife4j: + production: false + basic: + enable: true + username: jero + password: jero.com +#第三方登录 +justauth: + enabled: true + type: + GITHUB: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/github/callback + WECHAT_ENTERPRISE: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_enterprise/callback + agent-id: 1000002 + DINGTALK: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/dingtalk/callback + WECHAT_OPEN: + client-id: true + client-secret: true + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_open/callback + cache: + type: default + prefix: 'demo::' + timeout: 1h \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/application-test.yml b/jero-boot-single-startup/src/main/resources/application-test.yml new file mode 100644 index 00000000..ac7de9c8 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/application-test.yml @@ -0,0 +1,289 @@ +server: + port: 8080 + tomcat: + max-swallow-size: -1 + error: + include-exception: true + include-stacktrace: ALWAYS + include-message: ALWAYS + servlet: + context-path: /jero-boot + compression: + enabled: true + min-response-size: 1024 + mime-types: application/javascript,application/json,application/xml,text/html,text/xml,text/plain,text/css,image/* + +management: + endpoints: + web: + exposure: + include: metrics,httptrace + +spring: + servlet: + multipart: + max-file-size: 10MB + max-request-size: 10MB + mail: + host: smtp.163.com + username: test@163.com + password: ?? + properties: + mail: + smtp: + auth: true + starttls: + enable: true + required: true + ## quartz定时任务,采用数据库方式 + quartz: + job-store-type: jdbc + initialize-schema: embedded + #设置自动启动,默认为 true + auto-startup: true + #启动时更新己存在的Job + overwrite-existing-jobs: true + properties: + org: + quartz: + scheduler: + instanceName: MyScheduler + instanceId: AUTO + jobStore: + class: org.quartz.impl.jdbcjobstore.JobStoreTX + driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate + tablePrefix: QRTZ_ + isClustered: true + misfireThreshold: 60000 + clusterCheckinInterval: 10000 + threadPool: + class: org.quartz.simpl.SimpleThreadPool + threadCount: 10 + threadPriority: 5 + threadsInheritContextClassLoaderOfInitializingThread: true + #json 时间戳统一转换 + jackson: + date-format: yyyy-MM-dd HH:mm:ss + time-zone: GMT+8 + aop: + proxy-target-class: true + activiti: + check-process-definitions: false + #启用作业执行器 + async-executor-activate: false + #启用异步执行器 + job-executor-activate: false + jpa: + open-in-view: false + #配置freemarker + freemarker: + # 设置模板后缀名 + suffix: .ftl + # 设置文档类型 + content-type: text/html + # 设置页面编码格式 + charset: UTF-8 + # 设置页面缓存 + cache: false + prefer-file-system-access: false + # 设置ftl文件路径 + template-loader-path: + - classpath:/templates + # 设置静态文件路径,js,css等 + mvc: + static-path-pattern: /** + resource: + static-locations: classpath:/static/,classpath:/public/ + autoconfigure: + exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure + datasource: + druid: + stat-view-servlet: + enabled: true + loginUsername: admin + loginPassword: 123456 + allow: + web-stat-filter: + enabled: true + dynamic: + druid: # 全局druid参数,绝大部分值和默认保持一致。(现已支持的参数如下,不清楚含义不要乱设置) + # 连接池的配置信息 + # 初始化大小,最小,最大 + initial-size: 5 + min-idle: 5 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + # 打开PSCache,并且指定每个连接上PSCache的大小 + poolPreparedStatements: true + maxPoolPreparedStatementPerConnectionSize: 20 + # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 + filters: stat,wall,slf4j + # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 + connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 + datasource: + master: + url: jdbc:mysql://127.0.0.1:3306/jero-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + username: root + password: root + driver-class-name: com.mysql.cj.jdbc.Driver + # 多数据源配置 + #multi-datasource1: + #url: jdbc:mysql://localhost:3306/jero-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + #username: root + #password: root + #driver-class-name: com.mysql.cj.jdbc.Driver + #redis 配置 + redis: + database: 0 + host: 192.168.1.199 + lettuce: + pool: + max-active: 8 #最大连接数据库连接数,设 0 为没有限制 + max-idle: 8 #最大等待连接中的数量,设 0 为没有限制 + max-wait: -1ms #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。 + min-idle: 0 #最小等待连接中的数量,设 0 为没有限制 + shutdown-timeout: 100ms + password: '' + port: 4780 +#mybatis plus 设置 +mybatis-plus: + mapper-locations: classpath*:com/jero/**/xml/*Mapper.xml + global-config: + # 关闭MP3.0自带的banner + banner: false + db-config: + #主键类型 + id-type: ASSIGN_ID + # 默认数据库表下划线命名 + table-underline: true + configuration: + # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + # 返回类型为Map,显示null对应的字段 + call-setters-on-nulls: true +#jero专用配置 +jero : + # 本地:local\Minio:minio\阿里云:alioss + uploadType: local + path : + #文件上传根目录 设置 + upload: D://opt//upFiles + #webapp文件路径 + webapp: D://opt//webapp + shiro: + excludeUrls: /test/jeroDemo/demo3,/test/jeroDemo/redisDemo/**,/category/**,/visual/**,/map/**,/jmreport/bigscreen2/** + #阿里云oss存储配置 + oss: + endpoint: oss-cn-beijing.aliyuncs.com + accessKey: ?? + secretKey: ?? + bucketName: jeroos + staticDomain: https://static.jero.com + # ElasticSearch 设置 + elasticsearch: + cluster-name: jero-ES + cluster-nodes: ?? + check-enabled: false + # 表单设计器配置 + desform: + # 主题颜色(仅支持 16进制颜色代码) + theme-color: "#1890ff" + # 文件、图片上传方式,可选项:qiniu(七牛云)、system(跟随系统配置) + upload-type: system + # 在线预览文件服务器地址配置 + file-view-domain: http://127.0.0.1:8012 + # minio文件上传 + minio: + minio_url: http://minio.jero.com + minio_name: ?? + minio_pass: ?? + bucketName: otatest + #大屏报表参数设置 + jmreport: + mode: prod + #数据字典是否可以全局看到 + saas: false + #是否需要校验token + is_verify_token: false + #必须校验方法 + verify_methods: remove,delete,save,add,update + #Wps在线文档 + wps: + domain: https://wwo.wps.cn/office/ + appid: ?? + appsecret: ?? + #xxl-job配置 + xxljob: + enabled: false + adminAddresses: http://127.0.0.1:9080/xxl-job-admin + appname: ${spring.application.name} + accessToken: '' + address: 127.0.0.1:30007 + ip: 127.0.0.1 + port: 30007 + logPath: logs/jero/job/jobhandler/ + logRetentionDays: 30 + #自定义路由配置 yml nacos database + route: + config: + data-id: jero-gateway-router + group: DEFAULT_GROUP + data-type: yml + #分布式锁配置 + redisson: + address: 127.0.0.1:4780 + password: + type: STANDALONE + enabled: true + # 文件限制后缀黑名单 + fileSuffixLimits : 0x00,%00,\\00,.jsp,.exe,.php,.asp,.aspx,.jspx,.xml,.html,.js,.sh,.bin + # 跨站白名单 + whiteUrls: +#Mybatis输出sql日志 +logging: + level: + com.jero.modules.system.mapper : info +#cas单点登录 +cas: + prefixUrl: http://cas.example.org:8443/cas +#swagger +knife4j: + production: false + basic: + enable: false + username: jero + password: jero.com +#第三方登录 +justauth: + enabled: true + type: + GITHUB: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/github/callback + WECHAT_ENTERPRISE: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_enterprise/callback + agent-id: 1000002 + DINGTALK: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/dingtalk/callback + WECHAT_OPEN: + client-id: ?? + client-secret: ?? + redirect-uri: http://sso.test.com:8080/jero-boot/sys/thirdLogin/wechat_open/callback + cache: + type: default + prefix: 'demo::' + timeout: 1h diff --git a/jero-boot-single-startup/src/main/resources/application.yml b/jero-boot-single-startup/src/main/resources/application.yml new file mode 100644 index 00000000..2779e168 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/application.yml @@ -0,0 +1,5 @@ +spring: + application: + name: jero-system + profiles: + active: @profile.name@ \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/banner.txt b/jero-boot-single-startup/src/main/resources/banner.txt new file mode 100644 index 00000000..bdd2b539 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/banner.txt @@ -0,0 +1,14 @@ +${AnsiColor.BRIGHT_BLUE} + (_) | | | | + _ ___ ___ ___ __ _ ______| |__ ___ ___ | |_ + | |/ _ \/ _ \/ __/ _` |______| '_ \ / _ \ / _ \| __| + | | __/ __/ (_| (_| | | |_) | (_) | (_) | |_ + | |\___|\___|\___\__, | |_.__/ \___/ \___/ \__| + _/ | __/ | + |__/ |___/ + + +${AnsiColor.BRIGHT_GREEN} +jero Boot Version: 2.4.2 +Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version} +${AnsiColor.BLACK} diff --git a/jero-boot-single-startup/src/main/resources/logback-spring.xml b/jero-boot-single-startup/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..7fc0fa90 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/logback-spring.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}:%L) - %msg%n + + + + + + + + ${LOG_HOME}/jeroboot-%d{yyyy-MM-dd}.%i.log + + 30 + 10MB + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n + + + + + + + + ERROR + + + + %p%d%msg%M%F{32}%L + + + ${LOG_HOME}/error-log.html + + + + + + + + ${LOG_HOME}/jeroboot-%d{yyyy-MM-dd}.%i.html + + 30 + 10MB + + + + %p%d%msg%M%F{32}%L + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/spy.properties b/jero-boot-single-startup/src/main/resources/spy.properties new file mode 100644 index 00000000..0eb3c57d --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/spy.properties @@ -0,0 +1,21 @@ +module.log=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory +# 使用日志系统记录sql +appender=com.p6spy.engine.spy.appender.Slf4JLogger +# 是否开启日志过滤 默认false, 这项配置是否生效前提是配置了 include/exclude/sqlexpression +filter=true +## 过滤 Log 时所排除的表名列表,以逗号分隔。 +exclude=QRTZ_SCHEDULER_STATE,QRTZ_TRIGGERS,QRTZ_LOCKS,QRTZ_FIRED_TRIGGERS,dual +## 配置记录Log例外 +excludecategories=info,debug,result,commit,resultset +# 设置使用p6spy driver来做代理 +deregisterdrivers=true +# 日期格式 +dateformat=yyyy-MM-dd HH:mm:ss +# 实际驱动 +driverlist=com.mysql.cj.jdbc.Driver +# 是否开启慢SQL记录 +outagedetection=true +# 慢SQL记录标准 秒 +outagedetectioninterval=2 +# mybatisplus自定义日志打印 +logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/static/demo1.html b/jero-boot-single-startup/src/main/resources/static/demo1.html new file mode 100644 index 00000000..f9848691 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/demo1.html @@ -0,0 +1 @@ +demo1 \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/static/generic/LICENSE b/jero-boot-single-startup/src/main/resources/static/generic/LICENSE new file mode 100644 index 00000000..f433b1a5 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-H.bcmap new file mode 100644 index 00000000..2655fc70 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-V.bcmap new file mode 100644 index 00000000..f1ed8538 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-H.bcmap new file mode 100644 index 00000000..39e89d33 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-H.bcmap new file mode 100644 index 00000000..e4167cb5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-V.bcmap new file mode 100644 index 00000000..50b1646e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-V.bcmap new file mode 100644 index 00000000..d7af99b5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-H.bcmap new file mode 100644 index 00000000..37077d01 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-V.bcmap new file mode 100644 index 00000000..acf23231 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/78ms-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/83pv-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/83pv-RKSJ-H.bcmap new file mode 100644 index 00000000..2359bc52 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/83pv-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-H.bcmap new file mode 100644 index 00000000..af829382 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-V.bcmap new file mode 100644 index 00000000..780549de Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90ms-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-H.bcmap new file mode 100644 index 00000000..bfd3119c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-V.bcmap new file mode 100644 index 00000000..25ef14ab Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90msp-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-H.bcmap new file mode 100644 index 00000000..02f713bb Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-V.bcmap new file mode 100644 index 00000000..d08e0cc5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/90pv-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-H.bcmap new file mode 100644 index 00000000..59442aca Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-H.bcmap new file mode 100644 index 00000000..a3065e44 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-V.bcmap new file mode 100644 index 00000000..040014cf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-V.bcmap new file mode 100644 index 00000000..2f816d32 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Add-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-0.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-0.bcmap new file mode 100644 index 00000000..88ec04af Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-0.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-1.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-1.bcmap new file mode 100644 index 00000000..03a50147 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-1.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-2.bcmap new file mode 100644 index 00000000..2aa95141 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-3.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-3.bcmap new file mode 100644 index 00000000..86d8b8c7 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-3.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-4.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-4.bcmap new file mode 100644 index 00000000..f50fc6c1 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-4.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-5.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-5.bcmap new file mode 100644 index 00000000..6caf4a83 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-5.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-6.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-6.bcmap new file mode 100644 index 00000000..b77fb070 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-6.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap new file mode 100644 index 00000000..69d79a2c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-CNS1-UCS2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-0.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-0.bcmap new file mode 100644 index 00000000..36101083 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-0.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-1.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-1.bcmap new file mode 100644 index 00000000..707bb106 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-1.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-2.bcmap new file mode 100644 index 00000000..f7648cc3 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-3.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-3.bcmap new file mode 100644 index 00000000..85214589 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-3.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-4.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-4.bcmap new file mode 100644 index 00000000..e40c63ab Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-4.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-5.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-5.bcmap new file mode 100644 index 00000000..d7623b50 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-5.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-UCS2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-UCS2.bcmap new file mode 100644 index 00000000..75865259 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-GB1-UCS2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-0.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-0.bcmap new file mode 100644 index 00000000..f0e94ec1 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-0.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-1.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-1.bcmap new file mode 100644 index 00000000..dad42c5a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-1.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-2.bcmap new file mode 100644 index 00000000..090819a0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-3.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-3.bcmap new file mode 100644 index 00000000..087dfc15 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-3.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-4.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-4.bcmap new file mode 100644 index 00000000..46aa9bff Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-4.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-5.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-5.bcmap new file mode 100644 index 00000000..5b4b65cc Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-5.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-6.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-6.bcmap new file mode 100644 index 00000000..e77d699a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-6.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap new file mode 100644 index 00000000..128a1410 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Japan1-UCS2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-0.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-0.bcmap new file mode 100644 index 00000000..cef1a998 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-0.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-1.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-1.bcmap new file mode 100644 index 00000000..11ffa36d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-1.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-2.bcmap new file mode 100644 index 00000000..3172308c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap new file mode 100644 index 00000000..f3371c0c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Adobe-Korea1-UCS2.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-H.bcmap new file mode 100644 index 00000000..beb4d228 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-V.bcmap new file mode 100644 index 00000000..2d4f87d5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-H.bcmap new file mode 100644 index 00000000..ce001316 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-V.bcmap new file mode 100644 index 00000000..73b99ff2 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/B5pc-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-H.bcmap new file mode 100644 index 00000000..61d1d0cb Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-V.bcmap new file mode 100644 index 00000000..1a393a51 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-H.bcmap new file mode 100644 index 00000000..f738e218 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-V.bcmap new file mode 100644 index 00000000..9c3169f0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS1-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-H.bcmap new file mode 100644 index 00000000..c89b3527 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-V.bcmap new file mode 100644 index 00000000..7588cec8 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/CNS2-V.bcmap @@ -0,0 +1,3 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSECNS2-H \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-H.bcmap new file mode 100644 index 00000000..cb29415d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-V.bcmap new file mode 100644 index 00000000..f09aec63 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETHK-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-H.bcmap new file mode 100644 index 00000000..c2d77462 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-V.bcmap new file mode 100644 index 00000000..89bff159 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETen-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-H.bcmap new file mode 100644 index 00000000..a7d69db5 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-H.bcmap @@ -0,0 +1,3 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSE ETen-B5-H` ^ \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-V.bcmap new file mode 100644 index 00000000..adc5d618 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/ETenms-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-H.bcmap new file mode 100644 index 00000000..e92ea5b3 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-V.bcmap new file mode 100644 index 00000000..7a7c1832 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-H.bcmap new file mode 100644 index 00000000..3b5cde44 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-H.bcmap new file mode 100644 index 00000000..ea4d2d97 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-V.bcmap new file mode 100644 index 00000000..3457c277 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-V.bcmap new file mode 100644 index 00000000..4999ca40 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Ext-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-H.bcmap new file mode 100644 index 00000000..e39908b9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-V.bcmap new file mode 100644 index 00000000..d5be5446 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-H.bcmap new file mode 100644 index 00000000..39189c54 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-H.bcmap @@ -0,0 +1,4 @@ +RCopyright 1990-2009 Adobe Systems Incorporated. +All rights reserved. +See ./LICENSE!!]aX!!]`21> p z$]"Rd-U7* 4%+ Z {/%<9Kb1]." `],"] +"]h"]F"]$"]"]`"]>"]"]z"]X"]6"]"]r"]P"]."] "]j"]H"]&"]"]b"]@"]"]|"]Z"]8"]"]t"]R"]0"]"]l"]J"]("]"]d"]B"] "X~']W"]5"]"]q"]O"]-"] "]i"]G"]%"]"]a"]?"]"]{"]Y"]7"]"]s"]Q"]/"] "]k"]I"]'"]"]c"]A"]"]}"]["]9 \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-V.bcmap new file mode 100644 index 00000000..31083451 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GB-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-H.bcmap new file mode 100644 index 00000000..05fff7e8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-V.bcmap new file mode 100644 index 00000000..0cdf6bed Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-H.bcmap new file mode 100644 index 00000000..46f6ba59 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-V.bcmap new file mode 100644 index 00000000..d9a94798 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBK2K-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-H.bcmap new file mode 100644 index 00000000..5cb0af68 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-V.bcmap new file mode 100644 index 00000000..bca93b8e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBKp-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-H.bcmap new file mode 100644 index 00000000..4b4e2d32 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-V.bcmap new file mode 100644 index 00000000..38f70669 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-H.bcmap new file mode 100644 index 00000000..8437ac33 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-V.bcmap new file mode 100644 index 00000000..697ab4a8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBT-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-H.bcmap new file mode 100644 index 00000000..f6e50e89 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-V.bcmap new file mode 100644 index 00000000..6c0d71a2 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBTpc-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-H.bcmap new file mode 100644 index 00000000..c9edf67c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-V.bcmap new file mode 100644 index 00000000..31450c97 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/GBpc-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/H.bcmap new file mode 100644 index 00000000..7b24ea46 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-H.bcmap new file mode 100644 index 00000000..7d30c050 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-V.bcmap new file mode 100644 index 00000000..78946940 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdla-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-H.bcmap new file mode 100644 index 00000000..d829a231 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-V.bcmap new file mode 100644 index 00000000..2b572b50 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKdlb-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-H.bcmap new file mode 100644 index 00000000..971a4f23 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-V.bcmap new file mode 100644 index 00000000..d353ca25 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKgccs-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-H.bcmap new file mode 100644 index 00000000..576dc011 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-V.bcmap new file mode 100644 index 00000000..0e96d0e2 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm314-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-H.bcmap new file mode 100644 index 00000000..11d170c7 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-V.bcmap new file mode 100644 index 00000000..54959bf9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKm471-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-H.bcmap new file mode 100644 index 00000000..6ef7857a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-V.bcmap new file mode 100644 index 00000000..1fb2fa2a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/HKscs-B5-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hankaku.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hankaku.bcmap new file mode 100644 index 00000000..4b8ec7fc Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hankaku.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hiragana.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hiragana.bcmap new file mode 100644 index 00000000..17e983e7 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Hiragana.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-H.bcmap new file mode 100644 index 00000000..a45c65f0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-V.bcmap new file mode 100644 index 00000000..0e7b21f0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-H.bcmap new file mode 100644 index 00000000..b9b22b67 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-H.bcmap new file mode 100644 index 00000000..2531ffcf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-V.bcmap new file mode 100644 index 00000000..367ceb22 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-Johab-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-V.bcmap new file mode 100644 index 00000000..6ae2f0b6 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-H.bcmap new file mode 100644 index 00000000..a8d4240e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-H.bcmap new file mode 100644 index 00000000..8b4ae18f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-V.bcmap new file mode 100644 index 00000000..b655dbcf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-HW-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-V.bcmap new file mode 100644 index 00000000..21f97f65 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCms-UHC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-H.bcmap new file mode 100644 index 00000000..e06f361e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-V.bcmap new file mode 100644 index 00000000..f3c9113f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/KSCpc-EUC-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Katakana.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Katakana.bcmap new file mode 100644 index 00000000..524303c4 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Katakana.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/LICENSE b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/LICENSE new file mode 100644 index 00000000..b1ad168a --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/LICENSE @@ -0,0 +1,36 @@ +%%Copyright: ----------------------------------------------------------- +%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. +%%Copyright: All rights reserved. +%%Copyright: +%%Copyright: Redistribution and use in source and binary forms, with or +%%Copyright: without modification, are permitted provided that the +%%Copyright: following conditions are met: +%%Copyright: +%%Copyright: Redistributions of source code must retain the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer. +%%Copyright: +%%Copyright: Redistributions in binary form must reproduce the above +%%Copyright: copyright notice, this list of conditions and the following +%%Copyright: disclaimer in the documentation and/or other materials +%%Copyright: provided with the distribution. +%%Copyright: +%%Copyright: Neither the name of Adobe Systems Incorporated nor the names +%%Copyright: of its contributors may be used to endorse or promote +%%Copyright: products derived from this software without specific prior +%%Copyright: written permission. +%%Copyright: +%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, +%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +%%Copyright: ----------------------------------------------------------- diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-H.bcmap new file mode 100644 index 00000000..afc5e4b0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-V.bcmap new file mode 100644 index 00000000..bb5785e3 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/NWP-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-H.bcmap new file mode 100644 index 00000000..fb8d298e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-V.bcmap new file mode 100644 index 00000000..a2555a6c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/RKSJ-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Roman.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Roman.bcmap new file mode 100644 index 00000000..f896dcf1 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/Roman.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-H.bcmap new file mode 100644 index 00000000..d5db27c5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-V.bcmap new file mode 100644 index 00000000..1dc9b7a2 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UCS2-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-H.bcmap new file mode 100644 index 00000000..961afefb Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-V.bcmap new file mode 100644 index 00000000..df0cffe8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF16-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-H.bcmap new file mode 100644 index 00000000..1ab18a14 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-V.bcmap new file mode 100644 index 00000000..ad14662e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-H.bcmap new file mode 100644 index 00000000..83c6bd7c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-V.bcmap new file mode 100644 index 00000000..22a27e4d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniCNS-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-H.bcmap new file mode 100644 index 00000000..5bd6228c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-V.bcmap new file mode 100644 index 00000000..53c534b7 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UCS2-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-H.bcmap new file mode 100644 index 00000000..b95045b4 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-V.bcmap new file mode 100644 index 00000000..51f023e0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF16-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-H.bcmap new file mode 100644 index 00000000..f0dbd14f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-V.bcmap new file mode 100644 index 00000000..ce9c30a9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-H.bcmap new file mode 100644 index 00000000..982ca462 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-V.bcmap new file mode 100644 index 00000000..f78020dd Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniGB-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-H.bcmap new file mode 100644 index 00000000..7daf56af Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap new file mode 100644 index 00000000..ac9975c5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap new file mode 100644 index 00000000..3da0a1c6 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-HW-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-V.bcmap new file mode 100644 index 00000000..c50b9ddf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UCS2-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-H.bcmap new file mode 100644 index 00000000..67613446 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-V.bcmap new file mode 100644 index 00000000..70bf90c0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF16-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-H.bcmap new file mode 100644 index 00000000..7a83d53a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-V.bcmap new file mode 100644 index 00000000..7a871353 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-H.bcmap new file mode 100644 index 00000000..9f0334ca Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-V.bcmap new file mode 100644 index 00000000..808a94f0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap new file mode 100644 index 00000000..d768bf81 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap new file mode 100644 index 00000000..3d5bf6fb Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF16-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap new file mode 100644 index 00000000..09eee10d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap new file mode 100644 index 00000000..6c546001 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap new file mode 100644 index 00000000..1b1a64f5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap new file mode 100644 index 00000000..994aa9ef Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJIS2004-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap new file mode 100644 index 00000000..643f921b Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-HW-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-V.bcmap new file mode 100644 index 00000000..c148f67f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UCS2-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UTF8-V.bcmap new file mode 100644 index 00000000..1849d809 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISPro-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap new file mode 100644 index 00000000..a83a677c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap new file mode 100644 index 00000000..f527248a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX0213-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap new file mode 100644 index 00000000..e1a988dc Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap new file mode 100644 index 00000000..47e054a9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniJISX02132004-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-H.bcmap new file mode 100644 index 00000000..b5b94852 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-V.bcmap new file mode 100644 index 00000000..026adcaa Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UCS2-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-H.bcmap new file mode 100644 index 00000000..fd4e66e8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-V.bcmap new file mode 100644 index 00000000..075efb70 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF16-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-H.bcmap new file mode 100644 index 00000000..769d2142 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-V.bcmap new file mode 100644 index 00000000..bdab208b Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF32-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-H.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-H.bcmap new file mode 100644 index 00000000..6ff8674a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-H.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-V.bcmap new file mode 100644 index 00000000..8dfa76a5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/UniKS-UTF8-V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/V.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/V.bcmap new file mode 100644 index 00000000..fdec9906 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/V.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/WP-Symbol.bcmap b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/WP-Symbol.bcmap new file mode 100644 index 00000000..46729bbf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/cmaps/WP-Symbol.bcmap differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/compatibility.js b/jero-boot-single-startup/src/main/resources/static/generic/web/compatibility.js new file mode 100644 index 00000000..06f54bff --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/compatibility.js @@ -0,0 +1,577 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals VBArray, PDFJS */ + +'use strict'; + +// Initializing PDFJS global object here, it case if we need to change/disable +// some PDF.js features, e.g. range requests +if (typeof PDFJS === 'undefined') { + (typeof window !== 'undefined' ? window : this).PDFJS = {}; +} + +// Checking if the typed arrays are supported +// Support: iOS<6.0 (subarray), IE<10, Android<4.0 +(function checkTypedArrayCompatibility() { + if (typeof Uint8Array !== 'undefined') { + // Support: iOS<6.0 + if (typeof Uint8Array.prototype.subarray === 'undefined') { + Uint8Array.prototype.subarray = function subarray(start, end) { + return new Uint8Array(this.slice(start, end)); + }; + Float32Array.prototype.subarray = function subarray(start, end) { + return new Float32Array(this.slice(start, end)); + }; + } + + // Support: Android<4.1 + if (typeof Float64Array === 'undefined') { + window.Float64Array = Float32Array; + } + return; + } + + function subarray(start, end) { + return new TypedArray(this.slice(start, end)); + } + + function setArrayOffset(array, offset) { + if (arguments.length < 2) { + offset = 0; + } + for (var i = 0, n = array.length; i < n; ++i, ++offset) { + this[offset] = array[i] & 0xFF; + } + } + + function TypedArray(arg1) { + var result, i, n; + if (typeof arg1 === 'number') { + result = []; + for (i = 0; i < arg1; ++i) { + result[i] = 0; + } + } else if ('slice' in arg1) { + result = arg1.slice(0); + } else { + result = []; + for (i = 0, n = arg1.length; i < n; ++i) { + result[i] = arg1[i]; + } + } + + result.subarray = subarray; + result.buffer = result; + result.byteLength = result.length; + result.set = setArrayOffset; + + if (typeof arg1 === 'object' && arg1.buffer) { + result.buffer = arg1.buffer; + } + return result; + } + + window.Uint8Array = TypedArray; + window.Int8Array = TypedArray; + + // we don't need support for set, byteLength for 32-bit array + // so we can use the TypedArray as well + window.Uint32Array = TypedArray; + window.Int32Array = TypedArray; + window.Uint16Array = TypedArray; + window.Float32Array = TypedArray; + window.Float64Array = TypedArray; +})(); + +// URL = URL || webkitURL +// Support: Safari<7, Android 4.2+ +(function normalizeURLObject() { + if (!window.URL) { + window.URL = window.webkitURL; + } +})(); + +// Object.defineProperty()? +// Support: Android<4.0, Safari<5.1 +(function checkObjectDefinePropertyCompatibility() { + if (typeof Object.defineProperty !== 'undefined') { + var definePropertyPossible = true; + try { + // some browsers (e.g. safari) cannot use defineProperty() on DOM objects + // and thus the native version is not sufficient + Object.defineProperty(new Image(), 'id', { value: 'test' }); + // ... another test for android gb browser for non-DOM objects + var Test = function Test() {}; + Test.prototype = { get id() { } }; + Object.defineProperty(new Test(), 'id', + { value: '', configurable: true, enumerable: true, writable: false }); + } catch (e) { + definePropertyPossible = false; + } + if (definePropertyPossible) { + return; + } + } + + Object.defineProperty = function objectDefineProperty(obj, name, def) { + delete obj[name]; + if ('get' in def) { + obj.__defineGetter__(name, def['get']); + } + if ('set' in def) { + obj.__defineSetter__(name, def['set']); + } + if ('value' in def) { + obj.__defineSetter__(name, function objectDefinePropertySetter(value) { + this.__defineGetter__(name, function objectDefinePropertyGetter() { + return value; + }); + return value; + }); + obj[name] = def.value; + } + }; +})(); + + +// No XMLHttpRequest#response? +// Support: IE<11, Android <4.0 +(function checkXMLHttpRequestResponseCompatibility() { + var xhrPrototype = XMLHttpRequest.prototype; + var xhr = new XMLHttpRequest(); + if (!('overrideMimeType' in xhr)) { + // IE10 might have response, but not overrideMimeType + // Support: IE10 + Object.defineProperty(xhrPrototype, 'overrideMimeType', { + value: function xmlHttpRequestOverrideMimeType(mimeType) {} + }); + } + if ('responseType' in xhr) { + return; + } + + // The worker will be using XHR, so we can save time and disable worker. + PDFJS.disableWorker = true; + + Object.defineProperty(xhrPrototype, 'responseType', { + get: function xmlHttpRequestGetResponseType() { + return this._responseType || 'text'; + }, + set: function xmlHttpRequestSetResponseType(value) { + if (value === 'text' || value === 'arraybuffer') { + this._responseType = value; + if (value === 'arraybuffer' && + typeof this.overrideMimeType === 'function') { + this.overrideMimeType('text/plain; charset=x-user-defined'); + } + } + } + }); + + // Support: IE9 + if (typeof VBArray !== 'undefined') { + Object.defineProperty(xhrPrototype, 'response', { + get: function xmlHttpRequestResponseGet() { + if (this.responseType === 'arraybuffer') { + return new Uint8Array(new VBArray(this.responseBody).toArray()); + } else { + return this.responseText; + } + } + }); + return; + } + + Object.defineProperty(xhrPrototype, 'response', { + get: function xmlHttpRequestResponseGet() { + if (this.responseType !== 'arraybuffer') { + return this.responseText; + } + var text = this.responseText; + var i, n = text.length; + var result = new Uint8Array(n); + for (i = 0; i < n; ++i) { + result[i] = text.charCodeAt(i) & 0xFF; + } + return result.buffer; + } + }); +})(); + +// window.btoa (base64 encode function) ? +// Support: IE<10 +(function checkWindowBtoaCompatibility() { + if ('btoa' in window) { + return; + } + + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + + window.btoa = function windowBtoa(chars) { + var buffer = ''; + var i, n; + for (i = 0, n = chars.length; i < n; i += 3) { + var b1 = chars.charCodeAt(i) & 0xFF; + var b2 = chars.charCodeAt(i + 1) & 0xFF; + var b3 = chars.charCodeAt(i + 2) & 0xFF; + var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4); + var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64; + var d4 = i + 2 < n ? (b3 & 0x3F) : 64; + buffer += (digits.charAt(d1) + digits.charAt(d2) + + digits.charAt(d3) + digits.charAt(d4)); + } + return buffer; + }; +})(); + +// window.atob (base64 encode function)? +// Support: IE<10 +(function checkWindowAtobCompatibility() { + if ('atob' in window) { + return; + } + + // https://github.com/davidchambers/Base64.js + var digits = + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + window.atob = function (input) { + input = input.replace(/=+$/, ''); + if (input.length % 4 === 1) { + throw new Error('bad atob input'); + } + for ( + // initialize result and counters + var bc = 0, bs, buffer, idx = 0, output = ''; + // get next character + buffer = input.charAt(idx++); + // character found in table? + // initialize bit storage and add its ascii value + ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer, + // and if not first of each 4 characters, + // convert the first 8 bits to one ascii character + bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0 + ) { + // try to find character in table (0-63, not found => -1) + buffer = digits.indexOf(buffer); + } + return output; + }; +})(); + +// Function.prototype.bind? +// Support: Android<4.0, iOS<6.0 +(function checkFunctionPrototypeBindCompatibility() { + if (typeof Function.prototype.bind !== 'undefined') { + return; + } + + Function.prototype.bind = function functionPrototypeBind(obj) { + var fn = this, headArgs = Array.prototype.slice.call(arguments, 1); + var bound = function functionPrototypeBindBound() { + var args = headArgs.concat(Array.prototype.slice.call(arguments)); + return fn.apply(obj, args); + }; + return bound; + }; +})(); + +// HTMLElement dataset property +// Support: IE<11, Safari<5.1, Android<4.0 +(function checkDatasetProperty() { + var div = document.createElement('div'); + if ('dataset' in div) { + return; // dataset property exists + } + + Object.defineProperty(HTMLElement.prototype, 'dataset', { + get: function() { + if (this._dataset) { + return this._dataset; + } + + var dataset = {}; + for (var j = 0, jj = this.attributes.length; j < jj; j++) { + var attribute = this.attributes[j]; + if (attribute.name.substring(0, 5) !== 'data-') { + continue; + } + var key = attribute.name.substring(5).replace(/\-([a-z])/g, + function(all, ch) { + return ch.toUpperCase(); + }); + dataset[key] = attribute.value; + } + + Object.defineProperty(this, '_dataset', { + value: dataset, + writable: false, + enumerable: false + }); + return dataset; + }, + enumerable: true + }); +})(); + +// HTMLElement classList property +// Support: IE<10, Android<4.0, iOS<5.0 +(function checkClassListProperty() { + var div = document.createElement('div'); + if ('classList' in div) { + return; // classList property exists + } + + function changeList(element, itemName, add, remove) { + var s = element.className || ''; + var list = s.split(/\s+/g); + if (list[0] === '') { + list.shift(); + } + var index = list.indexOf(itemName); + if (index < 0 && add) { + list.push(itemName); + } + if (index >= 0 && remove) { + list.splice(index, 1); + } + element.className = list.join(' '); + return (index >= 0); + } + + var classListPrototype = { + add: function(name) { + changeList(this.element, name, true, false); + }, + contains: function(name) { + return changeList(this.element, name, false, false); + }, + remove: function(name) { + changeList(this.element, name, false, true); + }, + toggle: function(name) { + changeList(this.element, name, true, true); + } + }; + + Object.defineProperty(HTMLElement.prototype, 'classList', { + get: function() { + if (this._classList) { + return this._classList; + } + + var classList = Object.create(classListPrototype, { + element: { + value: this, + writable: false, + enumerable: true + } + }); + Object.defineProperty(this, '_classList', { + value: classList, + writable: false, + enumerable: false + }); + return classList; + }, + enumerable: true + }); +})(); + +// Check console compatibility +// In older IE versions the console object is not available +// unless console is open. +// Support: IE<10 +(function checkConsoleCompatibility() { + if (!('console' in window)) { + window.console = { + log: function() {}, + error: function() {}, + warn: function() {} + }; + } else if (!('bind' in console.log)) { + // native functions in IE9 might not have bind + console.log = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.log); + console.error = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.error); + console.warn = (function(fn) { + return function(msg) { return fn(msg); }; + })(console.warn); + } +})(); + +// Check onclick compatibility in Opera +// Support: Opera<15 +(function checkOnClickCompatibility() { + // workaround for reported Opera bug DSK-354448: + // onclick fires on disabled buttons with opaque content + function ignoreIfTargetDisabled(event) { + if (isDisabled(event.target)) { + event.stopPropagation(); + } + } + function isDisabled(node) { + return node.disabled || (node.parentNode && isDisabled(node.parentNode)); + } + if (navigator.userAgent.indexOf('Opera') !== -1) { + // use browser detection since we cannot feature-check this bug + document.addEventListener('click', ignoreIfTargetDisabled, true); + } +})(); + +// Checks if possible to use URL.createObjectURL() +// Support: IE +(function checkOnBlobSupport() { + // sometimes IE loosing the data created with createObjectURL(), see #3977 + if (navigator.userAgent.indexOf('Trident') >= 0) { + PDFJS.disableCreateObjectURL = true; + } +})(); + +// Checks if navigator.language is supported +(function checkNavigatorLanguage() { + if ('language' in navigator) { + return; + } + PDFJS.locale = navigator.userLanguage || 'en-US'; +})(); + +(function checkRangeRequests() { + // Safari has issues with cached range requests see: + // https://github.com/mozilla/pdf.js/issues/3260 + // Last tested with version 6.0.4. + // Support: Safari 6.0+ + var isSafari = Object.prototype.toString.call( + window.HTMLElement).indexOf('Constructor') > 0; + + // Older versions of Android (pre 3.0) has issues with range requests, see: + // https://github.com/mozilla/pdf.js/issues/3381. + // Make sure that we only match webkit-based Android browsers, + // since Firefox/Fennec works as expected. + // Support: Android<3.0 + var regex = /Android\s[0-2][^\d]/; + var isOldAndroid = regex.test(navigator.userAgent); + + // Range requests are broken in Chrome 39 and 40, https://crbug.com/442318 + var isChromeWithRangeBug = /Chrome\/(39|40)\./.test(navigator.userAgent); + + if (isSafari || isOldAndroid || isChromeWithRangeBug) { + PDFJS.disableRange = true; + PDFJS.disableStream = true; + } +})(); + +// Check if the browser supports manipulation of the history. +// Support: IE<10, Android<4.2 +(function checkHistoryManipulation() { + // Android 2.x has so buggy pushState support that it was removed in + // Android 3.0 and restored as late as in Android 4.2. + // Support: Android 2.x + if (!history.pushState || navigator.userAgent.indexOf('Android 2.') >= 0) { + PDFJS.disableHistory = true; + } +})(); + +// Support: IE<11, Chrome<21, Android<4.4, Safari<6 +(function checkSetPresenceInImageData() { + // IE < 11 will use window.CanvasPixelArray which lacks set function. + if (window.CanvasPixelArray) { + if (typeof window.CanvasPixelArray.prototype.set !== 'function') { + window.CanvasPixelArray.prototype.set = function(arr) { + for (var i = 0, ii = this.length; i < ii; i++) { + this[i] = arr[i]; + } + }; + } + } else { + // Old Chrome and Android use an inaccessible CanvasPixelArray prototype. + // Because we cannot feature detect it, we rely on user agent parsing. + var polyfill = false, versionMatch; + if (navigator.userAgent.indexOf('Chrom') >= 0) { + versionMatch = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./); + // Chrome < 21 lacks the set function. + polyfill = versionMatch && parseInt(versionMatch[2]) < 21; + } else if (navigator.userAgent.indexOf('Android') >= 0) { + // Android < 4.4 lacks the set function. + // Android >= 4.4 will contain Chrome in the user agent, + // thus pass the Chrome check above and not reach this block. + polyfill = /Android\s[0-4][^\d]/g.test(navigator.userAgent); + } else if (navigator.userAgent.indexOf('Safari') >= 0) { + versionMatch = navigator.userAgent. + match(/Version\/([0-9]+)\.([0-9]+)\.([0-9]+) Safari\//); + // Safari < 6 lacks the set function. + polyfill = versionMatch && parseInt(versionMatch[1]) < 6; + } + + if (polyfill) { + var contextPrototype = window.CanvasRenderingContext2D.prototype; + contextPrototype._createImageData = contextPrototype.createImageData; + contextPrototype.createImageData = function(w, h) { + var imageData = this._createImageData(w, h); + imageData.data.set = function(arr) { + for (var i = 0, ii = this.length; i < ii; i++) { + this[i] = arr[i]; + } + }; + return imageData; + }; + } + } +})(); + +// Support: IE<10, Android<4.0, iOS +(function checkRequestAnimationFrame() { + function fakeRequestAnimationFrame(callback) { + window.setTimeout(callback, 20); + } + + var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); + if (isIOS) { + // requestAnimationFrame on iOS is broken, replacing with fake one. + window.requestAnimationFrame = fakeRequestAnimationFrame; + return; + } + if ('requestAnimationFrame' in window) { + return; + } + window.requestAnimationFrame = + window.mozRequestAnimationFrame || + window.webkitRequestAnimationFrame || + fakeRequestAnimationFrame; +})(); + +(function checkCanvasSizeLimitation() { + var isIOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); + var isAndroid = /Android/g.test(navigator.userAgent); + if (isIOS || isAndroid) { + // 5MP + PDFJS.maxCanvasPixels = 5242880; + } +})(); + +// Disable fullscreen support for certain problematic configurations. +// Support: IE11+ (when embedded). +(function checkFullscreenSupport() { + var isEmbeddedIE = (navigator.userAgent.indexOf('Trident') >= 0 && + window.parent !== window); + if (isEmbeddedIE) { + PDFJS.disableFullscreen = true; + } +})(); diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/compressed.tracemonkey-pldi-09.pdf b/jero-boot-single-startup/src/main/resources/static/generic/web/compressed.tracemonkey-pldi-09.pdf new file mode 100644 index 00000000..65570184 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/compressed.tracemonkey-pldi-09.pdf differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/debugger.js b/jero-boot-single-startup/src/main/resources/static/generic/web/debugger.js new file mode 100644 index 00000000..046fd34a --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/debugger.js @@ -0,0 +1,620 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals PDFJS */ + +'use strict'; + +var FontInspector = (function FontInspectorClosure() { + var fonts; + var active = false; + var fontAttribute = 'data-font-name'; + function removeSelection() { + var divs = document.querySelectorAll('div[' + fontAttribute + ']'); + for (var i = 0, ii = divs.length; i < ii; ++i) { + var div = divs[i]; + div.className = ''; + } + } + function resetSelection() { + var divs = document.querySelectorAll('div[' + fontAttribute + ']'); + for (var i = 0, ii = divs.length; i < ii; ++i) { + var div = divs[i]; + div.className = 'debuggerHideText'; + } + } + function selectFont(fontName, show) { + var divs = document.querySelectorAll('div[' + fontAttribute + '=' + + fontName + ']'); + for (var i = 0, ii = divs.length; i < ii; ++i) { + var div = divs[i]; + div.className = show ? 'debuggerShowText' : 'debuggerHideText'; + } + } + function textLayerClick(e) { + if (!e.target.dataset.fontName || + e.target.tagName.toUpperCase() !== 'DIV') { + return; + } + var fontName = e.target.dataset.fontName; + var selects = document.getElementsByTagName('input'); + for (var i = 0; i < selects.length; ++i) { + var select = selects[i]; + if (select.dataset.fontName !== fontName) { + continue; + } + select.checked = !select.checked; + selectFont(fontName, select.checked); + select.scrollIntoView(); + } + } + return { + // Properties/functions needed by PDFBug. + id: 'FontInspector', + name: 'Font Inspector', + panel: null, + manager: null, + init: function init() { + var panel = this.panel; + panel.setAttribute('style', 'padding: 5px;'); + var tmp = document.createElement('button'); + tmp.addEventListener('click', resetSelection); + tmp.textContent = 'Refresh'; + panel.appendChild(tmp); + + fonts = document.createElement('div'); + panel.appendChild(fonts); + }, + cleanup: function cleanup() { + fonts.textContent = ''; + }, + enabled: false, + get active() { + return active; + }, + set active(value) { + active = value; + if (active) { + document.body.addEventListener('click', textLayerClick, true); + resetSelection(); + } else { + document.body.removeEventListener('click', textLayerClick, true); + removeSelection(); + } + }, + // FontInspector specific functions. + fontAdded: function fontAdded(fontObj, url) { + function properties(obj, list) { + var moreInfo = document.createElement('table'); + for (var i = 0; i < list.length; i++) { + var tr = document.createElement('tr'); + var td1 = document.createElement('td'); + td1.textContent = list[i]; + tr.appendChild(td1); + var td2 = document.createElement('td'); + td2.textContent = obj[list[i]].toString(); + tr.appendChild(td2); + moreInfo.appendChild(tr); + } + return moreInfo; + } + var moreInfo = properties(fontObj, ['name', 'type']); + var fontName = fontObj.loadedName; + var font = document.createElement('div'); + var name = document.createElement('span'); + name.textContent = fontName; + var download = document.createElement('a'); + if (url) { + url = /url\(['"]?([^\)"']+)/.exec(url); + download.href = url[1]; + } else if (fontObj.data) { + url = URL.createObjectURL(new Blob([fontObj.data], { + type: fontObj.mimeType + })); + download.href = url; + } + download.textContent = 'Download'; + var logIt = document.createElement('a'); + logIt.href = ''; + logIt.textContent = 'Log'; + logIt.addEventListener('click', function(event) { + event.preventDefault(); + console.log(fontObj); + }); + var select = document.createElement('input'); + select.setAttribute('type', 'checkbox'); + select.dataset.fontName = fontName; + select.addEventListener('click', (function(select, fontName) { + return (function() { + selectFont(fontName, select.checked); + }); + })(select, fontName)); + font.appendChild(select); + font.appendChild(name); + font.appendChild(document.createTextNode(' ')); + font.appendChild(download); + font.appendChild(document.createTextNode(' ')); + font.appendChild(logIt); + font.appendChild(moreInfo); + fonts.appendChild(font); + // Somewhat of a hack, should probably add a hook for when the text layer + // is done rendering. + setTimeout(function() { + if (this.active) { + resetSelection(); + } + }.bind(this), 2000); + } + }; +})(); + +// Manages all the page steppers. +var StepperManager = (function StepperManagerClosure() { + var steppers = []; + var stepperDiv = null; + var stepperControls = null; + var stepperChooser = null; + var breakPoints = {}; + return { + // Properties/functions needed by PDFBug. + id: 'Stepper', + name: 'Stepper', + panel: null, + manager: null, + init: function init() { + var self = this; + this.panel.setAttribute('style', 'padding: 5px;'); + stepperControls = document.createElement('div'); + stepperChooser = document.createElement('select'); + stepperChooser.addEventListener('change', function(event) { + self.selectStepper(this.value); + }); + stepperControls.appendChild(stepperChooser); + stepperDiv = document.createElement('div'); + this.panel.appendChild(stepperControls); + this.panel.appendChild(stepperDiv); + if (sessionStorage.getItem('pdfjsBreakPoints')) { + breakPoints = JSON.parse(sessionStorage.getItem('pdfjsBreakPoints')); + } + }, + cleanup: function cleanup() { + stepperChooser.textContent = ''; + stepperDiv.textContent = ''; + steppers = []; + }, + enabled: false, + active: false, + // Stepper specific functions. + create: function create(pageIndex) { + var debug = document.createElement('div'); + debug.id = 'stepper' + pageIndex; + debug.setAttribute('hidden', true); + debug.className = 'stepper'; + stepperDiv.appendChild(debug); + var b = document.createElement('option'); + b.textContent = 'Page ' + (pageIndex + 1); + b.value = pageIndex; + stepperChooser.appendChild(b); + var initBreakPoints = breakPoints[pageIndex] || []; + var stepper = new Stepper(debug, pageIndex, initBreakPoints); + steppers.push(stepper); + if (steppers.length === 1) { + this.selectStepper(pageIndex, false); + } + return stepper; + }, + selectStepper: function selectStepper(pageIndex, selectPanel) { + var i; + pageIndex = pageIndex | 0; + if (selectPanel) { + this.manager.selectPanel(this); + } + for (i = 0; i < steppers.length; ++i) { + var stepper = steppers[i]; + if (stepper.pageIndex === pageIndex) { + stepper.panel.removeAttribute('hidden'); + } else { + stepper.panel.setAttribute('hidden', true); + } + } + var options = stepperChooser.options; + for (i = 0; i < options.length; ++i) { + var option = options[i]; + option.selected = (option.value | 0) === pageIndex; + } + }, + saveBreakPoints: function saveBreakPoints(pageIndex, bps) { + breakPoints[pageIndex] = bps; + sessionStorage.setItem('pdfjsBreakPoints', JSON.stringify(breakPoints)); + } + }; +})(); + +// The stepper for each page's IRQueue. +var Stepper = (function StepperClosure() { + // Shorter way to create element and optionally set textContent. + function c(tag, textContent) { + var d = document.createElement(tag); + if (textContent) { + d.textContent = textContent; + } + return d; + } + + var opMap = null; + + function simplifyArgs(args) { + if (typeof args === 'string') { + var MAX_STRING_LENGTH = 75; + return args.length <= MAX_STRING_LENGTH ? args : + args.substr(0, MAX_STRING_LENGTH) + '...'; + } + if (typeof args !== 'object' || args === null) { + return args; + } + if ('length' in args) { // array + var simpleArgs = [], i, ii; + var MAX_ITEMS = 10; + for (i = 0, ii = Math.min(MAX_ITEMS, args.length); i < ii; i++) { + simpleArgs.push(simplifyArgs(args[i])); + } + if (i < args.length) { + simpleArgs.push('...'); + } + return simpleArgs; + } + var simpleObj = {}; + for (var key in args) { + simpleObj[key] = simplifyArgs(args[key]); + } + return simpleObj; + } + + function Stepper(panel, pageIndex, initialBreakPoints) { + this.panel = panel; + this.breakPoint = 0; + this.nextBreakPoint = null; + this.pageIndex = pageIndex; + this.breakPoints = initialBreakPoints; + this.currentIdx = -1; + this.operatorListIdx = 0; + } + Stepper.prototype = { + init: function init() { + var panel = this.panel; + var content = c('div', 'c=continue, s=step'); + var table = c('table'); + content.appendChild(table); + table.cellSpacing = 0; + var headerRow = c('tr'); + table.appendChild(headerRow); + headerRow.appendChild(c('th', 'Break')); + headerRow.appendChild(c('th', 'Idx')); + headerRow.appendChild(c('th', 'fn')); + headerRow.appendChild(c('th', 'args')); + panel.appendChild(content); + this.table = table; + if (!opMap) { + opMap = Object.create(null); + for (var key in PDFJS.OPS) { + opMap[PDFJS.OPS[key]] = key; + } + } + }, + updateOperatorList: function updateOperatorList(operatorList) { + var self = this; + + function cboxOnClick() { + var x = +this.dataset.idx; + if (this.checked) { + self.breakPoints.push(x); + } else { + self.breakPoints.splice(self.breakPoints.indexOf(x), 1); + } + StepperManager.saveBreakPoints(self.pageIndex, self.breakPoints); + } + + var MAX_OPERATORS_COUNT = 15000; + if (this.operatorListIdx > MAX_OPERATORS_COUNT) { + return; + } + + var chunk = document.createDocumentFragment(); + var operatorsToDisplay = Math.min(MAX_OPERATORS_COUNT, + operatorList.fnArray.length); + for (var i = this.operatorListIdx; i < operatorsToDisplay; i++) { + var line = c('tr'); + line.className = 'line'; + line.dataset.idx = i; + chunk.appendChild(line); + var checked = this.breakPoints.indexOf(i) !== -1; + var args = operatorList.argsArray[i] || []; + + var breakCell = c('td'); + var cbox = c('input'); + cbox.type = 'checkbox'; + cbox.className = 'points'; + cbox.checked = checked; + cbox.dataset.idx = i; + cbox.onclick = cboxOnClick; + + breakCell.appendChild(cbox); + line.appendChild(breakCell); + line.appendChild(c('td', i.toString())); + var fn = opMap[operatorList.fnArray[i]]; + var decArgs = args; + if (fn === 'showText') { + var glyphs = args[0]; + var newArgs = []; + var str = []; + for (var j = 0; j < glyphs.length; j++) { + var glyph = glyphs[j]; + if (typeof glyph === 'object' && glyph !== null) { + str.push(glyph.fontChar); + } else { + if (str.length > 0) { + newArgs.push(str.join('')); + str = []; + } + newArgs.push(glyph); // null or number + } + } + if (str.length > 0) { + newArgs.push(str.join('')); + } + decArgs = [newArgs]; + } + line.appendChild(c('td', fn)); + line.appendChild(c('td', JSON.stringify(simplifyArgs(decArgs)))); + } + if (operatorsToDisplay < operatorList.fnArray.length) { + line = c('tr'); + var lastCell = c('td', '...'); + lastCell.colspan = 4; + chunk.appendChild(lastCell); + } + this.operatorListIdx = operatorList.fnArray.length; + this.table.appendChild(chunk); + }, + getNextBreakPoint: function getNextBreakPoint() { + this.breakPoints.sort(function(a, b) { return a - b; }); + for (var i = 0; i < this.breakPoints.length; i++) { + if (this.breakPoints[i] > this.currentIdx) { + return this.breakPoints[i]; + } + } + return null; + }, + breakIt: function breakIt(idx, callback) { + StepperManager.selectStepper(this.pageIndex, true); + var self = this; + var dom = document; + self.currentIdx = idx; + var listener = function(e) { + switch (e.keyCode) { + case 83: // step + dom.removeEventListener('keydown', listener, false); + self.nextBreakPoint = self.currentIdx + 1; + self.goTo(-1); + callback(); + break; + case 67: // continue + dom.removeEventListener('keydown', listener, false); + var breakPoint = self.getNextBreakPoint(); + self.nextBreakPoint = breakPoint; + self.goTo(-1); + callback(); + break; + } + }; + dom.addEventListener('keydown', listener, false); + self.goTo(idx); + }, + goTo: function goTo(idx) { + var allRows = this.panel.getElementsByClassName('line'); + for (var x = 0, xx = allRows.length; x < xx; ++x) { + var row = allRows[x]; + if ((row.dataset.idx | 0) === idx) { + row.style.backgroundColor = 'rgb(251,250,207)'; + row.scrollIntoView(); + } else { + row.style.backgroundColor = null; + } + } + } + }; + return Stepper; +})(); + +var Stats = (function Stats() { + var stats = []; + function clear(node) { + while (node.hasChildNodes()) { + node.removeChild(node.lastChild); + } + } + function getStatIndex(pageNumber) { + for (var i = 0, ii = stats.length; i < ii; ++i) { + if (stats[i].pageNumber === pageNumber) { + return i; + } + } + return false; + } + return { + // Properties/functions needed by PDFBug. + id: 'Stats', + name: 'Stats', + panel: null, + manager: null, + init: function init() { + this.panel.setAttribute('style', 'padding: 5px;'); + PDFJS.enableStats = true; + }, + enabled: false, + active: false, + // Stats specific functions. + add: function(pageNumber, stat) { + if (!stat) { + return; + } + var statsIndex = getStatIndex(pageNumber); + if (statsIndex !== false) { + var b = stats[statsIndex]; + this.panel.removeChild(b.div); + stats.splice(statsIndex, 1); + } + var wrapper = document.createElement('div'); + wrapper.className = 'stats'; + var title = document.createElement('div'); + title.className = 'title'; + title.textContent = 'Page: ' + pageNumber; + var statsDiv = document.createElement('div'); + statsDiv.textContent = stat.toString(); + wrapper.appendChild(title); + wrapper.appendChild(statsDiv); + stats.push({ pageNumber: pageNumber, div: wrapper }); + stats.sort(function(a, b) { return a.pageNumber - b.pageNumber; }); + clear(this.panel); + for (var i = 0, ii = stats.length; i < ii; ++i) { + this.panel.appendChild(stats[i].div); + } + }, + cleanup: function () { + stats = []; + clear(this.panel); + } + }; +})(); + +// Manages all the debugging tools. +var PDFBug = (function PDFBugClosure() { + var panelWidth = 300; + var buttons = []; + var activePanel = null; + + return { + tools: [ + FontInspector, + StepperManager, + Stats + ], + enable: function(ids) { + var all = false, tools = this.tools; + if (ids.length === 1 && ids[0] === 'all') { + all = true; + } + for (var i = 0; i < tools.length; ++i) { + var tool = tools[i]; + if (all || ids.indexOf(tool.id) !== -1) { + tool.enabled = true; + } + } + if (!all) { + // Sort the tools by the order they are enabled. + tools.sort(function(a, b) { + var indexA = ids.indexOf(a.id); + indexA = indexA < 0 ? tools.length : indexA; + var indexB = ids.indexOf(b.id); + indexB = indexB < 0 ? tools.length : indexB; + return indexA - indexB; + }); + } + }, + init: function init() { + /* + * Basic Layout: + * PDFBug + * Controls + * Panels + * Panel + * Panel + * ... + */ + var ui = document.createElement('div'); + ui.id = 'PDFBug'; + + var controls = document.createElement('div'); + controls.setAttribute('class', 'controls'); + ui.appendChild(controls); + + var panels = document.createElement('div'); + panels.setAttribute('class', 'panels'); + ui.appendChild(panels); + + var container = document.getElementById('viewerContainer'); + container.appendChild(ui); + container.style.right = panelWidth + 'px'; + + // Initialize all the debugging tools. + var tools = this.tools; + var self = this; + for (var i = 0; i < tools.length; ++i) { + var tool = tools[i]; + var panel = document.createElement('div'); + var panelButton = document.createElement('button'); + panelButton.textContent = tool.name; + panelButton.addEventListener('click', (function(selected) { + return function(event) { + event.preventDefault(); + self.selectPanel(selected); + }; + })(i)); + controls.appendChild(panelButton); + panels.appendChild(panel); + tool.panel = panel; + tool.manager = this; + if (tool.enabled) { + tool.init(); + } else { + panel.textContent = tool.name + ' is disabled. To enable add ' + + ' "' + tool.id + '" to the pdfBug parameter ' + + 'and refresh (seperate multiple by commas).'; + } + buttons.push(panelButton); + } + this.selectPanel(0); + }, + cleanup: function cleanup() { + for (var i = 0, ii = this.tools.length; i < ii; i++) { + if (this.tools[i].enabled) { + this.tools[i].cleanup(); + } + } + }, + selectPanel: function selectPanel(index) { + if (typeof index !== 'number') { + index = this.tools.indexOf(index); + } + if (index === activePanel) { + return; + } + activePanel = index; + var tools = this.tools; + for (var j = 0; j < tools.length; ++j) { + if (j === index) { + buttons[j].setAttribute('class', 'active'); + tools[j].active = true; + tools[j].panel.removeAttribute('hidden'); + } else { + buttons[j].setAttribute('class', ''); + tools[j].active = false; + tools[j].panel.setAttribute('hidden', 'true'); + } + } + } + }; +})(); diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-check.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-check.svg new file mode 100644 index 00000000..71cd16df --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-check.svg @@ -0,0 +1,11 @@ + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-comment.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-comment.svg new file mode 100644 index 00000000..86f1f172 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-comment.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-help.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-help.svg new file mode 100644 index 00000000..00938fef --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-help.svg @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-insert.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-insert.svg new file mode 100644 index 00000000..519ef682 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-insert.svg @@ -0,0 +1,10 @@ + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-key.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-key.svg new file mode 100644 index 00000000..8d09d537 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-key.svg @@ -0,0 +1,11 @@ + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-newparagraph.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-newparagraph.svg new file mode 100644 index 00000000..38d2497d --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-newparagraph.svg @@ -0,0 +1,11 @@ + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-noicon.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-noicon.svg new file mode 100644 index 00000000..c07d1080 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-noicon.svg @@ -0,0 +1,7 @@ + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-note.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-note.svg new file mode 100644 index 00000000..70173651 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-note.svg @@ -0,0 +1,42 @@ + + + + + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-paragraph.svg b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-paragraph.svg new file mode 100644 index 00000000..6ae5212b --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/images/annotation-paragraph.svg @@ -0,0 +1,16 @@ + + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl.png new file mode 100644 index 00000000..bef02743 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl@2x.png new file mode 100644 index 00000000..1da6dc94 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next.png new file mode 100644 index 00000000..de1d0fc9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next@2x.png new file mode 100644 index 00000000..0250307c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-next@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl.png new file mode 100644 index 00000000..de1d0fc9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl@2x.png new file mode 100644 index 00000000..0250307c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous.png new file mode 100644 index 00000000..bef02743 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous@2x.png new file mode 100644 index 00000000..1da6dc94 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/findbarButton-previous@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/grab.cur b/jero-boot-single-startup/src/main/resources/static/generic/web/images/grab.cur new file mode 100644 index 00000000..db7ad5ae Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/grab.cur differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/grabbing.cur b/jero-boot-single-startup/src/main/resources/static/generic/web/images/grabbing.cur new file mode 100644 index 00000000..e0dfd04e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/grabbing.cur differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-icon.gif b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-icon.gif new file mode 100644 index 00000000..1c72ebb5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-icon.gif differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small.png new file mode 100644 index 00000000..8831a805 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small@2x.png new file mode 100644 index 00000000..b25b4452 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/loading-small@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties.png new file mode 100644 index 00000000..40925e25 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties@2x.png new file mode 100644 index 00000000..adb240ea Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-documentProperties@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage.png new file mode 100644 index 00000000..e68846aa Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage@2x.png new file mode 100644 index 00000000..3ad8af51 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-firstPage@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool.png new file mode 100644 index 00000000..cb85a841 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool@2x.png new file mode 100644 index 00000000..5c13f77f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-handTool@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage.png new file mode 100644 index 00000000..be763e0c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage@2x.png new file mode 100644 index 00000000..8570984f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-lastPage@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw.png new file mode 100644 index 00000000..675d6da2 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png new file mode 100644 index 00000000..b9e74312 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCcw@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw.png new file mode 100644 index 00000000..e1c75988 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw@2x.png new file mode 100644 index 00000000..cb257b41 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/secondaryToolbarButton-rotateCw@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/shadow.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/shadow.png new file mode 100644 index 00000000..31d3bdb1 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/shadow.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/texture.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/texture.png new file mode 100644 index 00000000..eb5ccb5e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/texture.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark.png new file mode 100644 index 00000000..a187be6c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark@2x.png new file mode 100644 index 00000000..4efbaa67 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-bookmark@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download.png new file mode 100644 index 00000000..eaab35f0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download@2x.png new file mode 100644 index 00000000..896face4 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-download@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows.png new file mode 100644 index 00000000..306eb43b Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows@2x.png new file mode 100644 index 00000000..f7570bc0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-menuArrows@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile.png new file mode 100644 index 00000000..b5cf1bd0 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile@2x.png new file mode 100644 index 00000000..91ab7659 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-openFile@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl.png new file mode 100644 index 00000000..1957f79a Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl@2x.png new file mode 100644 index 00000000..16ebcb8e Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown.png new file mode 100644 index 00000000..8219ecf8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown@2x.png new file mode 100644 index 00000000..758c01d8 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageDown@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl.png new file mode 100644 index 00000000..98e7ce48 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl@2x.png new file mode 100644 index 00000000..a01b0238 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp.png new file mode 100644 index 00000000..fb9daa33 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp@2x.png new file mode 100644 index 00000000..a5cfd755 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-pageUp@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode.png new file mode 100644 index 00000000..3ac21244 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode@2x.png new file mode 100644 index 00000000..cada9e79 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-presentationMode@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print.png new file mode 100644 index 00000000..51275e54 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print@2x.png new file mode 100644 index 00000000..53d18daf Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-print@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search.png new file mode 100644 index 00000000..f9b75579 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search@2x.png new file mode 100644 index 00000000..456b1332 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-search@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png new file mode 100644 index 00000000..84370952 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png new file mode 100644 index 00000000..9d9bfa4f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle.png new file mode 100644 index 00000000..1f90f83d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png new file mode 100644 index 00000000..b066fe5c Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-secondaryToolbarToggle@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl.png new file mode 100644 index 00000000..6f85ec06 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png new file mode 100644 index 00000000..291e0067 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle.png new file mode 100644 index 00000000..025dc904 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle@2x.png new file mode 100644 index 00000000..7f834df9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-sidebarToggle@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments.png new file mode 100644 index 00000000..fcd0b268 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments@2x.png new file mode 100644 index 00000000..b979e523 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewAttachments@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl.png new file mode 100644 index 00000000..aaa94302 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl@2x.png new file mode 100644 index 00000000..3410f70d Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline-rtl@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline.png new file mode 100644 index 00000000..976365a5 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline@2x.png new file mode 100644 index 00000000..b6a197fd Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewOutline@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail.png new file mode 100644 index 00000000..584ba558 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail@2x.png new file mode 100644 index 00000000..fb7db938 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-viewThumbnail@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn.png new file mode 100644 index 00000000..513d081b Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn@2x.png new file mode 100644 index 00000000..d5d49d5f Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomIn@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut.png new file mode 100644 index 00000000..156c26b9 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut@2x.png b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut@2x.png new file mode 100644 index 00000000..959e1919 Binary files /dev/null and b/jero-boot-single-startup/src/main/resources/static/generic/web/images/toolbarButton-zoomOut@2x.png differ diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/l10n.js b/jero-boot-single-startup/src/main/resources/static/generic/web/l10n.js new file mode 100644 index 00000000..3d5ecffa --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/l10n.js @@ -0,0 +1,1033 @@ +/** + * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to + * deal in the Software without restriction, including without limitation the + * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + */ +/* + Additional modifications for PDF.js project: + - Disables language initialization on page loading; + - Removes consoleWarn and consoleLog and use console.log/warn directly. + - Removes window._ assignment. + - Remove compatibility code for OldIE. +*/ + +/*jshint browser: true, devel: true, es5: true, globalstrict: true */ +'use strict'; + +document.webL10n = (function(window, document, undefined) { + var gL10nData = {}; + var gTextData = ''; + var gTextProp = 'textContent'; + var gLanguage = ''; + var gMacros = {}; + var gReadyState = 'loading'; + + + /** + * Synchronously loading l10n resources significantly minimizes flickering + * from displaying the app with non-localized strings and then updating the + * strings. Although this will block all script execution on this page, we + * expect that the l10n resources are available locally on flash-storage. + * + * As synchronous XHR is generally considered as a bad idea, we're still + * loading l10n resources asynchronously -- but we keep this in a setting, + * just in case... and applications using this library should hide their + * content until the `localized' event happens. + */ + + var gAsyncResourceLoading = true; // read-only + + + /** + * DOM helpers for the so-called "HTML API". + * + * These functions are written for modern browsers. For old versions of IE, + * they're overridden in the 'startup' section at the end of this file. + */ + + function getL10nResourceLinks() { + return document.querySelectorAll('link[type="application/l10n"]'); + } + + function getL10nDictionary() { + var script = document.querySelector('script[type="application/l10n"]'); + // TODO: support multiple and external JSON dictionaries + return script ? JSON.parse(script.innerHTML) : null; + } + + function getTranslatableChildren(element) { + return element ? element.querySelectorAll('*[data-l10n-id]') : []; + } + + function getL10nAttributes(element) { + if (!element) + return {}; + + var l10nId = element.getAttribute('data-l10n-id'); + var l10nArgs = element.getAttribute('data-l10n-args'); + var args = {}; + if (l10nArgs) { + try { + args = JSON.parse(l10nArgs); + } catch (e) { + console.warn('could not parse arguments for #' + l10nId); + } + } + return { id: l10nId, args: args }; + } + + function fireL10nReadyEvent(lang) { + var evtObject = document.createEvent('Event'); + evtObject.initEvent('localized', true, false); + evtObject.language = lang; + document.dispatchEvent(evtObject); + } + + function xhrLoadText(url, onSuccess, onFailure) { + onSuccess = onSuccess || function _onSuccess(data) {}; + onFailure = onFailure || function _onFailure() { + console.warn(url + ' not found.'); + }; + + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, gAsyncResourceLoading); + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=utf-8'); + } + xhr.onreadystatechange = function() { + if (xhr.readyState == 4) { + if (xhr.status == 200 || xhr.status === 0) { + onSuccess(xhr.responseText); + } else { + onFailure(); + } + } + }; + xhr.onerror = onFailure; + xhr.ontimeout = onFailure; + + // in Firefox OS with the app:// protocol, trying to XHR a non-existing + // URL will raise an exception here -- hence this ugly try...catch. + try { + xhr.send(null); + } catch (e) { + onFailure(); + } + } + + + /** + * l10n resource parser: + * - reads (async XHR) the l10n resource matching `lang'; + * - imports linked resources (synchronously) when specified; + * - parses the text data (fills `gL10nData' and `gTextData'); + * - triggers success/failure callbacks when done. + * + * @param {string} href + * URL of the l10n resource to parse. + * + * @param {string} lang + * locale (language) to parse. Must be a lowercase string. + * + * @param {Function} successCallback + * triggered when the l10n resource has been successully parsed. + * + * @param {Function} failureCallback + * triggered when the an error has occured. + * + * @return {void} + * uses the following global variables: gL10nData, gTextData, gTextProp. + */ + + function parseResource(href, lang, successCallback, failureCallback) { + var baseURL = href.replace(/[^\/]*$/, '') || './'; + + // handle escaped characters (backslashes) in a string + function evalString(text) { + if (text.lastIndexOf('\\') < 0) + return text; + return text.replace(/\\\\/g, '\\') + .replace(/\\n/g, '\n') + .replace(/\\r/g, '\r') + .replace(/\\t/g, '\t') + .replace(/\\b/g, '\b') + .replace(/\\f/g, '\f') + .replace(/\\{/g, '{') + .replace(/\\}/g, '}') + .replace(/\\"/g, '"') + .replace(/\\'/g, "'"); + } + + // parse *.properties text data into an l10n dictionary + // If gAsyncResourceLoading is false, then the callback will be called + // synchronously. Otherwise it is called asynchronously. + function parseProperties(text, parsedPropertiesCallback) { + var dictionary = {}; + + // token expressions + var reBlank = /^\s*|\s*$/; + var reComment = /^\s*#|^\s*$/; + var reSection = /^\s*\[(.*)\]\s*$/; + var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; + var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; // TODO: escape EOLs with '\' + + // parse the *.properties file into an associative array + function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { + var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); + var currentLang = '*'; + var genericLang = lang.split('-', 1)[0]; + var skipLang = false; + var match = ''; + + function nextEntry() { + // Use infinite loop instead of recursion to avoid reaching the + // maximum recursion limit for content with many lines. + while (true) { + if (!entries.length) { + parsedRawLinesCallback(); + return; + } + var line = entries.shift(); + + // comment or blank line? + if (reComment.test(line)) + continue; + + // the extended syntax supports [lang] sections and @import rules + if (extendedSyntax) { + match = reSection.exec(line); + if (match) { // section start? + // RFC 4646, section 4.4, "All comparisons MUST be performed + // in a case-insensitive manner." + + currentLang = match[1].toLowerCase(); + skipLang = (currentLang !== '*') && + (currentLang !== lang) && (currentLang !== genericLang); + continue; + } else if (skipLang) { + continue; + } + match = reImport.exec(line); + if (match) { // @import rule? + loadImport(baseURL + match[1], nextEntry); + return; + } + } + + // key-value pair + var tmp = line.match(reSplit); + if (tmp && tmp.length == 3) { + dictionary[tmp[1]] = evalString(tmp[2]); + } + } + } + nextEntry(); + } + + // import another *.properties file + function loadImport(url, callback) { + xhrLoadText(url, function(content) { + parseRawLines(content, false, callback); // don't allow recursive imports + }, null); + } + + // fill the dictionary + parseRawLines(text, true, function() { + parsedPropertiesCallback(dictionary); + }); + } + + // load and parse l10n data (warning: global variables are used here) + xhrLoadText(href, function(response) { + gTextData += response; // mostly for debug + + // parse *.properties text data into an l10n dictionary + parseProperties(response, function(data) { + + // find attribute descriptions, if any + for (var key in data) { + var id, prop, index = key.lastIndexOf('.'); + if (index > 0) { // an attribute has been specified + id = key.substring(0, index); + prop = key.substr(index + 1); + } else { // no attribute: assuming text content by default + id = key; + prop = gTextProp; + } + if (!gL10nData[id]) { + gL10nData[id] = {}; + } + gL10nData[id][prop] = data[key]; + } + + // trigger callback + if (successCallback) { + successCallback(); + } + }); + }, failureCallback); + } + + // load and parse all resources for the specified locale + function loadLocale(lang, callback) { + // RFC 4646, section 2.1 states that language tags have to be treated as + // case-insensitive. Convert to lowercase for case-insensitive comparisons. + if (lang) { + lang = lang.toLowerCase(); + } + + callback = callback || function _callback() {}; + + clear(); + gLanguage = lang; + + // check all nodes + // and load the resource files + var langLinks = getL10nResourceLinks(); + var langCount = langLinks.length; + if (langCount === 0) { + // we might have a pre-compiled dictionary instead + var dict = getL10nDictionary(); + if (dict && dict.locales && dict.default_locale) { + console.log('using the embedded JSON directory, early way out'); + gL10nData = dict.locales[lang]; + if (!gL10nData) { + var defaultLocale = dict.default_locale.toLowerCase(); + for (var anyCaseLang in dict.locales) { + anyCaseLang = anyCaseLang.toLowerCase(); + if (anyCaseLang === lang) { + gL10nData = dict.locales[lang]; + break; + } else if (anyCaseLang === defaultLocale) { + gL10nData = dict.locales[defaultLocale]; + } + } + } + callback(); + } else { + console.log('no resource to load, early way out'); + } + // early way out + fireL10nReadyEvent(lang); + gReadyState = 'complete'; + return; + } + + // start the callback when all resources are loaded + var onResourceLoaded = null; + var gResourceCount = 0; + onResourceLoaded = function() { + gResourceCount++; + if (gResourceCount >= langCount) { + callback(); + fireL10nReadyEvent(lang); + gReadyState = 'complete'; + } + }; + + // load all resource files + function L10nResourceLink(link) { + var href = link.href; + // Note: If |gAsyncResourceLoading| is false, then the following callbacks + // are synchronously called. + this.load = function(lang, callback) { + parseResource(href, lang, callback, function() { + console.warn(href + ' not found.'); + // lang not found, used default resource instead + console.warn('"' + lang + '" resource not found'); + gLanguage = ''; + // Resource not loaded, but we still need to call the callback. + callback(); + }); + }; + } + + for (var i = 0; i < langCount; i++) { + var resource = new L10nResourceLink(langLinks[i]); + resource.load(lang, onResourceLoaded); + } + } + + // clear all l10n data + function clear() { + gL10nData = {}; + gTextData = ''; + gLanguage = ''; + // TODO: clear all non predefined macros. + // There's no such macro /yet/ but we're planning to have some... + } + + + /** + * Get rules for plural forms (shared with JetPack), see: + * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html + * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p + * + * @param {string} lang + * locale (language) used. + * + * @return {Function} + * returns a function that gives the plural form name for a given integer: + * var fun = getPluralRules('en'); + * fun(1) -> 'one' + * fun(0) -> 'other' + * fun(1000) -> 'other'. + */ + + function getPluralRules(lang) { + var locales2rules = { + 'af': 3, + 'ak': 4, + 'am': 4, + 'ar': 1, + 'asa': 3, + 'az': 0, + 'be': 11, + 'bem': 3, + 'bez': 3, + 'bg': 3, + 'bh': 4, + 'bm': 0, + 'bn': 3, + 'bo': 0, + 'br': 20, + 'brx': 3, + 'bs': 11, + 'ca': 3, + 'cgg': 3, + 'chr': 3, + 'cs': 12, + 'cy': 17, + 'da': 3, + 'de': 3, + 'dv': 3, + 'dz': 0, + 'ee': 3, + 'el': 3, + 'en': 3, + 'eo': 3, + 'es': 3, + 'et': 3, + 'eu': 3, + 'fa': 0, + 'ff': 5, + 'fi': 3, + 'fil': 4, + 'fo': 3, + 'fr': 5, + 'fur': 3, + 'fy': 3, + 'ga': 8, + 'gd': 24, + 'gl': 3, + 'gsw': 3, + 'gu': 3, + 'guw': 4, + 'gv': 23, + 'ha': 3, + 'haw': 3, + 'he': 2, + 'hi': 4, + 'hr': 11, + 'hu': 0, + 'id': 0, + 'ig': 0, + 'ii': 0, + 'is': 3, + 'it': 3, + 'iu': 7, + 'ja': 0, + 'jmc': 3, + 'jv': 0, + 'ka': 0, + 'kab': 5, + 'kaj': 3, + 'kcg': 3, + 'kde': 0, + 'kea': 0, + 'kk': 3, + 'kl': 3, + 'km': 0, + 'kn': 0, + 'ko': 0, + 'ksb': 3, + 'ksh': 21, + 'ku': 3, + 'kw': 7, + 'lag': 18, + 'lb': 3, + 'lg': 3, + 'ln': 4, + 'lo': 0, + 'lt': 10, + 'lv': 6, + 'mas': 3, + 'mg': 4, + 'mk': 16, + 'ml': 3, + 'mn': 3, + 'mo': 9, + 'mr': 3, + 'ms': 0, + 'mt': 15, + 'my': 0, + 'nah': 3, + 'naq': 7, + 'nb': 3, + 'nd': 3, + 'ne': 3, + 'nl': 3, + 'nn': 3, + 'no': 3, + 'nr': 3, + 'nso': 4, + 'ny': 3, + 'nyn': 3, + 'om': 3, + 'or': 3, + 'pa': 3, + 'pap': 3, + 'pl': 13, + 'ps': 3, + 'pt': 3, + 'rm': 3, + 'ro': 9, + 'rof': 3, + 'ru': 11, + 'rwk': 3, + 'sah': 0, + 'saq': 3, + 'se': 7, + 'seh': 3, + 'ses': 0, + 'sg': 0, + 'sh': 11, + 'shi': 19, + 'sk': 12, + 'sl': 14, + 'sma': 7, + 'smi': 7, + 'smj': 7, + 'smn': 7, + 'sms': 7, + 'sn': 3, + 'so': 3, + 'sq': 3, + 'sr': 11, + 'ss': 3, + 'ssy': 3, + 'st': 3, + 'sv': 3, + 'sw': 3, + 'syr': 3, + 'ta': 3, + 'te': 3, + 'teo': 3, + 'th': 0, + 'ti': 4, + 'tig': 3, + 'tk': 3, + 'tl': 4, + 'tn': 3, + 'to': 0, + 'tr': 0, + 'ts': 3, + 'tzm': 22, + 'uk': 11, + 'ur': 3, + 've': 3, + 'vi': 0, + 'vun': 3, + 'wa': 4, + 'wae': 3, + 'wo': 0, + 'xh': 3, + 'xog': 3, + 'yo': 0, + 'zh': 0, + 'zu': 3 + }; + + // utility functions for plural rules methods + function isIn(n, list) { + return list.indexOf(n) !== -1; + } + function isBetween(n, start, end) { + return start <= n && n <= end; + } + + // list of all plural rules methods: + // map an integer to the plural form name to use + var pluralRules = { + '0': function(n) { + return 'other'; + }, + '1': function(n) { + if ((isBetween((n % 100), 3, 10))) + return 'few'; + if (n === 0) + return 'zero'; + if ((isBetween((n % 100), 11, 99))) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '2': function(n) { + if (n !== 0 && (n % 10) === 0) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '3': function(n) { + if (n == 1) + return 'one'; + return 'other'; + }, + '4': function(n) { + if ((isBetween(n, 0, 1))) + return 'one'; + return 'other'; + }, + '5': function(n) { + if ((isBetween(n, 0, 2)) && n != 2) + return 'one'; + return 'other'; + }, + '6': function(n) { + if (n === 0) + return 'zero'; + if ((n % 10) == 1 && (n % 100) != 11) + return 'one'; + return 'other'; + }, + '7': function(n) { + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '8': function(n) { + if ((isBetween(n, 3, 6))) + return 'few'; + if ((isBetween(n, 7, 10))) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '9': function(n) { + if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19))) + return 'few'; + if (n == 1) + return 'one'; + return 'other'; + }, + '10': function(n) { + if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19))) + return 'few'; + if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19))) + return 'one'; + return 'other'; + }, + '11': function(n) { + if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) + return 'few'; + if ((n % 10) === 0 || + (isBetween((n % 10), 5, 9)) || + (isBetween((n % 100), 11, 14))) + return 'many'; + if ((n % 10) == 1 && (n % 100) != 11) + return 'one'; + return 'other'; + }, + '12': function(n) { + if ((isBetween(n, 2, 4))) + return 'few'; + if (n == 1) + return 'one'; + return 'other'; + }, + '13': function(n) { + if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14))) + return 'few'; + if (n != 1 && (isBetween((n % 10), 0, 1)) || + (isBetween((n % 10), 5, 9)) || + (isBetween((n % 100), 12, 14))) + return 'many'; + if (n == 1) + return 'one'; + return 'other'; + }, + '14': function(n) { + if ((isBetween((n % 100), 3, 4))) + return 'few'; + if ((n % 100) == 2) + return 'two'; + if ((n % 100) == 1) + return 'one'; + return 'other'; + }, + '15': function(n) { + if (n === 0 || (isBetween((n % 100), 2, 10))) + return 'few'; + if ((isBetween((n % 100), 11, 19))) + return 'many'; + if (n == 1) + return 'one'; + return 'other'; + }, + '16': function(n) { + if ((n % 10) == 1 && n != 11) + return 'one'; + return 'other'; + }, + '17': function(n) { + if (n == 3) + return 'few'; + if (n === 0) + return 'zero'; + if (n == 6) + return 'many'; + if (n == 2) + return 'two'; + if (n == 1) + return 'one'; + return 'other'; + }, + '18': function(n) { + if (n === 0) + return 'zero'; + if ((isBetween(n, 0, 2)) && n !== 0 && n != 2) + return 'one'; + return 'other'; + }, + '19': function(n) { + if ((isBetween(n, 2, 10))) + return 'few'; + if ((isBetween(n, 0, 1))) + return 'one'; + return 'other'; + }, + '20': function(n) { + if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !( + isBetween((n % 100), 10, 19) || + isBetween((n % 100), 70, 79) || + isBetween((n % 100), 90, 99) + )) + return 'few'; + if ((n % 1000000) === 0 && n !== 0) + return 'many'; + if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92])) + return 'two'; + if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91])) + return 'one'; + return 'other'; + }, + '21': function(n) { + if (n === 0) + return 'zero'; + if (n == 1) + return 'one'; + return 'other'; + }, + '22': function(n) { + if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99))) + return 'one'; + return 'other'; + }, + '23': function(n) { + if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0) + return 'one'; + return 'other'; + }, + '24': function(n) { + if ((isBetween(n, 3, 10) || isBetween(n, 13, 19))) + return 'few'; + if (isIn(n, [2, 12])) + return 'two'; + if (isIn(n, [1, 11])) + return 'one'; + return 'other'; + } + }; + + // return a function that gives the plural form name for a given integer + var index = locales2rules[lang.replace(/-.*$/, '')]; + if (!(index in pluralRules)) { + console.warn('plural form unknown for [' + lang + ']'); + return function() { return 'other'; }; + } + return pluralRules[index]; + } + + // pre-defined 'plural' macro + gMacros.plural = function(str, param, key, prop) { + var n = parseFloat(param); + if (isNaN(n)) + return str; + + // TODO: support other properties (l20n still doesn't...) + if (prop != gTextProp) + return str; + + // initialize _pluralRules + if (!gMacros._pluralRules) { + gMacros._pluralRules = getPluralRules(gLanguage); + } + var index = '[' + gMacros._pluralRules(n) + ']'; + + // try to find a [zero|one|two] key if it's defined + if (n === 0 && (key + '[zero]') in gL10nData) { + str = gL10nData[key + '[zero]'][prop]; + } else if (n == 1 && (key + '[one]') in gL10nData) { + str = gL10nData[key + '[one]'][prop]; + } else if (n == 2 && (key + '[two]') in gL10nData) { + str = gL10nData[key + '[two]'][prop]; + } else if ((key + index) in gL10nData) { + str = gL10nData[key + index][prop]; + } else if ((key + '[other]') in gL10nData) { + str = gL10nData[key + '[other]'][prop]; + } + + return str; + }; + + + /** + * l10n dictionary functions + */ + + // fetch an l10n object, warn if not found, apply `args' if possible + function getL10nData(key, args, fallback) { + var data = gL10nData[key]; + if (!data) { + console.warn('#' + key + ' is undefined.'); + if (!fallback) { + return null; + } + data = fallback; + } + + /** This is where l10n expressions should be processed. + * The plan is to support C-style expressions from the l20n project; + * until then, only two kinds of simple expressions are supported: + * {[ index ]} and {{ arguments }}. + */ + var rv = {}; + for (var prop in data) { + var str = data[prop]; + str = substIndexes(str, args, key, prop); + str = substArguments(str, args, key); + rv[prop] = str; + } + return rv; + } + + // replace {[macros]} with their values + function substIndexes(str, args, key, prop) { + var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; + var reMatch = reIndex.exec(str); + if (!reMatch || !reMatch.length) + return str; + + // an index/macro has been found + // Note: at the moment, only one parameter is supported + var macroName = reMatch[1]; + var paramName = reMatch[2]; + var param; + if (args && paramName in args) { + param = args[paramName]; + } else if (paramName in gL10nData) { + param = gL10nData[paramName]; + } + + // there's no macro parser yet: it has to be defined in gMacros + if (macroName in gMacros) { + var macro = gMacros[macroName]; + str = macro(str, param, key, prop); + } + return str; + } + + // replace {{arguments}} with their values + function substArguments(str, args, key) { + var reArgs = /\{\{\s*(.+?)\s*\}\}/g; + return str.replace(reArgs, function(matched_text, arg) { + if (args && arg in args) { + return args[arg]; + } + if (arg in gL10nData) { + return gL10nData[arg]; + } + console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); + return matched_text; + }); + } + + // translate an HTML element + function translateElement(element) { + var l10n = getL10nAttributes(element); + if (!l10n.id) + return; + + // get the related l10n object + var data = getL10nData(l10n.id, l10n.args); + if (!data) { + console.warn('#' + l10n.id + ' is undefined.'); + return; + } + + // translate element (TODO: security checks?) + if (data[gTextProp]) { // XXX + if (getChildElementCount(element) === 0) { + element[gTextProp] = data[gTextProp]; + } else { + // this element has element children: replace the content of the first + // (non-empty) child textNode and clear other child textNodes + var children = element.childNodes; + var found = false; + for (var i = 0, l = children.length; i < l; i++) { + if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { + if (found) { + children[i].nodeValue = ''; + } else { + children[i].nodeValue = data[gTextProp]; + found = true; + } + } + } + // if no (non-empty) textNode is found, insert a textNode before the + // first element child. + if (!found) { + var textNode = document.createTextNode(data[gTextProp]); + element.insertBefore(textNode, element.firstChild); + } + } + delete data[gTextProp]; + } + + for (var k in data) { + element[k] = data[k]; + } + } + + // webkit browsers don't currently support 'children' on SVG elements... + function getChildElementCount(element) { + if (element.children) { + return element.children.length; + } + if (typeof element.childElementCount !== 'undefined') { + return element.childElementCount; + } + var count = 0; + for (var i = 0; i < element.childNodes.length; i++) { + count += element.nodeType === 1 ? 1 : 0; + } + return count; + } + + // translate an HTML subtree + function translateFragment(element) { + element = element || document.documentElement; + + // check all translatable children (= w/ a `data-l10n-id' attribute) + var children = getTranslatableChildren(element); + var elementCount = children.length; + for (var i = 0; i < elementCount; i++) { + translateElement(children[i]); + } + + // translate element itself if necessary + translateElement(element); + } + + return { + // get a localized string + get: function(key, args, fallbackString) { + var index = key.lastIndexOf('.'); + var prop = gTextProp; + if (index > 0) { // An attribute has been specified + prop = key.substr(index + 1); + key = key.substring(0, index); + } + var fallback; + if (fallbackString) { + fallback = {}; + fallback[prop] = fallbackString; + } + var data = getL10nData(key, args, fallback); + if (data && prop in data) { + return data[prop]; + } + return '{{' + key + '}}'; + }, + + // debug + getData: function() { return gL10nData; }, + getText: function() { return gTextData; }, + + // get|set the document language + getLanguage: function() { return gLanguage; }, + setLanguage: function(lang, callback) { + loadLocale(lang, function() { + if (callback) + callback(); + translateFragment(); + }); + }, + + // get the direction (ltr|rtl) of the current language + getDirection: function() { + // http://www.w3.org/International/questions/qa-scripts + // Arabic, Hebrew, Farsi, Pashto, Urdu + var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; + var shortCode = gLanguage.split('-', 1)[0]; + return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr'; + }, + + // translate an element or document fragment + translate: translateFragment, + + // this can be used to prevent race conditions + getReadyState: function() { return gReadyState; }, + ready: function(callback) { + if (!callback) { + return; + } else if (gReadyState == 'complete' || gReadyState == 'interactive') { + window.setTimeout(function() { + callback(); + }); + } else if (document.addEventListener) { + document.addEventListener('localized', function once() { + document.removeEventListener('localized', once); + callback(); + }); + } + } + }; +}) (window, document); diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/locale/locale.properties b/jero-boot-single-startup/src/main/resources/static/generic/web/locale/locale.properties new file mode 100644 index 00000000..9aded1b5 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/locale/locale.properties @@ -0,0 +1,312 @@ +[ach] +@import url(ach/viewer.properties) + +[af] +@import url(af/viewer.properties) + +[ak] +@import url(ak/viewer.properties) + +[an] +@import url(an/viewer.properties) + +[ar] +@import url(ar/viewer.properties) + +[as] +@import url(as/viewer.properties) + +[ast] +@import url(ast/viewer.properties) + +[az] +@import url(az/viewer.properties) + +[be] +@import url(be/viewer.properties) + +[bg] +@import url(bg/viewer.properties) + +[bn-BD] +@import url(bn-BD/viewer.properties) + +[bn-IN] +@import url(bn-IN/viewer.properties) + +[br] +@import url(br/viewer.properties) + +[bs] +@import url(bs/viewer.properties) + +[ca] +@import url(ca/viewer.properties) + +[cs] +@import url(cs/viewer.properties) + +[csb] +@import url(csb/viewer.properties) + +[cy] +@import url(cy/viewer.properties) + +[da] +@import url(da/viewer.properties) + +[de] +@import url(de/viewer.properties) + +[el] +@import url(el/viewer.properties) + +[en-GB] +@import url(en-GB/viewer.properties) + +[en-US] +@import url(en-US/viewer.properties) + +[en-ZA] +@import url(en-ZA/viewer.properties) + +[eo] +@import url(eo/viewer.properties) + +[es-AR] +@import url(es-AR/viewer.properties) + +[es-CL] +@import url(es-CL/viewer.properties) + +[es-ES] +@import url(es-ES/viewer.properties) + +[es-MX] +@import url(es-MX/viewer.properties) + +[et] +@import url(et/viewer.properties) + +[eu] +@import url(eu/viewer.properties) + +[fa] +@import url(fa/viewer.properties) + +[ff] +@import url(ff/viewer.properties) + +[fi] +@import url(fi/viewer.properties) + +[fr] +@import url(fr/viewer.properties) + +[fy-NL] +@import url(fy-NL/viewer.properties) + +[ga-IE] +@import url(ga-IE/viewer.properties) + +[gd] +@import url(gd/viewer.properties) + +[gl] +@import url(gl/viewer.properties) + +[gu-IN] +@import url(gu-IN/viewer.properties) + +[he] +@import url(he/viewer.properties) + +[hi-IN] +@import url(hi-IN/viewer.properties) + +[hr] +@import url(hr/viewer.properties) + +[hu] +@import url(hu/viewer.properties) + +[hy-AM] +@import url(hy-AM/viewer.properties) + +[id] +@import url(id/viewer.properties) + +[is] +@import url(is/viewer.properties) + +[it] +@import url(it/viewer.properties) + +[ja] +@import url(ja/viewer.properties) + +[ka] +@import url(ka/viewer.properties) + +[kk] +@import url(kk/viewer.properties) + +[km] +@import url(km/viewer.properties) + +[kn] +@import url(kn/viewer.properties) + +[ko] +@import url(ko/viewer.properties) + +[ku] +@import url(ku/viewer.properties) + +[lg] +@import url(lg/viewer.properties) + +[lij] +@import url(lij/viewer.properties) + +[lt] +@import url(lt/viewer.properties) + +[lv] +@import url(lv/viewer.properties) + +[mai] +@import url(mai/viewer.properties) + +[mk] +@import url(mk/viewer.properties) + +[ml] +@import url(ml/viewer.properties) + +[mn] +@import url(mn/viewer.properties) + +[mr] +@import url(mr/viewer.properties) + +[ms] +@import url(ms/viewer.properties) + +[my] +@import url(my/viewer.properties) + +[nb-NO] +@import url(nb-NO/viewer.properties) + +[nl] +@import url(nl/viewer.properties) + +[nn-NO] +@import url(nn-NO/viewer.properties) + +[nso] +@import url(nso/viewer.properties) + +[oc] +@import url(oc/viewer.properties) + +[or] +@import url(or/viewer.properties) + +[pa-IN] +@import url(pa-IN/viewer.properties) + +[pl] +@import url(pl/viewer.properties) + +[pt-BR] +@import url(pt-BR/viewer.properties) + +[pt-PT] +@import url(pt-PT/viewer.properties) + +[rm] +@import url(rm/viewer.properties) + +[ro] +@import url(ro/viewer.properties) + +[ru] +@import url(ru/viewer.properties) + +[rw] +@import url(rw/viewer.properties) + +[sah] +@import url(sah/viewer.properties) + +[si] +@import url(si/viewer.properties) + +[sk] +@import url(sk/viewer.properties) + +[sl] +@import url(sl/viewer.properties) + +[son] +@import url(son/viewer.properties) + +[sq] +@import url(sq/viewer.properties) + +[sr] +@import url(sr/viewer.properties) + +[sv-SE] +@import url(sv-SE/viewer.properties) + +[sw] +@import url(sw/viewer.properties) + +[ta] +@import url(ta/viewer.properties) + +[ta-LK] +@import url(ta-LK/viewer.properties) + +[te] +@import url(te/viewer.properties) + +[th] +@import url(th/viewer.properties) + +[tl] +@import url(tl/viewer.properties) + +[tn] +@import url(tn/viewer.properties) + +[tr] +@import url(tr/viewer.properties) + +[uk] +@import url(uk/viewer.properties) + +[ur] +@import url(ur/viewer.properties) + +[vi] +@import url(vi/viewer.properties) + +[wo] +@import url(wo/viewer.properties) + +[xh] +@import url(xh/viewer.properties) + +[zh-CN] +@import url(zh-CN/viewer.properties) + +[zh-TW] +@import url(zh-TW/viewer.properties) + +[zu] +@import url(zu/viewer.properties) + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/locale/zh-CN/viewer.properties b/jero-boot-single-startup/src/main/resources/static/generic/web/locale/zh-CN/viewer.properties new file mode 100644 index 00000000..6ec25f7a --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/locale/zh-CN/viewer.properties @@ -0,0 +1,167 @@ +# Copyright 2012 Mozilla Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Main toolbar buttons (tooltips and alt text for images) +previous.title=上一页 +previous_label=上一页 +next.title=下一页 +next_label=下一页 + +# LOCALIZATION NOTE (page_label, page_of): +# These strings are concatenated to form the "Page: X of Y" string. +# Do not translate "{{pageCount}}", it will be substituted with a number +# representing the total number of pages. +page_label=页面: +page_of=/ {{pageCount}} + +zoom_out.title=缩小 +zoom_out_label=缩小 +zoom_in.title=放大 +zoom_in_label=放大 +zoom.title=缩放 +presentation_mode.title=切换到演示模式 +presentation_mode_label=演示模式 +open_file.title=打开文件 +open_file_label=打开 +print.title=打印 +print_label=打印 +download.title=下载 +download_label=下载 +bookmark.title=当前视图(复制或在新窗口中打开) +bookmark_label=当前视图 + +# Secondary toolbar and context menu +tools.title=工具 +tools_label=工具 +first_page.title=转到第一页 +first_page.label=转到第一页 +first_page_label=转到第一页 +last_page.title=转到最后一页 +last_page.label=转到最后一页 +last_page_label=转到最后一页 +page_rotate_cw.title=顺时针旋转 +page_rotate_cw.label=顺时针旋转 +page_rotate_cw_label=顺时针旋转 +page_rotate_ccw.title=逆时针旋转 +page_rotate_ccw.label=逆时针旋转 +page_rotate_ccw_label=逆时针旋转 + +hand_tool_enable.title=启用手形工具 +hand_tool_enable_label=启用手形工具 +hand_tool_disable.title=禁用手形工具 +hand_tool_disable_label=禁用手形工具 + +# Document properties dialog box +document_properties.title=文档属性… +document_properties_label=文档属性… +document_properties_file_name=文件名: +document_properties_file_size=文件大小: +document_properties_kb={{size_kb}} KB ({{size_b}} 字节) +document_properties_mb={{size_mb}} MB ({{size_b}} 字节) +document_properties_title=标题: +document_properties_author=作者: +document_properties_subject=主题: +document_properties_keywords=关键词: +document_properties_creation_date=创建日期: +document_properties_modification_date=修改日期: +document_properties_date_string={{date}}, {{time}} +document_properties_creator=创建者: +document_properties_producer=PDF 制作者: +document_properties_version=PDF 版本: +document_properties_page_count=页数: +document_properties_close=关闭 + +# Tooltips and alt text for side panel toolbar buttons +# (the _label strings are alt text for the buttons, the .title strings are +# tooltips) +toggle_sidebar.title=切换侧栏 +toggle_sidebar_label=切换侧栏 +outline.title=显示文档大纲 +outline_label=文档大纲 +attachments.title=显示附件 +attachments_label=附件 +thumbs.title=显示缩略图 +thumbs_label=缩略图 +findbar.title=在文档中查找 +findbar_label=查找 + +# Thumbnails panel item (tooltip and alt text for images) +# LOCALIZATION NOTE (thumb_page_title): "{{page}}" will be replaced by the page +# number. +thumb_page_title=页码 {{page}} +# LOCALIZATION NOTE (thumb_page_canvas): "{{page}}" will be replaced by the page +# number. +thumb_page_canvas=页面 {{page}} 的缩略图 + +# Find panel button title and messages +find_label=查找: +find_previous.title=查找词语上一次出现的位置 +find_previous_label=上一页 +find_next.title=查找词语后一次出现的位置 +find_next_label=下一页 +find_highlight=全部高亮显示 +find_match_case_label=区分大小写 +find_reached_top=到达文档开头,从末尾继续 +find_reached_bottom=到达文档末尾,从开头继续 +find_not_found=词语未找到 + +# Error panel labels +error_more_info=更多信息 +error_less_info=更少信息 +error_close=关闭 +# LOCALIZATION NOTE (error_version_info): "{{version}}" and "{{build}}" will be +# replaced by the PDF.JS version and build ID. +error_version_info=PDF.js v{{version}} (build: {{build}}) +# LOCALIZATION NOTE (error_message): "{{message}}" will be replaced by an +# english string describing the error. +error_message=信息:{{message}} +# LOCALIZATION NOTE (error_stack): "{{stack}}" will be replaced with a stack +# trace. +error_stack=堆栈:{{stack}} +# LOCALIZATION NOTE (error_file): "{{file}}" will be replaced with a filename +error_file=文件:{{file}} +# LOCALIZATION NOTE (error_line): "{{line}}" will be replaced with a line number +error_line=行号:{{line}} +rendering_error=渲染页面时发生错误。 + +# Predefined zoom values +page_scale_width=适合页宽 +page_scale_fit=适合页面 +page_scale_auto=自动缩放 +page_scale_actual=实际大小 +# LOCALIZATION NOTE (page_scale_percent): "{{scale}}" will be replaced by a +# numerical scale value. +page_scale_percent={{scale}}% + +# Loading indicator messages +loading_error_indicator=错误 +loading_error=载入PDF时发生错误。 +invalid_file_error=无效或损坏的PDF文件。 +missing_file_error=缺少PDF文件。 +unexpected_response_error=意外的服务器响应。 + +# LOCALIZATION NOTE (text_annotation_type.alt): This is used as a tooltip. +# "{{type}}" will be replaced with an annotation type from a list defined in +# the PDF spec (32000-1:2008 Table 169 – Annotation types). +# Some common types are e.g.: "Check", "Text", "Comment", "Note" +text_annotation_type.alt=[{{type}} 注解] +password_label=输入密码以打开此 PDF 文件。 +password_invalid=密码无效。请重试。 +password_ok=确定 +password_cancel=取消 + +printing_not_supported=警告:打印功能不完全支持此浏览器。 +printing_not_ready=警告:该 PDF 未完全加载以供打印。 +web_fonts_disabled=Web 字体已被禁用:无法使用嵌入的PDF字体。 +document_colors_disabled=不允许 PDF 文档使用自己的颜色:浏览器中“允许页面选择自己的颜色”的选项已停用。 diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.css b/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.css new file mode 100644 index 00000000..a82150c4 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.css @@ -0,0 +1,1999 @@ +/* Copyright 2014 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +.textLayer { + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + overflow: hidden; + opacity: 0.2; +} + +.textLayer > div { + color: transparent; + position: absolute; + white-space: pre; + cursor: text; + -webkit-transform-origin: 0% 0%; + -moz-transform-origin: 0% 0%; + -o-transform-origin: 0% 0%; + -ms-transform-origin: 0% 0%; + transform-origin: 0% 0%; +} + +.textLayer .highlight { + margin: -1px; + padding: 1px; + + background-color: rgb(180, 0, 170); + border-radius: 4px; +} + +.textLayer .highlight.begin { + border-radius: 4px 0px 0px 4px; +} + +.textLayer .highlight.end { + border-radius: 0px 4px 4px 0px; +} + +.textLayer .highlight.middle { + border-radius: 0px; +} + +.textLayer .highlight.selected { + background-color: rgb(0, 100, 0); +} + +.textLayer ::selection { background: rgb(0,0,255); } +.textLayer ::-moz-selection { background: rgb(0,0,255); } + +.pdfViewer .canvasWrapper { + overflow: hidden; +} + +.pdfViewer .page { + direction: ltr; + width: 816px; + height: 1056px; + margin: 1px auto -8px auto; + position: relative; + overflow: visible; + border: 9px solid transparent; + background-clip: content-box; + border-image: url(images/shadow.png) 9 9 repeat; + background-color: white; +} + +.pdfViewer.removePageBorders .page { + margin: 0px auto 10px auto; + border: none; +} + +.pdfViewer .page canvas { + margin: 0; + display: block; +} + +.pdfViewer .page .loadingIcon { + position: absolute; + display: block; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: url('images/loading-icon.gif') center no-repeat; +} + +.pdfViewer .page .annotLink > a:hover { + opacity: 0.2; + background: #ff0; + box-shadow: 0px 2px 10px #ff0; +} + +.pdfPresentationMode:-webkit-full-screen .pdfViewer .page { + margin-bottom: 100%; + border: 0; +} + +.pdfPresentationMode:-moz-full-screen .pdfViewer .page { + margin-bottom: 100%; + border: 0; +} + +.pdfPresentationMode:-ms-fullscreen .pdfViewer .page { + margin-bottom: 100% !important; + border: 0; +} + +.pdfPresentationMode:fullscreen .pdfViewer .page { + margin-bottom: 100%; + border: 0; +} + +.pdfViewer .page .annotText > img { + position: absolute; + cursor: pointer; +} + +.pdfViewer .page .annotTextContentWrapper { + position: absolute; + width: 20em; +} + +.pdfViewer .page .annotTextContent { + z-index: 200; + float: left; + max-width: 20em; + background-color: #FFFF99; + box-shadow: 0px 2px 5px #333; + border-radius: 2px; + padding: 0.6em; + cursor: pointer; +} + +.pdfViewer .page .annotTextContent > h1 { + font-size: 1em; + border-bottom: 1px solid #000000; + padding-bottom: 0.2em; +} + +.pdfViewer .page .annotTextContent > p { + padding-top: 0.2em; +} + +.pdfViewer .page .annotLink > a { + position: absolute; + font-size: 1em; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.pdfViewer .page .annotLink > a /* -ms-a */ { + background: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAA\ + LAAAAAABAAEAAAIBRAA7") 0 0 repeat; +} + +* { + padding: 0; + margin: 0; +} + +html { + height: 100%; + /* Font size is needed to make the activity bar the correct size. */ + font-size: 10px; +} + +body { + height: 100%; + background-color: #404040; + background-image: url(images/texture.png); +} + +body, +input, +button, +select { + font: message-box; + outline: none; +} + +.hidden { + display: none !important; +} +[hidden] { + display: none !important; +} + +#viewerContainer.pdfPresentationMode:-webkit-full-screen { + top: 0px; + border-top: 2px solid transparent; + background-color: #000; + width: 100%; + height: 100%; + overflow: hidden; + cursor: none; + -webkit-user-select: none; +} + +#viewerContainer.pdfPresentationMode:-moz-full-screen { + top: 0px; + border-top: 2px solid transparent; + background-color: #000; + width: 100%; + height: 100%; + overflow: hidden; + cursor: none; + -moz-user-select: none; +} + +#viewerContainer.pdfPresentationMode:-ms-fullscreen { + top: 0px !important; + border-top: 2px solid transparent; + width: 100%; + height: 100%; + overflow: hidden !important; + cursor: none; + -ms-user-select: none; +} + +#viewerContainer.pdfPresentationMode:-ms-fullscreen::-ms-backdrop { + background-color: #000; +} + +#viewerContainer.pdfPresentationMode:fullscreen { + top: 0px; + border-top: 2px solid transparent; + background-color: #000; + width: 100%; + height: 100%; + overflow: hidden; + cursor: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; +} + +.pdfPresentationMode:-webkit-full-screen a:not(.internalLink) { + display: none; +} + +.pdfPresentationMode:-moz-full-screen a:not(.internalLink) { + display: none; +} + +.pdfPresentationMode:-ms-fullscreen a:not(.internalLink) { + display: none !important; +} + +.pdfPresentationMode:fullscreen a:not(.internalLink) { + display: none; +} + +.pdfPresentationMode:-webkit-full-screen .textLayer > div { + cursor: none; +} + +.pdfPresentationMode:-moz-full-screen .textLayer > div { + cursor: none; +} + +.pdfPresentationMode:-ms-fullscreen .textLayer > div { + cursor: none; +} + +.pdfPresentationMode:fullscreen .textLayer > div { + cursor: none; +} + +.pdfPresentationMode.pdfPresentationModeControls > *, +.pdfPresentationMode.pdfPresentationModeControls .textLayer > div { + cursor: default; +} + +/* outer/inner center provides horizontal center */ +.outerCenter { + pointer-events: none; + position: relative; +} +html[dir='ltr'] .outerCenter { + float: right; + right: 50%; +} +html[dir='rtl'] .outerCenter { + float: left; + left: 50%; +} +.innerCenter { + pointer-events: auto; + position: relative; +} +html[dir='ltr'] .innerCenter { + float: right; + right: -50%; +} +html[dir='rtl'] .innerCenter { + float: left; + left: -50%; +} + +#outerContainer { + width: 100%; + height: 100%; + position: relative; +} + +#sidebarContainer { + position: absolute; + top: 0; + bottom: 0; + width: 200px; + visibility: hidden; + -webkit-transition-duration: 200ms; + -webkit-transition-timing-function: ease; + transition-duration: 200ms; + transition-timing-function: ease; + +} +html[dir='ltr'] #sidebarContainer { + -webkit-transition-property: left; + transition-property: left; + left: -200px; +} +html[dir='rtl'] #sidebarContainer { + -webkit-transition-property: right; + transition-property: right; + right: -200px; +} + +#outerContainer.sidebarMoving > #sidebarContainer, +#outerContainer.sidebarOpen > #sidebarContainer { + visibility: visible; +} +html[dir='ltr'] #outerContainer.sidebarOpen > #sidebarContainer { + left: 0px; +} +html[dir='rtl'] #outerContainer.sidebarOpen > #sidebarContainer { + right: 0px; +} + +#mainContainer { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + min-width: 320px; + -webkit-transition-duration: 200ms; + -webkit-transition-timing-function: ease; + transition-duration: 200ms; + transition-timing-function: ease; +} +html[dir='ltr'] #outerContainer.sidebarOpen > #mainContainer { + -webkit-transition-property: left; + transition-property: left; + left: 200px; +} +html[dir='rtl'] #outerContainer.sidebarOpen > #mainContainer { + -webkit-transition-property: right; + transition-property: right; + right: 200px; +} + +#sidebarContent { + top: 32px; + bottom: 0; + overflow: auto; + -webkit-overflow-scrolling: touch; + position: absolute; + width: 200px; + background-color: hsla(0,0%,0%,.1); +} +html[dir='ltr'] #sidebarContent { + left: 0; + box-shadow: inset -1px 0 0 hsla(0,0%,0%,.25); +} +html[dir='rtl'] #sidebarContent { + right: 0; + box-shadow: inset 1px 0 0 hsla(0,0%,0%,.25); +} + +#viewerContainer { + overflow: auto; + -webkit-overflow-scrolling: touch; + position: absolute; + top: 32px; + right: 0; + bottom: 0; + left: 0; + outline: none; +} +html[dir='ltr'] #viewerContainer { + box-shadow: inset 1px 0 0 hsla(0,0%,100%,.05); +} +html[dir='rtl'] #viewerContainer { + box-shadow: inset -1px 0 0 hsla(0,0%,100%,.05); +} + +.toolbar { + position: relative; + left: 0; + right: 0; + z-index: 9999; + cursor: default; +} + +#toolbarContainer { + width: 100%; +} + +#toolbarSidebar { + width: 200px; + height: 32px; + background-color: #424242; /* fallback */ + background-image: url(images/texture.png), + linear-gradient(hsla(0,0%,30%,.99), hsla(0,0%,25%,.95)); +} +html[dir='ltr'] #toolbarSidebar { + box-shadow: inset -1px 0 0 rgba(0, 0, 0, 0.25), + inset 0 -1px 0 hsla(0,0%,100%,.05), + 0 1px 0 hsla(0,0%,0%,.15), + 0 0 1px hsla(0,0%,0%,.1); +} +html[dir='rtl'] #toolbarSidebar { + box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.25), + inset 0 1px 0 hsla(0,0%,100%,.05), + 0 1px 0 hsla(0,0%,0%,.15), + 0 0 1px hsla(0,0%,0%,.1); +} + +#toolbarContainer, .findbar, .secondaryToolbar { + position: relative; + height: 32px; + background-color: #474747; /* fallback */ + background-image: url(images/texture.png), + linear-gradient(hsla(0,0%,32%,.99), hsla(0,0%,27%,.95)); +} +html[dir='ltr'] #toolbarContainer, .findbar, .secondaryToolbar { + box-shadow: inset 1px 0 0 hsla(0,0%,100%,.08), + inset 0 1px 1px hsla(0,0%,0%,.15), + inset 0 -1px 0 hsla(0,0%,100%,.05), + 0 1px 0 hsla(0,0%,0%,.15), + 0 1px 1px hsla(0,0%,0%,.1); +} +html[dir='rtl'] #toolbarContainer, .findbar, .secondaryToolbar { + box-shadow: inset -1px 0 0 hsla(0,0%,100%,.08), + inset 0 1px 1px hsla(0,0%,0%,.15), + inset 0 -1px 0 hsla(0,0%,100%,.05), + 0 1px 0 hsla(0,0%,0%,.15), + 0 1px 1px hsla(0,0%,0%,.1); +} + +#toolbarViewer { + height: 32px; +} + +#loadingBar { + position: relative; + width: 100%; + height: 4px; + background-color: #333; + border-bottom: 1px solid #333; +} + +#loadingBar .progress { + position: absolute; + top: 0; + left: 0; + width: 0%; + height: 100%; + background-color: #ddd; + overflow: hidden; + -webkit-transition: width 200ms; + transition: width 200ms; +} + +@-webkit-keyframes progressIndeterminate { + 0% { left: 0%; } + 50% { left: 100%; } + 100% { left: 100%; } +} + +@keyframes progressIndeterminate { + 0% { left: 0%; } + 50% { left: 100%; } + 100% { left: 100%; } +} + +#loadingBar .progress.indeterminate { + background-color: #999; + -webkit-transition: none; + transition: none; +} + +#loadingBar .indeterminate .glimmer { + position: absolute; + top: 0; + left: 0; + height: 100%; + width: 50px; + + background-image: linear-gradient(to right, #999 0%, #fff 50%, #999 100%); + background-size: 100% 100%; + background-repeat: no-repeat; + + -webkit-animation: progressIndeterminate 2s linear infinite; + animation: progressIndeterminate 2s linear infinite; +} + +.findbar, .secondaryToolbar { + top: 32px; + position: absolute; + z-index: 10000; + height: 32px; + + min-width: 16px; + padding: 0px 6px 0px 6px; + margin: 4px 2px 4px 2px; + color: hsl(0,0%,85%); + font-size: 12px; + line-height: 14px; + text-align: left; + cursor: default; +} + +html[dir='ltr'] .findbar { + left: 68px; +} + +html[dir='rtl'] .findbar { + right: 68px; +} + +.findbar label { + -webkit-user-select: none; + -moz-user-select: none; +} + +#findInput[data-status="pending"] { + background-image: url(images/loading-small.png); + background-repeat: no-repeat; + background-position: right; +} +html[dir='rtl'] #findInput[data-status="pending"] { + background-position: left; +} + +.secondaryToolbar { + padding: 6px; + height: auto; + z-index: 30000; +} +html[dir='ltr'] .secondaryToolbar { + right: 4px; +} +html[dir='rtl'] .secondaryToolbar { + left: 4px; +} + +#secondaryToolbarButtonContainer { + max-width: 200px; + max-height: 400px; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + margin-bottom: -4px; +} + +.doorHanger, +.doorHangerRight { + border: 1px solid hsla(0,0%,0%,.5); + border-radius: 2px; + box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); +} +.doorHanger:after, .doorHanger:before, +.doorHangerRight:after, .doorHangerRight:before { + bottom: 100%; + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; +} +.doorHanger:after, +.doorHangerRight:after { + border-bottom-color: hsla(0,0%,32%,.99); + border-width: 8px; +} +.doorHanger:before, +.doorHangerRight:before { + border-bottom-color: hsla(0,0%,0%,.5); + border-width: 9px; +} + +html[dir='ltr'] .doorHanger:after, +html[dir='rtl'] .doorHangerRight:after { + left: 13px; + margin-left: -8px; +} + +html[dir='ltr'] .doorHanger:before, +html[dir='rtl'] .doorHangerRight:before { + left: 13px; + margin-left: -9px; +} + +html[dir='rtl'] .doorHanger:after, +html[dir='ltr'] .doorHangerRight:after { + right: 13px; + margin-right: -8px; +} + +html[dir='rtl'] .doorHanger:before, +html[dir='ltr'] .doorHangerRight:before { + right: 13px; + margin-right: -9px; +} + +#findMsg { + font-style: italic; + color: #A6B7D0; +} + +#findInput.notFound { + background-color: rgb(255, 102, 102); +} + +html[dir='ltr'] #toolbarViewerLeft { + margin-left: -1px; +} +html[dir='rtl'] #toolbarViewerRight { + margin-right: -1px; +} + +html[dir='ltr'] #toolbarViewerLeft, +html[dir='rtl'] #toolbarViewerRight { + position: absolute; + top: 0; + left: 0; +} +html[dir='ltr'] #toolbarViewerRight, +html[dir='rtl'] #toolbarViewerLeft { + position: absolute; + top: 0; + right: 0; +} +html[dir='ltr'] #toolbarViewerLeft > *, +html[dir='ltr'] #toolbarViewerMiddle > *, +html[dir='ltr'] #toolbarViewerRight > *, +html[dir='ltr'] .findbar > * { + position: relative; + float: left; +} +html[dir='rtl'] #toolbarViewerLeft > *, +html[dir='rtl'] #toolbarViewerMiddle > *, +html[dir='rtl'] #toolbarViewerRight > *, +html[dir='rtl'] .findbar > * { + position: relative; + float: right; +} + +html[dir='ltr'] .splitToolbarButton { + margin: 3px 2px 4px 0; + display: inline-block; +} +html[dir='rtl'] .splitToolbarButton { + margin: 3px 0 4px 2px; + display: inline-block; +} +html[dir='ltr'] .splitToolbarButton > .toolbarButton { + border-radius: 0; + float: left; +} +html[dir='rtl'] .splitToolbarButton > .toolbarButton { + border-radius: 0; + float: right; +} + +.toolbarButton, +.secondaryToolbarButton, +.overlayButton { + border: 0 none; + background: none; + width: 32px; + height: 25px; +} + +.toolbarButton > span { + display: inline-block; + width: 0; + height: 0; + overflow: hidden; +} + +.toolbarButton[disabled], +.secondaryToolbarButton[disabled], +.overlayButton[disabled] { + opacity: .5; +} + +.toolbarButton.group { + margin-right: 0; +} + +.splitToolbarButton.toggled .toolbarButton { + margin: 0; +} + +.splitToolbarButton:hover > .toolbarButton, +.splitToolbarButton:focus > .toolbarButton, +.splitToolbarButton.toggled > .toolbarButton, +.toolbarButton.textButton { + background-color: hsla(0,0%,0%,.12); + background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0)); + background-clip: padding-box; + border: 1px solid hsla(0,0%,0%,.35); + border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42); + box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset, + 0 0 1px hsla(0,0%,100%,.15) inset, + 0 1px 0 hsla(0,0%,100%,.05); + -webkit-transition-property: background-color, border-color, box-shadow; + -webkit-transition-duration: 150ms; + -webkit-transition-timing-function: ease; + transition-property: background-color, border-color, box-shadow; + transition-duration: 150ms; + transition-timing-function: ease; + +} +.splitToolbarButton > .toolbarButton:hover, +.splitToolbarButton > .toolbarButton:focus, +.dropdownToolbarButton:hover, +.overlayButton:hover, +.toolbarButton.textButton:hover, +.toolbarButton.textButton:focus { + background-color: hsla(0,0%,0%,.2); + box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset, + 0 0 1px hsla(0,0%,100%,.15) inset, + 0 0 1px hsla(0,0%,0%,.05); + z-index: 199; +} +.splitToolbarButton > .toolbarButton { + position: relative; +} +html[dir='ltr'] .splitToolbarButton > .toolbarButton:first-child, +html[dir='rtl'] .splitToolbarButton > .toolbarButton:last-child { + position: relative; + margin: 0; + margin-right: -1px; + border-top-left-radius: 2px; + border-bottom-left-radius: 2px; + border-right-color: transparent; +} +html[dir='ltr'] .splitToolbarButton > .toolbarButton:last-child, +html[dir='rtl'] .splitToolbarButton > .toolbarButton:first-child { + position: relative; + margin: 0; + margin-left: -1px; + border-top-right-radius: 2px; + border-bottom-right-radius: 2px; + border-left-color: transparent; +} +.splitToolbarButtonSeparator { + padding: 8px 0; + width: 1px; + background-color: hsla(0,0%,0%,.5); + z-index: 99; + box-shadow: 0 0 0 1px hsla(0,0%,100%,.08); + display: inline-block; + margin: 5px 0; +} +html[dir='ltr'] .splitToolbarButtonSeparator { + float: left; +} +html[dir='rtl'] .splitToolbarButtonSeparator { + float: right; +} +.splitToolbarButton:hover > .splitToolbarButtonSeparator, +.splitToolbarButton.toggled > .splitToolbarButtonSeparator { + padding: 12px 0; + margin: 1px 0; + box-shadow: 0 0 0 1px hsla(0,0%,100%,.03); + -webkit-transition-property: padding; + -webkit-transition-duration: 10ms; + -webkit-transition-timing-function: ease; + transition-property: padding; + transition-duration: 10ms; + transition-timing-function: ease; +} + +.toolbarButton, +.dropdownToolbarButton, +.secondaryToolbarButton, +.overlayButton { + min-width: 16px; + padding: 2px 6px 0; + border: 1px solid transparent; + border-radius: 2px; + color: hsla(0,0%,100%,.8); + font-size: 12px; + line-height: 14px; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + /* Opera does not support user-select, use <... unselectable="on"> instead */ + cursor: default; + -webkit-transition-property: background-color, border-color, box-shadow; + -webkit-transition-duration: 150ms; + -webkit-transition-timing-function: ease; + transition-property: background-color, border-color, box-shadow; + transition-duration: 150ms; + transition-timing-function: ease; +} + +html[dir='ltr'] .toolbarButton, +html[dir='ltr'] .overlayButton, +html[dir='ltr'] .dropdownToolbarButton { + margin: 3px 2px 4px 0; +} +html[dir='rtl'] .toolbarButton, +html[dir='rtl'] .overlayButton, +html[dir='rtl'] .dropdownToolbarButton { + margin: 3px 0 4px 2px; +} + +.toolbarButton:hover, +.toolbarButton:focus, +.dropdownToolbarButton, +.overlayButton, +.secondaryToolbarButton:hover, +.secondaryToolbarButton:focus { + background-color: hsla(0,0%,0%,.12); + background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0)); + background-clip: padding-box; + border: 1px solid hsla(0,0%,0%,.35); + border-color: hsla(0,0%,0%,.32) hsla(0,0%,0%,.38) hsla(0,0%,0%,.42); + box-shadow: 0 1px 0 hsla(0,0%,100%,.05) inset, + 0 0 1px hsla(0,0%,100%,.15) inset, + 0 1px 0 hsla(0,0%,100%,.05); +} + +.toolbarButton:hover:active, +.overlayButton:hover:active, +.dropdownToolbarButton:hover:active, +.secondaryToolbarButton:hover:active { + background-color: hsla(0,0%,0%,.2); + background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0)); + border-color: hsla(0,0%,0%,.35) hsla(0,0%,0%,.4) hsla(0,0%,0%,.45); + box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset, + 0 0 1px hsla(0,0%,0%,.2) inset, + 0 1px 0 hsla(0,0%,100%,.05); + -webkit-transition-property: background-color, border-color, box-shadow; + -webkit-transition-duration: 10ms; + -webkit-transition-timing-function: linear; + transition-property: background-color, border-color, box-shadow; + transition-duration: 10ms; + transition-timing-function: linear; +} + +.toolbarButton.toggled, +.splitToolbarButton.toggled > .toolbarButton.toggled, +.secondaryToolbarButton.toggled { + background-color: hsla(0,0%,0%,.3); + background-image: linear-gradient(hsla(0,0%,100%,.05), hsla(0,0%,100%,0)); + border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.45) hsla(0,0%,0%,.5); + box-shadow: 0 1px 1px hsla(0,0%,0%,.1) inset, + 0 0 1px hsla(0,0%,0%,.2) inset, + 0 1px 0 hsla(0,0%,100%,.05); + -webkit-transition-property: background-color, border-color, box-shadow; + -webkit-transition-duration: 10ms; + -webkit-transition-timing-function: linear; + transition-property: background-color, border-color, box-shadow; + transition-duration: 10ms; + transition-timing-function: linear; +} + +.toolbarButton.toggled:hover:active, +.splitToolbarButton.toggled > .toolbarButton.toggled:hover:active, +.secondaryToolbarButton.toggled:hover:active { + background-color: hsla(0,0%,0%,.4); + border-color: hsla(0,0%,0%,.4) hsla(0,0%,0%,.5) hsla(0,0%,0%,.55); + box-shadow: 0 1px 1px hsla(0,0%,0%,.2) inset, + 0 0 1px hsla(0,0%,0%,.3) inset, + 0 1px 0 hsla(0,0%,100%,.05); +} + +.dropdownToolbarButton { + width: 120px; + max-width: 120px; + padding: 3px 2px 2px; + overflow: hidden; + background: url(images/toolbarButton-menuArrows.png) no-repeat; +} +html[dir='ltr'] .dropdownToolbarButton { + background-position: 95%; +} +html[dir='rtl'] .dropdownToolbarButton { + background-position: 5%; +} + +.dropdownToolbarButton > select { + min-width: 140px; + font-size: 12px; + color: hsl(0,0%,95%); + margin: 0; + padding: 0; + border: none; + background: rgba(0,0,0,0); /* Opera does not support 'transparent' +

+ +
+ +
+ + + + + + + + + +
+
+
+
+ +
+ +
+ +
+ +
+ + + +
+
+ + + + + + + + + Current View + + +
+ + +
+
+
+
+ +
+ +
+ + + +
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + +
+
+
+ + + + + + + +
+ + + + + diff --git a/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.js b/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.js new file mode 100644 index 00000000..73222084 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/generic/web/viewer.js @@ -0,0 +1,7614 @@ +/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ +/* Copyright 2012 Mozilla Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* globals PDFJS, PDFBug, FirefoxCom, Stats, Cache, ProgressBar, + DownloadManager, getFileName, getPDFFileNameFromURL, + PDFHistory, Preferences, SidebarView, ViewHistory, Stats, + PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar, + PasswordPrompt, PDFPresentationMode, HandTool, Promise, + PDFDocumentProperties, PDFOutlineView, PDFAttachmentView, + OverlayManager, PDFFindController, PDFFindBar, getVisibleElements, + watchScroll, PDFViewer, PDFRenderingQueue, PresentationModeState, + RenderingStates, DEFAULT_SCALE, UNKNOWN_SCALE, + IGNORE_CURRENT_POSITION_ON_ZOOM: true */ + +'use strict'; + +var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf'; +var DEFAULT_SCALE_DELTA = 1.1; +var MIN_SCALE = 0.25; +var MAX_SCALE = 10.0; +var VIEW_HISTORY_MEMORY = 20; +var SCALE_SELECT_CONTAINER_PADDING = 8; +var SCALE_SELECT_PADDING = 22; +var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; +var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; + +PDFJS.imageResourcesPath = './images/'; + PDFJS.workerSrc = '../build/pdf.worker.js'; + PDFJS.cMapUrl = '../web/cmaps/'; + PDFJS.cMapPacked = true; + +var mozL10n = document.mozL10n || document.webL10n; + + +var CSS_UNITS = 96.0 / 72.0; +var DEFAULT_SCALE = 'auto'; +var UNKNOWN_SCALE = 0; +var MAX_AUTO_SCALE = 1.25; +var SCROLLBAR_PADDING = 40; +var VERTICAL_PADDING = 5; + +// optimised CSS custom property getter/setter +var CustomStyle = (function CustomStyleClosure() { + + // As noted on: http://www.zachstronaut.com/posts/2009/02/17/ + // animate-css-transforms-firefox-webkit.html + // in some versions of IE9 it is critical that ms appear in this list + // before Moz + var prefixes = ['ms', 'Moz', 'Webkit', 'O']; + var _cache = {}; + + function CustomStyle() {} + + CustomStyle.getProp = function get(propName, element) { + // check cache only when no element is given + if (arguments.length === 1 && typeof _cache[propName] === 'string') { + return _cache[propName]; + } + + element = element || document.documentElement; + var style = element.style, prefixed, uPropName; + + // test standard property first + if (typeof style[propName] === 'string') { + return (_cache[propName] = propName); + } + + // capitalize + uPropName = propName.charAt(0).toUpperCase() + propName.slice(1); + + // test vendor specific properties + for (var i = 0, l = prefixes.length; i < l; i++) { + prefixed = prefixes[i] + uPropName; + if (typeof style[prefixed] === 'string') { + return (_cache[propName] = prefixed); + } + } + + //if all fails then set to undefined + return (_cache[propName] = 'undefined'); + }; + + CustomStyle.setProp = function set(propName, element, str) { + var prop = this.getProp(propName); + if (prop !== 'undefined') { + element.style[prop] = str; + } + }; + + return CustomStyle; +})(); + +function getFileName(url) { + var anchor = url.indexOf('#'); + var query = url.indexOf('?'); + var end = Math.min( + anchor > 0 ? anchor : url.length, + query > 0 ? query : url.length); + return url.substring(url.lastIndexOf('/', end) + 1, end); +} + +/** + * Returns scale factor for the canvas. It makes sense for the HiDPI displays. + * @return {Object} The object with horizontal (sx) and vertical (sy) + scales. The scaled property is set to false if scaling is + not required, true otherwise. + */ +function getOutputScale(ctx) { + var devicePixelRatio = window.devicePixelRatio || 1; + var backingStoreRatio = ctx.webkitBackingStorePixelRatio || + ctx.mozBackingStorePixelRatio || + ctx.msBackingStorePixelRatio || + ctx.oBackingStorePixelRatio || + ctx.backingStorePixelRatio || 1; + var pixelRatio = devicePixelRatio / backingStoreRatio; + return { + sx: pixelRatio, + sy: pixelRatio, + scaled: pixelRatio !== 1 + }; +} + +/** + * Scrolls specified element into view of its parent. + * element {Object} The element to be visible. + * spot {Object} An object with optional top and left properties, + * specifying the offset from the top left edge. + */ +function scrollIntoView(element, spot) { + // Assuming offsetParent is available (it's not available when viewer is in + // hidden iframe or object). We have to scroll: if the offsetParent is not set + // producing the error. See also animationStartedClosure. + var parent = element.offsetParent; + var offsetY = element.offsetTop + element.clientTop; + var offsetX = element.offsetLeft + element.clientLeft; + if (!parent) { + console.error('offsetParent is not set -- cannot scroll'); + return; + } + while (parent.clientHeight === parent.scrollHeight) { + if (parent.dataset._scaleY) { + offsetY /= parent.dataset._scaleY; + offsetX /= parent.dataset._scaleX; + } + offsetY += parent.offsetTop; + offsetX += parent.offsetLeft; + parent = parent.offsetParent; + if (!parent) { + return; // no need to scroll + } + } + if (spot) { + if (spot.top !== undefined) { + offsetY += spot.top; + } + if (spot.left !== undefined) { + offsetX += spot.left; + parent.scrollLeft = offsetX; + } + } + parent.scrollTop = offsetY; +} + +/** + * Helper function to start monitoring the scroll event and converting them into + * PDF.js friendly one: with scroll debounce and scroll direction. + */ +function watchScroll(viewAreaElement, callback) { + var debounceScroll = function debounceScroll(evt) { + if (rAF) { + return; + } + // schedule an invocation of scroll for next animation frame. + rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { + rAF = null; + + var currentY = viewAreaElement.scrollTop; + var lastY = state.lastY; + if (currentY !== lastY) { + state.down = currentY > lastY; + } + state.lastY = currentY; + callback(state); + }); + }; + + var state = { + down: true, + lastY: viewAreaElement.scrollTop, + _eventHandler: debounceScroll + }; + + var rAF = null; + viewAreaElement.addEventListener('scroll', debounceScroll, true); + return state; +} + +/** + * Use binary search to find the index of the first item in a given array which + * passes a given condition. The items are expected to be sorted in the sense + * that if the condition is true for one item in the array, then it is also true + * for all following items. + * + * @returns {Number} Index of the first array element to pass the test, + * or |items.length| if no such element exists. + */ +function binarySearchFirstItem(items, condition) { + var minIndex = 0; + var maxIndex = items.length - 1; + + if (items.length === 0 || !condition(items[maxIndex])) { + return items.length; + } + if (condition(items[minIndex])) { + return minIndex; + } + + while (minIndex < maxIndex) { + var currentIndex = (minIndex + maxIndex) >> 1; + var currentItem = items[currentIndex]; + if (condition(currentItem)) { + maxIndex = currentIndex; + } else { + minIndex = currentIndex + 1; + } + } + return minIndex; /* === maxIndex */ +} + +/** + * Generic helper to find out what elements are visible within a scroll pane. + */ +function getVisibleElements(scrollEl, views, sortByVisibility) { + var top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight; + var left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth; + + function isElementBottomBelowViewTop(view) { + var element = view.div; + var elementBottom = + element.offsetTop + element.clientTop + element.clientHeight; + return elementBottom > top; + } + + var visible = [], view, element; + var currentHeight, viewHeight, hiddenHeight, percentHeight; + var currentWidth, viewWidth; + var firstVisibleElementInd = (views.length === 0) ? 0 : + binarySearchFirstItem(views, isElementBottomBelowViewTop); + + for (var i = firstVisibleElementInd, ii = views.length; i < ii; i++) { + view = views[i]; + element = view.div; + currentHeight = element.offsetTop + element.clientTop; + viewHeight = element.clientHeight; + + if (currentHeight > bottom) { + break; + } + + currentWidth = element.offsetLeft + element.clientLeft; + viewWidth = element.clientWidth; + if (currentWidth + viewWidth < left || currentWidth > right) { + continue; + } + hiddenHeight = Math.max(0, top - currentHeight) + + Math.max(0, currentHeight + viewHeight - bottom); + percentHeight = ((viewHeight - hiddenHeight) * 100 / viewHeight) | 0; + + visible.push({ + id: view.id, + x: currentWidth, + y: currentHeight, + view: view, + percent: percentHeight + }); + } + + var first = visible[0]; + var last = visible[visible.length - 1]; + + if (sortByVisibility) { + visible.sort(function(a, b) { + var pc = a.percent - b.percent; + if (Math.abs(pc) > 0.001) { + return -pc; + } + return a.id - b.id; // ensure stability + }); + } + return {first: first, last: last, views: visible}; +} + +/** + * Event handler to suppress context menu. + */ +function noContextMenuHandler(e) { + e.preventDefault(); +} + +/** + * Returns the filename or guessed filename from the url (see issue 3455). + * url {String} The original PDF location. + * @return {String} Guessed PDF file name. + */ +function getPDFFileNameFromURL(url) { + var reURI = /^(?:([^:]+:)?\/\/[^\/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; + // SCHEME HOST 1.PATH 2.QUERY 3.REF + // Pattern to get last matching NAME.pdf + var reFilename = /[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i; + var splitURI = reURI.exec(url); + var suggestedFilename = reFilename.exec(splitURI[1]) || + reFilename.exec(splitURI[2]) || + reFilename.exec(splitURI[3]); + if (suggestedFilename) { + suggestedFilename = suggestedFilename[0]; + if (suggestedFilename.indexOf('%') !== -1) { + // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf + try { + suggestedFilename = + reFilename.exec(decodeURIComponent(suggestedFilename))[0]; + } catch(e) { // Possible (extremely rare) errors: + // URIError "Malformed URI", e.g. for "%AA.pdf" + // TypeError "null has no properties", e.g. for "%2F.pdf" + } + } + } + return suggestedFilename || 'document.pdf'; +} + +var ProgressBar = (function ProgressBarClosure() { + + function clamp(v, min, max) { + return Math.min(Math.max(v, min), max); + } + + function ProgressBar(id, opts) { + this.visible = true; + + // Fetch the sub-elements for later. + this.div = document.querySelector(id + ' .progress'); + + // Get the loading bar element, so it can be resized to fit the viewer. + this.bar = this.div.parentNode; + + // Get options, with sensible defaults. + this.height = opts.height || 100; + this.width = opts.width || 100; + this.units = opts.units || '%'; + + // Initialize heights. + this.div.style.height = this.height + this.units; + this.percent = 0; + } + + ProgressBar.prototype = { + + updateBar: function ProgressBar_updateBar() { + if (this._indeterminate) { + this.div.classList.add('indeterminate'); + this.div.style.width = this.width + this.units; + return; + } + + this.div.classList.remove('indeterminate'); + var progressSize = this.width * this._percent / 100; + this.div.style.width = progressSize + this.units; + }, + + get percent() { + return this._percent; + }, + + set percent(val) { + this._indeterminate = isNaN(val); + this._percent = clamp(val, 0, 100); + this.updateBar(); + }, + + setWidth: function ProgressBar_setWidth(viewer) { + if (viewer) { + var container = viewer.parentNode; + var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; + if (scrollbarWidth > 0) { + this.bar.setAttribute('style', 'width: calc(100% - ' + + scrollbarWidth + 'px);'); + } + } + }, + + hide: function ProgressBar_hide() { + if (!this.visible) { + return; + } + this.visible = false; + this.bar.classList.add('hidden'); + document.body.classList.remove('loadingInProgress'); + }, + + show: function ProgressBar_show() { + if (this.visible) { + return; + } + this.visible = true; + document.body.classList.add('loadingInProgress'); + this.bar.classList.remove('hidden'); + } + }; + + return ProgressBar; +})(); + + + +var DEFAULT_PREFERENCES = { + showPreviousViewOnLoad: true, + defaultZoomValue: '', + sidebarViewOnLoad: 0, + enableHandToolOnLoad: false, + enableWebGL: false, + pdfBugEnabled: false, + disableRange: false, + disableStream: false, + disableAutoFetch: false, + disableFontFace: false, + disableTextLayer: false, + useOnlyCssZoom: false +}; + + +var SidebarView = { + NONE: 0, + THUMBS: 1, + OUTLINE: 2, + ATTACHMENTS: 3 +}; + +/** + * Preferences - Utility for storing persistent settings. + * Used for settings that should be applied to all opened documents, + * or every time the viewer is loaded. + */ +var Preferences = { + prefs: Object.create(DEFAULT_PREFERENCES), + isInitializedPromiseResolved: false, + initializedPromise: null, + + /** + * Initialize and fetch the current preference values from storage. + * @return {Promise} A promise that is resolved when the preferences + * have been initialized. + */ + initialize: function preferencesInitialize() { + return this.initializedPromise = + this._readFromStorage(DEFAULT_PREFERENCES).then(function(prefObj) { + this.isInitializedPromiseResolved = true; + if (prefObj) { + this.prefs = prefObj; + } + }.bind(this)); + }, + + /** + * Stub function for writing preferences to storage. + * NOTE: This should be overridden by a build-specific function defined below. + * @param {Object} prefObj The preferences that should be written to storage. + * @return {Promise} A promise that is resolved when the preference values + * have been written. + */ + _writeToStorage: function preferences_writeToStorage(prefObj) { + return Promise.resolve(); + }, + + /** + * Stub function for reading preferences from storage. + * NOTE: This should be overridden by a build-specific function defined below. + * @param {Object} prefObj The preferences that should be read from storage. + * @return {Promise} A promise that is resolved with an {Object} containing + * the preferences that have been read. + */ + _readFromStorage: function preferences_readFromStorage(prefObj) { + return Promise.resolve(); + }, + + /** + * Reset the preferences to their default values and update storage. + * @return {Promise} A promise that is resolved when the preference values + * have been reset. + */ + reset: function preferencesReset() { + return this.initializedPromise.then(function() { + this.prefs = Object.create(DEFAULT_PREFERENCES); + return this._writeToStorage(DEFAULT_PREFERENCES); + }.bind(this)); + }, + + /** + * Replace the current preference values with the ones from storage. + * @return {Promise} A promise that is resolved when the preference values + * have been updated. + */ + reload: function preferencesReload() { + return this.initializedPromise.then(function () { + this._readFromStorage(DEFAULT_PREFERENCES).then(function(prefObj) { + if (prefObj) { + this.prefs = prefObj; + } + }.bind(this)); + }.bind(this)); + }, + + /** + * Set the value of a preference. + * @param {string} name The name of the preference that should be changed. + * @param {boolean|number|string} value The new value of the preference. + * @return {Promise} A promise that is resolved when the value has been set, + * provided that the preference exists and the types match. + */ + set: function preferencesSet(name, value) { + return this.initializedPromise.then(function () { + if (DEFAULT_PREFERENCES[name] === undefined) { + throw new Error('preferencesSet: \'' + name + '\' is undefined.'); + } else if (value === undefined) { + throw new Error('preferencesSet: no value is specified.'); + } + var valueType = typeof value; + var defaultType = typeof DEFAULT_PREFERENCES[name]; + + if (valueType !== defaultType) { + if (valueType === 'number' && defaultType === 'string') { + value = value.toString(); + } else { + throw new Error('Preferences_set: \'' + value + '\' is a \"' + + valueType + '\", expected \"' + defaultType + '\".'); + } + } else { + if (valueType === 'number' && (value | 0) !== value) { + throw new Error('Preferences_set: \'' + value + + '\' must be an \"integer\".'); + } + } + this.prefs[name] = value; + return this._writeToStorage(this.prefs); + }.bind(this)); + }, + + /** + * Get the value of a preference. + * @param {string} name The name of the preference whose value is requested. + * @return {Promise} A promise that is resolved with a {boolean|number|string} + * containing the value of the preference. + */ + get: function preferencesGet(name) { + return this.initializedPromise.then(function () { + var defaultValue = DEFAULT_PREFERENCES[name]; + + if (defaultValue === undefined) { + throw new Error('preferencesGet: \'' + name + '\' is undefined.'); + } else { + var prefValue = this.prefs[name]; + + if (prefValue !== undefined) { + return prefValue; + } + } + return defaultValue; + }.bind(this)); + } +}; + + + +Preferences._writeToStorage = function (prefObj) { + return new Promise(function (resolve) { + localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); + resolve(); + }); +}; + +Preferences._readFromStorage = function (prefObj) { + return new Promise(function (resolve) { + var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); + resolve(readPrefs); + }); +}; + + +(function mozPrintCallbackPolyfillClosure() { + if ('mozPrintCallback' in document.createElement('canvas')) { + return; + } + // Cause positive result on feature-detection: + HTMLCanvasElement.prototype.mozPrintCallback = undefined; + + var canvases; // During print task: non-live NodeList of elements + var index; // Index of element that is being processed + + var print = window.print; + window.print = function print() { + if (canvases) { + console.warn('Ignored window.print() because of a pending print job.'); + return; + } + try { + dispatchEvent('beforeprint'); + } finally { + canvases = document.querySelectorAll('canvas'); + index = -1; + next(); + } + }; + + function dispatchEvent(eventType) { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent(eventType, false, false, 'custom'); + window.dispatchEvent(event); + } + + function next() { + if (!canvases) { + return; // Print task cancelled by user (state reset in abort()) + } + + renderProgress(); + if (++index < canvases.length) { + var canvas = canvases[index]; + if (typeof canvas.mozPrintCallback === 'function') { + canvas.mozPrintCallback({ + context: canvas.getContext('2d'), + abort: abort, + done: next + }); + } else { + next(); + } + } else { + renderProgress(); + print.call(window); + setTimeout(abort, 20); // Tidy-up + } + } + + function abort() { + if (canvases) { + canvases = null; + renderProgress(); + dispatchEvent('afterprint'); + } + } + + function renderProgress() { + var progressContainer = document.getElementById('mozPrintCallback-shim'); + if (canvases) { + var progress = Math.round(100 * index / canvases.length); + var progressBar = progressContainer.querySelector('progress'); + var progressPerc = progressContainer.querySelector('.relative-progress'); + progressBar.value = progress; + progressPerc.textContent = progress + '%'; + progressContainer.removeAttribute('hidden'); + progressContainer.onclick = abort; + } else { + progressContainer.setAttribute('hidden', ''); + } + } + + var hasAttachEvent = !!document.attachEvent; + + window.addEventListener('keydown', function(event) { + // Intercept Cmd/Ctrl + P in all browsers. + // Also intercept Cmd/Ctrl + Shift + P in Chrome and Opera + if (event.keyCode === 80/*P*/ && (event.ctrlKey || event.metaKey) && + !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { + window.print(); + if (hasAttachEvent) { + // Only attachEvent can cancel Ctrl + P dialog in IE <=10 + // attachEvent is gone in IE11, so the dialog will re-appear in IE11. + return; + } + event.preventDefault(); + if (event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } else { + event.stopPropagation(); + } + return; + } + if (event.keyCode === 27 && canvases) { // Esc + abort(); + } + }, true); + if (hasAttachEvent) { + document.attachEvent('onkeydown', function(event) { + event = event || window.event; + if (event.keyCode === 80/*P*/ && event.ctrlKey) { + event.keyCode = 0; + return false; + } + }); + } + + if ('onbeforeprint' in window) { + // Do not propagate before/afterprint events when they are not triggered + // from within this polyfill. (FF/IE). + var stopPropagationIfNeeded = function(event) { + if (event.detail !== 'custom' && event.stopImmediatePropagation) { + event.stopImmediatePropagation(); + } + }; + window.addEventListener('beforeprint', stopPropagationIfNeeded, false); + window.addEventListener('afterprint', stopPropagationIfNeeded, false); + } +})(); + + + +var DownloadManager = (function DownloadManagerClosure() { + + function download(blobUrl, filename) { + var a = document.createElement('a'); + if (a.click) { + // Use a.click() if available. Otherwise, Chrome might show + // "Unsafe JavaScript attempt to initiate a navigation change + // for frame with URL" and not open the PDF at all. + // Supported by (not mentioned = untested): + // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click) + // - Chrome 19 - 26 (18- does not support a.click) + // - Opera 9 - 12.15 + // - Internet Explorer 6 - 10 + // - Safari 6 (5.1- does not support a.click) + a.href = blobUrl; + a.target = '_parent'; + // Use a.download if available. This increases the likelihood that + // the file is downloaded instead of opened by another PDF plugin. + if ('download' in a) { + a.download = filename; + } + // must be in the document for IE and recent Firefox versions. + // (otherwise .click() is ignored) + (document.body || document.documentElement).appendChild(a); + a.click(); + a.parentNode.removeChild(a); + } else { + if (window.top === window && + blobUrl.split('#')[0] === window.location.href.split('#')[0]) { + // If _parent == self, then opening an identical URL with different + // location hash will only cause a navigation, not a download. + var padCharacter = blobUrl.indexOf('?') === -1 ? '?' : '&'; + blobUrl = blobUrl.replace(/#|$/, padCharacter + '$&'); + } + window.open(blobUrl, '_parent'); + } + } + + function DownloadManager() {} + + DownloadManager.prototype = { + downloadUrl: function DownloadManager_downloadUrl(url, filename) { + if (!PDFJS.isValidUrl(url, true)) { + return; // restricted/invalid URL + } + + download(url + '#pdfjs.action=download', filename); + }, + + downloadData: function DownloadManager_downloadData(data, filename, + contentType) { + if (navigator.msSaveBlob) { // IE10 and above + return navigator.msSaveBlob(new Blob([data], { type: contentType }), + filename); + } + + var blobUrl = PDFJS.createObjectURL(data, contentType); + download(blobUrl, filename); + }, + + download: function DownloadManager_download(blob, url, filename) { + if (!URL) { + // URL.createObjectURL is not supported + this.downloadUrl(url, filename); + return; + } + + if (navigator.msSaveBlob) { + // IE10 / IE11 + if (!navigator.msSaveBlob(blob, filename)) { + this.downloadUrl(url, filename); + } + return; + } + + var blobUrl = URL.createObjectURL(blob); + download(blobUrl, filename); + } + }; + + return DownloadManager; +})(); + + + + + +/** + * View History - This is a utility for saving various view parameters for + * recently opened files. + * + * The way that the view parameters are stored depends on how PDF.js is built, + * for 'node make ' the following cases exist: + * - FIREFOX or MOZCENTRAL - uses sessionStorage. + * - B2G - uses asyncStorage. + * - GENERIC or CHROME - uses localStorage, if it is available. + */ +var ViewHistory = (function ViewHistoryClosure() { + function ViewHistory(fingerprint) { + this.fingerprint = fingerprint; + this.isInitializedPromiseResolved = false; + this.initializedPromise = + this._readFromStorage().then(function (databaseStr) { + this.isInitializedPromiseResolved = true; + + var database = JSON.parse(databaseStr || '{}'); + if (!('files' in database)) { + database.files = []; + } + if (database.files.length >= VIEW_HISTORY_MEMORY) { + database.files.shift(); + } + var index; + for (var i = 0, length = database.files.length; i < length; i++) { + var branch = database.files[i]; + if (branch.fingerprint === this.fingerprint) { + index = i; + break; + } + } + if (typeof index !== 'number') { + index = database.files.push({fingerprint: this.fingerprint}) - 1; + } + this.file = database.files[index]; + this.database = database; + }.bind(this)); + } + + ViewHistory.prototype = { + _writeToStorage: function ViewHistory_writeToStorage() { + return new Promise(function (resolve) { + var databaseStr = JSON.stringify(this.database); + + + + localStorage.setItem('database', databaseStr); + resolve(); + }.bind(this)); + }, + + _readFromStorage: function ViewHistory_readFromStorage() { + return new Promise(function (resolve) { + + + resolve(localStorage.getItem('database')); + }); + }, + + set: function ViewHistory_set(name, val) { + if (!this.isInitializedPromiseResolved) { + return; + } + this.file[name] = val; + return this._writeToStorage(); + }, + + setMultiple: function ViewHistory_setMultiple(properties) { + if (!this.isInitializedPromiseResolved) { + return; + } + for (var name in properties) { + this.file[name] = properties[name]; + } + return this._writeToStorage(); + }, + + get: function ViewHistory_get(name, defaultValue) { + if (!this.isInitializedPromiseResolved) { + return defaultValue; + } + return this.file[name] || defaultValue; + } + }; + + return ViewHistory; +})(); + + +/** + * Creates a "search bar" given a set of DOM elements that act as controls + * for searching or for setting search preferences in the UI. This object + * also sets up the appropriate events for the controls. Actual searching + * is done by PDFFindController. + */ +var PDFFindBar = (function PDFFindBarClosure() { + function PDFFindBar(options) { + this.opened = false; + this.bar = options.bar || null; + this.toggleButton = options.toggleButton || null; + this.findField = options.findField || null; + this.highlightAll = options.highlightAllCheckbox || null; + this.caseSensitive = options.caseSensitiveCheckbox || null; + this.findMsg = options.findMsg || null; + this.findStatusIcon = options.findStatusIcon || null; + this.findPreviousButton = options.findPreviousButton || null; + this.findNextButton = options.findNextButton || null; + this.findController = options.findController || null; + + if (this.findController === null) { + throw new Error('PDFFindBar cannot be used without a ' + + 'PDFFindController instance.'); + } + + // Add event listeners to the DOM elements. + var self = this; + this.toggleButton.addEventListener('click', function() { + self.toggle(); + }); + + this.findField.addEventListener('input', function() { + self.dispatchEvent(''); + }); + + this.bar.addEventListener('keydown', function(evt) { + switch (evt.keyCode) { + case 13: // Enter + if (evt.target === self.findField) { + self.dispatchEvent('again', evt.shiftKey); + } + break; + case 27: // Escape + self.close(); + break; + } + }); + + this.findPreviousButton.addEventListener('click', function() { + self.dispatchEvent('again', true); + }); + + this.findNextButton.addEventListener('click', function() { + self.dispatchEvent('again', false); + }); + + this.highlightAll.addEventListener('click', function() { + self.dispatchEvent('highlightallchange'); + }); + + this.caseSensitive.addEventListener('click', function() { + self.dispatchEvent('casesensitivitychange'); + }); + } + + PDFFindBar.prototype = { + dispatchEvent: function PDFFindBar_dispatchEvent(type, findPrev) { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('find' + type, true, true, { + query: this.findField.value, + caseSensitive: this.caseSensitive.checked, + highlightAll: this.highlightAll.checked, + findPrevious: findPrev + }); + return window.dispatchEvent(event); + }, + + updateUIState: function PDFFindBar_updateUIState(state, previous) { + var notFound = false; + var findMsg = ''; + var status = ''; + + switch (state) { + case FindStates.FIND_FOUND: + break; + + case FindStates.FIND_PENDING: + status = 'pending'; + break; + + case FindStates.FIND_NOTFOUND: + findMsg = mozL10n.get('find_not_found', null, 'Phrase not found'); + notFound = true; + break; + + case FindStates.FIND_WRAPPED: + if (previous) { + findMsg = mozL10n.get('find_reached_top', null, + 'Reached top of document, continued from bottom'); + } else { + findMsg = mozL10n.get('find_reached_bottom', null, + 'Reached end of document, continued from top'); + } + break; + } + + if (notFound) { + this.findField.classList.add('notFound'); + } else { + this.findField.classList.remove('notFound'); + } + + this.findField.setAttribute('data-status', status); + this.findMsg.textContent = findMsg; + }, + + open: function PDFFindBar_open() { + if (!this.opened) { + this.opened = true; + this.toggleButton.classList.add('toggled'); + this.bar.classList.remove('hidden'); + } + this.findField.select(); + this.findField.focus(); + }, + + close: function PDFFindBar_close() { + if (!this.opened) { + return; + } + this.opened = false; + this.toggleButton.classList.remove('toggled'); + this.bar.classList.add('hidden'); + this.findController.active = false; + }, + + toggle: function PDFFindBar_toggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } + }; + return PDFFindBar; +})(); + + +var FindStates = { + FIND_FOUND: 0, + FIND_NOTFOUND: 1, + FIND_WRAPPED: 2, + FIND_PENDING: 3 +}; + +var FIND_SCROLL_OFFSET_TOP = -50; +var FIND_SCROLL_OFFSET_LEFT = -400; + +/** + * Provides "search" or "find" functionality for the PDF. + * This object actually performs the search for a given string. + */ +var PDFFindController = (function PDFFindControllerClosure() { + function PDFFindController(options) { + this.startedTextExtraction = false; + this.extractTextPromises = []; + this.pendingFindMatches = {}; + this.active = false; // If active, find results will be highlighted. + this.pageContents = []; // Stores the text for each page. + this.pageMatches = []; + this.selected = { // Currently selected match. + pageIdx: -1, + matchIdx: -1 + }; + this.offset = { // Where the find algorithm currently is in the document. + pageIdx: null, + matchIdx: null + }; + this.pagesToSearch = null; + this.resumePageIdx = null; + this.state = null; + this.dirtyMatch = false; + this.findTimeout = null; + this.pdfViewer = options.pdfViewer || null; + this.integratedFind = options.integratedFind || false; + this.charactersToNormalize = { + '\u2018': '\'', // Left single quotation mark + '\u2019': '\'', // Right single quotation mark + '\u201A': '\'', // Single low-9 quotation mark + '\u201B': '\'', // Single high-reversed-9 quotation mark + '\u201C': '"', // Left double quotation mark + '\u201D': '"', // Right double quotation mark + '\u201E': '"', // Double low-9 quotation mark + '\u201F': '"', // Double high-reversed-9 quotation mark + '\u00BC': '1/4', // Vulgar fraction one quarter + '\u00BD': '1/2', // Vulgar fraction one half + '\u00BE': '3/4', // Vulgar fraction three quarters + '\u00A0': ' ' // No-break space + }; + this.findBar = options.findBar || null; + + // Compile the regular expression for text normalization once + var replace = Object.keys(this.charactersToNormalize).join(''); + this.normalizationRegex = new RegExp('[' + replace + ']', 'g'); + + var events = [ + 'find', + 'findagain', + 'findhighlightallchange', + 'findcasesensitivitychange' + ]; + + this.firstPagePromise = new Promise(function (resolve) { + this.resolveFirstPage = resolve; + }.bind(this)); + this.handleEvent = this.handleEvent.bind(this); + + for (var i = 0, len = events.length; i < len; i++) { + window.addEventListener(events[i], this.handleEvent); + } + } + + PDFFindController.prototype = { + setFindBar: function PDFFindController_setFindBar(findBar) { + this.findBar = findBar; + }, + + reset: function PDFFindController_reset() { + this.startedTextExtraction = false; + this.extractTextPromises = []; + this.active = false; + }, + + normalize: function PDFFindController_normalize(text) { + var self = this; + return text.replace(this.normalizationRegex, function (ch) { + return self.charactersToNormalize[ch]; + }); + }, + + calcFindMatch: function PDFFindController_calcFindMatch(pageIndex) { + var pageContent = this.normalize(this.pageContents[pageIndex]); + var query = this.normalize(this.state.query); + var caseSensitive = this.state.caseSensitive; + var queryLen = query.length; + + if (queryLen === 0) { + return; // Do nothing: the matches should be wiped out already. + } + + if (!caseSensitive) { + pageContent = pageContent.toLowerCase(); + query = query.toLowerCase(); + } + + var matches = []; + var matchIdx = -queryLen; + while (true) { + matchIdx = pageContent.indexOf(query, matchIdx + queryLen); + if (matchIdx === -1) { + break; + } + matches.push(matchIdx); + } + this.pageMatches[pageIndex] = matches; + this.updatePage(pageIndex); + if (this.resumePageIdx === pageIndex) { + this.resumePageIdx = null; + this.nextPageMatch(); + } + }, + + extractText: function PDFFindController_extractText() { + if (this.startedTextExtraction) { + return; + } + this.startedTextExtraction = true; + + this.pageContents = []; + var extractTextPromisesResolves = []; + var numPages = this.pdfViewer.pagesCount; + for (var i = 0; i < numPages; i++) { + this.extractTextPromises.push(new Promise(function (resolve) { + extractTextPromisesResolves.push(resolve); + })); + } + + var self = this; + function extractPageText(pageIndex) { + self.pdfViewer.getPageTextContent(pageIndex).then( + function textContentResolved(textContent) { + var textItems = textContent.items; + var str = []; + + for (var i = 0, len = textItems.length; i < len; i++) { + str.push(textItems[i].str); + } + + // Store the pageContent as a string. + self.pageContents.push(str.join('')); + + extractTextPromisesResolves[pageIndex](pageIndex); + if ((pageIndex + 1) < self.pdfViewer.pagesCount) { + extractPageText(pageIndex + 1); + } + } + ); + } + extractPageText(0); + }, + + handleEvent: function PDFFindController_handleEvent(e) { + if (this.state === null || e.type !== 'findagain') { + this.dirtyMatch = true; + } + this.state = e.detail; + this.updateUIState(FindStates.FIND_PENDING); + + this.firstPagePromise.then(function() { + this.extractText(); + + clearTimeout(this.findTimeout); + if (e.type === 'find') { + // Only trigger the find action after 250ms of silence. + this.findTimeout = setTimeout(this.nextMatch.bind(this), 250); + } else { + this.nextMatch(); + } + }.bind(this)); + }, + + updatePage: function PDFFindController_updatePage(index) { + if (this.selected.pageIdx === index) { + // If the page is selected, scroll the page into view, which triggers + // rendering the page, which adds the textLayer. Once the textLayer is + // build, it will scroll onto the selected match. + this.pdfViewer.scrollPageIntoView(index + 1); + } + + var page = this.pdfViewer.getPageView(index); + if (page.textLayer) { + page.textLayer.updateMatches(); + } + }, + + nextMatch: function PDFFindController_nextMatch() { + var previous = this.state.findPrevious; + var currentPageIndex = this.pdfViewer.currentPageNumber - 1; + var numPages = this.pdfViewer.pagesCount; + + this.active = true; + + if (this.dirtyMatch) { + // Need to recalculate the matches, reset everything. + this.dirtyMatch = false; + this.selected.pageIdx = this.selected.matchIdx = -1; + this.offset.pageIdx = currentPageIndex; + this.offset.matchIdx = null; + this.hadMatch = false; + this.resumePageIdx = null; + this.pageMatches = []; + var self = this; + + for (var i = 0; i < numPages; i++) { + // Wipe out any previous highlighted matches. + this.updatePage(i); + + // As soon as the text is extracted start finding the matches. + if (!(i in this.pendingFindMatches)) { + this.pendingFindMatches[i] = true; + this.extractTextPromises[i].then(function(pageIdx) { + delete self.pendingFindMatches[pageIdx]; + self.calcFindMatch(pageIdx); + }); + } + } + } + + // If there's no query there's no point in searching. + if (this.state.query === '') { + this.updateUIState(FindStates.FIND_FOUND); + return; + } + + // If we're waiting on a page, we return since we can't do anything else. + if (this.resumePageIdx) { + return; + } + + var offset = this.offset; + // Keep track of how many pages we should maximally iterate through. + this.pagesToSearch = numPages; + // If there's already a matchIdx that means we are iterating through a + // page's matches. + if (offset.matchIdx !== null) { + var numPageMatches = this.pageMatches[offset.pageIdx].length; + if ((!previous && offset.matchIdx + 1 < numPageMatches) || + (previous && offset.matchIdx > 0)) { + // The simple case; we just have advance the matchIdx to select + // the next match on the page. + this.hadMatch = true; + offset.matchIdx = (previous ? offset.matchIdx - 1 : + offset.matchIdx + 1); + this.updateMatch(true); + return; + } + // We went beyond the current page's matches, so we advance to + // the next page. + this.advanceOffsetPage(previous); + } + // Start searching through the page. + this.nextPageMatch(); + }, + + matchesReady: function PDFFindController_matchesReady(matches) { + var offset = this.offset; + var numMatches = matches.length; + var previous = this.state.findPrevious; + + if (numMatches) { + // There were matches for the page, so initialize the matchIdx. + this.hadMatch = true; + offset.matchIdx = (previous ? numMatches - 1 : 0); + this.updateMatch(true); + return true; + } else { + // No matches, so attempt to search the next page. + this.advanceOffsetPage(previous); + if (offset.wrapped) { + offset.matchIdx = null; + if (this.pagesToSearch < 0) { + // No point in wrapping again, there were no matches. + this.updateMatch(false); + // while matches were not found, searching for a page + // with matches should nevertheless halt. + return true; + } + } + // Matches were not found (and searching is not done). + return false; + } + }, + + /** + * The method is called back from the text layer when match presentation + * is updated. + * @param {number} pageIndex - page index. + * @param {number} index - match index. + * @param {Array} elements - text layer div elements array. + * @param {number} beginIdx - start index of the div array for the match. + * @param {number} endIdx - end index of the div array for the match. + */ + updateMatchPosition: function PDFFindController_updateMatchPosition( + pageIndex, index, elements, beginIdx, endIdx) { + if (this.selected.matchIdx === index && + this.selected.pageIdx === pageIndex) { + scrollIntoView(elements[beginIdx], { + top: FIND_SCROLL_OFFSET_TOP, + left: FIND_SCROLL_OFFSET_LEFT + }); + } + }, + + nextPageMatch: function PDFFindController_nextPageMatch() { + if (this.resumePageIdx !== null) { + console.error('There can only be one pending page.'); + } + do { + var pageIdx = this.offset.pageIdx; + var matches = this.pageMatches[pageIdx]; + if (!matches) { + // The matches don't exist yet for processing by "matchesReady", + // so set a resume point for when they do exist. + this.resumePageIdx = pageIdx; + break; + } + } while (!this.matchesReady(matches)); + }, + + advanceOffsetPage: function PDFFindController_advanceOffsetPage(previous) { + var offset = this.offset; + var numPages = this.extractTextPromises.length; + offset.pageIdx = (previous ? offset.pageIdx - 1 : offset.pageIdx + 1); + offset.matchIdx = null; + + this.pagesToSearch--; + + if (offset.pageIdx >= numPages || offset.pageIdx < 0) { + offset.pageIdx = (previous ? numPages - 1 : 0); + offset.wrapped = true; + } + }, + + updateMatch: function PDFFindController_updateMatch(found) { + var state = FindStates.FIND_NOTFOUND; + var wrapped = this.offset.wrapped; + this.offset.wrapped = false; + + if (found) { + var previousPage = this.selected.pageIdx; + this.selected.pageIdx = this.offset.pageIdx; + this.selected.matchIdx = this.offset.matchIdx; + state = (wrapped ? FindStates.FIND_WRAPPED : FindStates.FIND_FOUND); + // Update the currently selected page to wipe out any selected matches. + if (previousPage !== -1 && previousPage !== this.selected.pageIdx) { + this.updatePage(previousPage); + } + } + + this.updateUIState(state, this.state.findPrevious); + if (this.selected.pageIdx !== -1) { + this.updatePage(this.selected.pageIdx); + } + }, + + updateUIState: function PDFFindController_updateUIState(state, previous) { + if (this.integratedFind) { + FirefoxCom.request('updateFindControlState', + { result: state, findPrevious: previous }); + return; + } + if (this.findBar === null) { + throw new Error('PDFFindController is not initialized with a ' + + 'PDFFindBar instance.'); + } + this.findBar.updateUIState(state, previous); + } + }; + return PDFFindController; +})(); + + +var PDFHistory = { + initialized: false, + initialDestination: null, + + /** + * @param {string} fingerprint + * @param {IPDFLinkService} linkService + */ + initialize: function pdfHistoryInitialize(fingerprint, linkService) { + this.initialized = true; + this.reInitialized = false; + this.allowHashChange = true; + this.historyUnlocked = true; + this.isViewerInPresentationMode = false; + + this.previousHash = window.location.hash.substring(1); + this.currentBookmark = ''; + this.currentPage = 0; + this.updatePreviousBookmark = false; + this.previousBookmark = ''; + this.previousPage = 0; + this.nextHashParam = ''; + + this.fingerprint = fingerprint; + this.linkService = linkService; + this.currentUid = this.uid = 0; + this.current = {}; + + var state = window.history.state; + if (this._isStateObjectDefined(state)) { + // This corresponds to navigating back to the document + // from another page in the browser history. + if (state.target.dest) { + this.initialDestination = state.target.dest; + } else { + linkService.setHash(state.target.hash); + } + this.currentUid = state.uid; + this.uid = state.uid + 1; + this.current = state.target; + } else { + // This corresponds to the loading of a new document. + if (state && state.fingerprint && + this.fingerprint !== state.fingerprint) { + // Reinitialize the browsing history when a new document + // is opened in the web viewer. + this.reInitialized = true; + } + this._pushOrReplaceState({ fingerprint: this.fingerprint }, true); + } + + var self = this; + window.addEventListener('popstate', function pdfHistoryPopstate(evt) { + evt.preventDefault(); + evt.stopPropagation(); + + if (!self.historyUnlocked) { + return; + } + if (evt.state) { + // Move back/forward in the history. + self._goTo(evt.state); + } else { + // Handle the user modifying the hash of a loaded document. + self.previousHash = window.location.hash.substring(1); + + // If the history is empty when the hash changes, + // update the previous entry in the browser history. + if (self.uid === 0) { + var previousParams = (self.previousHash && self.currentBookmark && + self.previousHash !== self.currentBookmark) ? + { hash: self.currentBookmark, page: self.currentPage } : + { page: 1 }; + self.historyUnlocked = false; + self.allowHashChange = false; + window.history.back(); + self._pushToHistory(previousParams, false, true); + window.history.forward(); + self.historyUnlocked = true; + } + self._pushToHistory({ hash: self.previousHash }, false, true); + self._updatePreviousBookmark(); + } + }, false); + + function pdfHistoryBeforeUnload() { + var previousParams = self._getPreviousParams(null, true); + if (previousParams) { + var replacePrevious = (!self.current.dest && + self.current.hash !== self.previousHash); + self._pushToHistory(previousParams, false, replacePrevious); + self._updatePreviousBookmark(); + } + // Remove the event listener when navigating away from the document, + // since 'beforeunload' prevents Firefox from caching the document. + window.removeEventListener('beforeunload', pdfHistoryBeforeUnload, false); + } + window.addEventListener('beforeunload', pdfHistoryBeforeUnload, false); + + window.addEventListener('pageshow', function pdfHistoryPageShow(evt) { + // If the entire viewer (including the PDF file) is cached in the browser, + // we need to reattach the 'beforeunload' event listener since + // the 'DOMContentLoaded' event is not fired on 'pageshow'. + window.addEventListener('beforeunload', pdfHistoryBeforeUnload, false); + }, false); + + window.addEventListener('presentationmodechanged', function(e) { + self.isViewerInPresentationMode = !!e.detail.active; + }); + }, + + _isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) { + return (state && state.uid >= 0 && + state.fingerprint && this.fingerprint === state.fingerprint && + state.target && state.target.hash) ? true : false; + }, + + _pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj, + replace) { + if (replace) { + window.history.replaceState(stateObj, '', document.URL); + } else { + window.history.pushState(stateObj, '', document.URL); + } + }, + + get isHashChangeUnlocked() { + if (!this.initialized) { + return true; + } + // If the current hash changes when moving back/forward in the history, + // this will trigger a 'popstate' event *as well* as a 'hashchange' event. + // Since the hash generally won't correspond to the exact the position + // stored in the history's state object, triggering the 'hashchange' event + // can thus corrupt the browser history. + // + // When the hash changes during a 'popstate' event, we *only* prevent the + // first 'hashchange' event and immediately reset allowHashChange. + // If it is not reset, the user would not be able to change the hash. + + var temp = this.allowHashChange; + this.allowHashChange = true; + return temp; + }, + + _updatePreviousBookmark: function pdfHistory_updatePreviousBookmark() { + if (this.updatePreviousBookmark && + this.currentBookmark && this.currentPage) { + this.previousBookmark = this.currentBookmark; + this.previousPage = this.currentPage; + this.updatePreviousBookmark = false; + } + }, + + updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark, + pageNum) { + if (this.initialized) { + this.currentBookmark = bookmark.substring(1); + this.currentPage = pageNum | 0; + this._updatePreviousBookmark(); + } + }, + + updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) { + if (this.initialized) { + this.nextHashParam = param; + } + }, + + push: function pdfHistoryPush(params, isInitialBookmark) { + if (!(this.initialized && this.historyUnlocked)) { + return; + } + if (params.dest && !params.hash) { + params.hash = (this.current.hash && this.current.dest && + this.current.dest === params.dest) ? + this.current.hash : + this.linkService.getDestinationHash(params.dest).split('#')[1]; + } + if (params.page) { + params.page |= 0; + } + if (isInitialBookmark) { + var target = window.history.state.target; + if (!target) { + // Invoked when the user specifies an initial bookmark, + // thus setting initialBookmark, when the document is loaded. + this._pushToHistory(params, false); + this.previousHash = window.location.hash.substring(1); + } + this.updatePreviousBookmark = this.nextHashParam ? false : true; + if (target) { + // If the current document is reloaded, + // avoid creating duplicate entries in the history. + this._updatePreviousBookmark(); + } + return; + } + if (this.nextHashParam) { + if (this.nextHashParam === params.hash) { + this.nextHashParam = null; + this.updatePreviousBookmark = true; + return; + } else { + this.nextHashParam = null; + } + } + + if (params.hash) { + if (this.current.hash) { + if (this.current.hash !== params.hash) { + this._pushToHistory(params, true); + } else { + if (!this.current.page && params.page) { + this._pushToHistory(params, false, true); + } + this.updatePreviousBookmark = true; + } + } else { + this._pushToHistory(params, true); + } + } else if (this.current.page && params.page && + this.current.page !== params.page) { + this._pushToHistory(params, true); + } + }, + + _getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage, + beforeUnload) { + if (!(this.currentBookmark && this.currentPage)) { + return null; + } else if (this.updatePreviousBookmark) { + this.updatePreviousBookmark = false; + } + if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) { + // Prevent the history from getting stuck in the current state, + // effectively preventing the user from going back/forward in the history. + // + // This happens if the current position in the document didn't change when + // the history was previously updated. The reasons for this are either: + // 1. The current zoom value is such that the document does not need to, + // or cannot, be scrolled to display the destination. + // 2. The previous destination is broken, and doesn't actally point to a + // position within the document. + // (This is either due to a bad PDF generator, or the user making a + // mistake when entering a destination in the hash parameters.) + return null; + } + if ((!this.current.dest && !onlyCheckPage) || beforeUnload) { + if (this.previousBookmark === this.currentBookmark) { + return null; + } + } else if (this.current.page || onlyCheckPage) { + if (this.previousPage === this.currentPage) { + return null; + } + } else { + return null; + } + var params = { hash: this.currentBookmark, page: this.currentPage }; + if (this.isViewerInPresentationMode) { + params.hash = null; + } + return params; + }, + + _stateObj: function pdfHistory_stateObj(params) { + return { fingerprint: this.fingerprint, uid: this.uid, target: params }; + }, + + _pushToHistory: function pdfHistory_pushToHistory(params, + addPrevious, overwrite) { + if (!this.initialized) { + return; + } + if (!params.hash && params.page) { + params.hash = ('page=' + params.page); + } + if (addPrevious && !overwrite) { + var previousParams = this._getPreviousParams(); + if (previousParams) { + var replacePrevious = (!this.current.dest && + this.current.hash !== this.previousHash); + this._pushToHistory(previousParams, false, replacePrevious); + } + } + this._pushOrReplaceState(this._stateObj(params), + (overwrite || this.uid === 0)); + this.currentUid = this.uid++; + this.current = params; + this.updatePreviousBookmark = true; + }, + + _goTo: function pdfHistory_goTo(state) { + if (!(this.initialized && this.historyUnlocked && + this._isStateObjectDefined(state))) { + return; + } + if (!this.reInitialized && state.uid < this.currentUid) { + var previousParams = this._getPreviousParams(true); + if (previousParams) { + this._pushToHistory(this.current, false); + this._pushToHistory(previousParams, false); + this.currentUid = state.uid; + window.history.back(); + return; + } + } + this.historyUnlocked = false; + + if (state.target.dest) { + this.linkService.navigateTo(state.target.dest); + } else { + this.linkService.setHash(state.target.hash); + } + this.currentUid = state.uid; + if (state.uid > this.uid) { + this.uid = state.uid; + } + this.current = state.target; + this.updatePreviousBookmark = true; + + var currentHash = window.location.hash.substring(1); + if (this.previousHash !== currentHash) { + this.allowHashChange = false; + } + this.previousHash = currentHash; + + this.historyUnlocked = true; + }, + + back: function pdfHistoryBack() { + this.go(-1); + }, + + forward: function pdfHistoryForward() { + this.go(1); + }, + + go: function pdfHistoryGo(direction) { + if (this.initialized && this.historyUnlocked) { + var state = window.history.state; + if (direction === -1 && state && state.uid > 0) { + window.history.back(); + } else if (direction === 1 && state && state.uid < (this.uid - 1)) { + window.history.forward(); + } + } + } +}; + + +var SecondaryToolbar = { + opened: false, + previousContainerHeight: null, + newContainerHeight: null, + + initialize: function secondaryToolbarInitialize(options) { + this.toolbar = options.toolbar; + this.buttonContainer = this.toolbar.firstElementChild; + + // Define the toolbar buttons. + this.toggleButton = options.toggleButton; + this.presentationModeButton = options.presentationModeButton; + this.openFile = options.openFile; + this.print = options.print; + this.download = options.download; + this.viewBookmark = options.viewBookmark; + this.firstPage = options.firstPage; + this.lastPage = options.lastPage; + this.pageRotateCw = options.pageRotateCw; + this.pageRotateCcw = options.pageRotateCcw; + this.documentPropertiesButton = options.documentPropertiesButton; + + // Attach the event listeners. + var elements = [ + // Button to toggle the visibility of the secondary toolbar: + { element: this.toggleButton, handler: this.toggle }, + // All items within the secondary toolbar + // (except for toggleHandTool, hand_tool.js is responsible for it): + { element: this.presentationModeButton, + handler: this.presentationModeClick }, + { element: this.openFile, handler: this.openFileClick }, + { element: this.print, handler: this.printClick }, + { element: this.download, handler: this.downloadClick }, + { element: this.viewBookmark, handler: this.viewBookmarkClick }, + { element: this.firstPage, handler: this.firstPageClick }, + { element: this.lastPage, handler: this.lastPageClick }, + { element: this.pageRotateCw, handler: this.pageRotateCwClick }, + { element: this.pageRotateCcw, handler: this.pageRotateCcwClick }, + { element: this.documentPropertiesButton, + handler: this.documentPropertiesClick } + ]; + + for (var item in elements) { + var element = elements[item].element; + if (element) { + element.addEventListener('click', elements[item].handler.bind(this)); + } + } + }, + + // Event handling functions. + presentationModeClick: function secondaryToolbarPresentationModeClick(evt) { + PDFViewerApplication.requestPresentationMode(); + this.close(); + }, + + openFileClick: function secondaryToolbarOpenFileClick(evt) { + document.getElementById('fileInput').click(); + this.close(); + }, + + printClick: function secondaryToolbarPrintClick(evt) { + window.print(); + this.close(); + }, + + downloadClick: function secondaryToolbarDownloadClick(evt) { + PDFViewerApplication.download(); + this.close(); + }, + + viewBookmarkClick: function secondaryToolbarViewBookmarkClick(evt) { + this.close(); + }, + + firstPageClick: function secondaryToolbarFirstPageClick(evt) { + PDFViewerApplication.page = 1; + this.close(); + }, + + lastPageClick: function secondaryToolbarLastPageClick(evt) { + if (PDFViewerApplication.pdfDocument) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + } + this.close(); + }, + + pageRotateCwClick: function secondaryToolbarPageRotateCwClick(evt) { + PDFViewerApplication.rotatePages(90); + }, + + pageRotateCcwClick: function secondaryToolbarPageRotateCcwClick(evt) { + PDFViewerApplication.rotatePages(-90); + }, + + documentPropertiesClick: function secondaryToolbarDocumentPropsClick(evt) { + PDFViewerApplication.pdfDocumentProperties.open(); + this.close(); + }, + + // Misc. functions for interacting with the toolbar. + setMaxHeight: function secondaryToolbarSetMaxHeight(container) { + if (!container || !this.buttonContainer) { + return; + } + this.newContainerHeight = container.clientHeight; + if (this.previousContainerHeight === this.newContainerHeight) { + return; + } + this.buttonContainer.setAttribute('style', + 'max-height: ' + (this.newContainerHeight - SCROLLBAR_PADDING) + 'px;'); + this.previousContainerHeight = this.newContainerHeight; + }, + + open: function secondaryToolbarOpen() { + if (this.opened) { + return; + } + this.opened = true; + this.toggleButton.classList.add('toggled'); + this.toolbar.classList.remove('hidden'); + }, + + close: function secondaryToolbarClose(target) { + if (!this.opened) { + return; + } else if (target && !this.toolbar.contains(target)) { + return; + } + this.opened = false; + this.toolbar.classList.add('hidden'); + this.toggleButton.classList.remove('toggled'); + }, + + toggle: function secondaryToolbarToggle() { + if (this.opened) { + this.close(); + } else { + this.open(); + } + } +}; + + +var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; // in ms +var DELAY_BEFORE_HIDING_CONTROLS = 3000; // in ms +var ACTIVE_SELECTOR = 'pdfPresentationMode'; +var CONTROLS_SELECTOR = 'pdfPresentationModeControls'; + +/** + * @typedef {Object} PDFPresentationModeOptions + * @property {HTMLDivElement} container - The container for the viewer element. + * @property {HTMLDivElement} viewer - (optional) The viewer element. + * @property {PDFThumbnailViewer} pdfThumbnailViewer - (optional) The thumbnail + * viewer. + * @property {Array} contextMenuItems - (optional) The menuitems that are added + * to the context menu in Presentation Mode. + */ + +/** + * @class + */ +var PDFPresentationMode = (function PDFPresentationModeClosure() { + /** + * @constructs PDFPresentationMode + * @param {PDFPresentationModeOptions} options + */ + function PDFPresentationMode(options) { + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + this.pdfThumbnailViewer = options.pdfThumbnailViewer || null; + var contextMenuItems = options.contextMenuItems || null; + + this.active = false; + this.args = null; + this.contextMenuOpen = false; + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + + if (contextMenuItems) { + for (var i = 0, ii = contextMenuItems.length; i < ii; i++) { + var item = contextMenuItems[i]; + item.element.addEventListener('click', function (handler) { + this.contextMenuOpen = false; + handler(); + }.bind(this, item.handler)); + } + } + } + + PDFPresentationMode.prototype = { + /** + * Request the browser to enter fullscreen mode. + * @returns {boolean} Indicating if the request was successful. + */ + request: function PDFPresentationMode_request() { + if (this.switchInProgress || this.active || + !this.viewer.hasChildNodes()) { + return false; + } + this._addFullscreenChangeListeners(); + this._setSwitchInProgress(); + this._notifyStateChange(); + + if (this.container.requestFullscreen) { + this.container.requestFullscreen(); + } else if (this.container.mozRequestFullScreen) { + this.container.mozRequestFullScreen(); + } else if (this.container.webkitRequestFullscreen) { + this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); + } else if (this.container.msRequestFullscreen) { + this.container.msRequestFullscreen(); + } else { + return false; + } + + this.args = { + page: PDFViewerApplication.page, + previousScale: PDFViewerApplication.currentScaleValue + }; + + return true; + }, + + /** + * Switches page when the user scrolls (using a scroll wheel or a touchpad) + * with large enough motion, to prevent accidental page switches. + * @param {number} delta - The delta value from the mouse event. + */ + mouseScroll: function PDFPresentationMode_mouseScroll(delta) { + if (!this.active) { + return; + } + var MOUSE_SCROLL_COOLDOWN_TIME = 50; + var PAGE_SWITCH_THRESHOLD = 120; + var PageSwitchDirection = { + UP: -1, + DOWN: 1 + }; + + var currentTime = (new Date()).getTime(); + var storedTime = this.mouseScrollTimeStamp; + + // If we've already switched page, avoid accidentally switching again. + if (currentTime > storedTime && + currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { + return; + } + // If the scroll direction changed, reset the accumulated scroll delta. + if ((this.mouseScrollDelta > 0 && delta < 0) || + (this.mouseScrollDelta < 0 && delta > 0)) { + this._resetMouseScrollState(); + } + this.mouseScrollDelta += delta; + + if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { + var pageSwitchDirection = (this.mouseScrollDelta > 0) ? + PageSwitchDirection.UP : PageSwitchDirection.DOWN; + var page = PDFViewerApplication.page; + this._resetMouseScrollState(); + + // If we're at the first/last page, we don't need to do anything. + if ((page === 1 && pageSwitchDirection === PageSwitchDirection.UP) || + (page === PDFViewerApplication.pagesCount && + pageSwitchDirection === PageSwitchDirection.DOWN)) { + return; + } + PDFViewerApplication.page = (page + pageSwitchDirection); + this.mouseScrollTimeStamp = currentTime; + } + }, + + get isFullscreen() { + return !!(document.fullscreenElement || + document.mozFullScreen || + document.webkitIsFullScreen || + document.msFullscreenElement); + }, + + /** + * @private + */ + _notifyStateChange: function PDFPresentationMode_notifyStateChange() { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('presentationmodechanged', true, true, { + active: this.active, + switchInProgress: !!this.switchInProgress + }); + window.dispatchEvent(event); + }, + + /** + * Used to initialize a timeout when requesting Presentation Mode, + * i.e. when the browser is requested to enter fullscreen mode. + * This timeout is used to prevent the current page from being scrolled + * partially, or completely, out of view when entering Presentation Mode. + * NOTE: This issue seems limited to certain zoom levels (e.g. page-width). + * @private + */ + _setSwitchInProgress: function PDFPresentationMode_setSwitchInProgress() { + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + } + this.switchInProgress = setTimeout(function switchInProgressTimeout() { + this._removeFullscreenChangeListeners(); + delete this.switchInProgress; + this._notifyStateChange(); + }.bind(this), DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS); + }, + + /** + * @private + */ + _resetSwitchInProgress: + function PDFPresentationMode_resetSwitchInProgress() { + if (this.switchInProgress) { + clearTimeout(this.switchInProgress); + delete this.switchInProgress; + } + }, + + /** + * @private + */ + _enter: function PDFPresentationMode_enter() { + this.active = true; + this._resetSwitchInProgress(); + this._notifyStateChange(); + this.container.classList.add(ACTIVE_SELECTOR); + + // Ensure that the correct page is scrolled into view when entering + // Presentation Mode, by waiting until fullscreen mode in enabled. + setTimeout(function enterPresentationModeTimeout() { + PDFViewerApplication.page = this.args.page; + PDFViewerApplication.setScale('page-fit', true); + }.bind(this), 0); + + this._addWindowListeners(); + this._showControls(); + this.contextMenuOpen = false; + this.container.setAttribute('contextmenu', 'viewerContextMenu'); + + // Text selection is disabled in Presentation Mode, thus it's not possible + // for the user to deselect text that is selected (e.g. with "Select all") + // when entering Presentation Mode, hence we remove any active selection. + window.getSelection().removeAllRanges(); + }, + + /** + * @private + */ + _exit: function PDFPresentationMode_exit() { + var page = PDFViewerApplication.page; + this.container.classList.remove(ACTIVE_SELECTOR); + + // Ensure that the correct page is scrolled into view when exiting + // Presentation Mode, by waiting until fullscreen mode is disabled. + setTimeout(function exitPresentationModeTimeout() { + this.active = false; + this._removeFullscreenChangeListeners(); + this._notifyStateChange(); + + PDFViewerApplication.setScale(this.args.previousScale, true); + PDFViewerApplication.page = page; + this.args = null; + }.bind(this), 0); + + this._removeWindowListeners(); + this._hideControls(); + this._resetMouseScrollState(); + this.container.removeAttribute('contextmenu'); + this.contextMenuOpen = false; + + if (this.pdfThumbnailViewer) { + this.pdfThumbnailViewer.ensureThumbnailVisible(page); + } + }, + + /** + * @private + */ + _mouseDown: function PDFPresentationMode_mouseDown(evt) { + if (this.contextMenuOpen) { + this.contextMenuOpen = false; + evt.preventDefault(); + return; + } + if (evt.button === 0) { + // Enable clicking of links in presentation mode. Please note: + // Only links pointing to destinations in the current PDF document work. + var isInternalLink = (evt.target.href && + evt.target.classList.contains('internalLink')); + if (!isInternalLink) { + // Unless an internal link was clicked, advance one page. + evt.preventDefault(); + PDFViewerApplication.page += (evt.shiftKey ? -1 : 1); + } + } + }, + + /** + * @private + */ + _contextMenu: function PDFPresentationMode_contextMenu() { + this.contextMenuOpen = true; + }, + + /** + * @private + */ + _showControls: function PDFPresentationMode_showControls() { + if (this.controlsTimeout) { + clearTimeout(this.controlsTimeout); + } else { + this.container.classList.add(CONTROLS_SELECTOR); + } + this.controlsTimeout = setTimeout(function showControlsTimeout() { + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }.bind(this), DELAY_BEFORE_HIDING_CONTROLS); + }, + + /** + * @private + */ + _hideControls: function PDFPresentationMode_hideControls() { + if (!this.controlsTimeout) { + return; + } + clearTimeout(this.controlsTimeout); + this.container.classList.remove(CONTROLS_SELECTOR); + delete this.controlsTimeout; + }, + + /** + * Resets the properties used for tracking mouse scrolling events. + * @private + */ + _resetMouseScrollState: + function PDFPresentationMode_resetMouseScrollState() { + this.mouseScrollTimeStamp = 0; + this.mouseScrollDelta = 0; + }, + + /** + * @private + */ + _addWindowListeners: function PDFPresentationMode_addWindowListeners() { + this.showControlsBind = this._showControls.bind(this); + this.mouseDownBind = this._mouseDown.bind(this); + this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this); + this.contextMenuBind = this._contextMenu.bind(this); + + window.addEventListener('mousemove', this.showControlsBind); + window.addEventListener('mousedown', this.mouseDownBind); + window.addEventListener('keydown', this.resetMouseScrollStateBind); + window.addEventListener('contextmenu', this.contextMenuBind); + }, + + /** + * @private + */ + _removeWindowListeners: + function PDFPresentationMode_removeWindowListeners() { + window.removeEventListener('mousemove', this.showControlsBind); + window.removeEventListener('mousedown', this.mouseDownBind); + window.removeEventListener('keydown', this.resetMouseScrollStateBind); + window.removeEventListener('contextmenu', this.contextMenuBind); + + delete this.showControlsBind; + delete this.mouseDownBind; + delete this.resetMouseScrollStateBind; + delete this.contextMenuBind; + }, + + /** + * @private + */ + _fullscreenChange: function PDFPresentationMode_fullscreenChange() { + if (this.isFullscreen) { + this._enter(); + } else { + this._exit(); + } + }, + + /** + * @private + */ + _addFullscreenChangeListeners: + function PDFPresentationMode_addFullscreenChangeListeners() { + this.fullscreenChangeBind = this._fullscreenChange.bind(this); + + window.addEventListener('fullscreenchange', this.fullscreenChangeBind); + window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind); + window.addEventListener('webkitfullscreenchange', + this.fullscreenChangeBind); + window.addEventListener('MSFullscreenChange', this.fullscreenChangeBind); + }, + + /** + * @private + */ + _removeFullscreenChangeListeners: + function PDFPresentationMode_removeFullscreenChangeListeners() { + window.removeEventListener('fullscreenchange', this.fullscreenChangeBind); + window.removeEventListener('mozfullscreenchange', + this.fullscreenChangeBind); + window.removeEventListener('webkitfullscreenchange', + this.fullscreenChangeBind); + window.removeEventListener('MSFullscreenChange', + this.fullscreenChangeBind); + + delete this.fullscreenChangeBind; + } + }; + + return PDFPresentationMode; +})(); + + +/* Copyright 2013 Rob Wu + * https://github.com/Rob--W/grab-to-pan.js + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +'use strict'; + +var GrabToPan = (function GrabToPanClosure() { + /** + * Construct a GrabToPan instance for a given HTML element. + * @param options.element {Element} + * @param options.ignoreTarget {function} optional. See `ignoreTarget(node)` + * @param options.onActiveChanged {function(boolean)} optional. Called + * when grab-to-pan is (de)activated. The first argument is a boolean that + * shows whether grab-to-pan is activated. + */ + function GrabToPan(options) { + this.element = options.element; + this.document = options.element.ownerDocument; + if (typeof options.ignoreTarget === 'function') { + this.ignoreTarget = options.ignoreTarget; + } + this.onActiveChanged = options.onActiveChanged; + + // Bind the contexts to ensure that `this` always points to + // the GrabToPan instance. + this.activate = this.activate.bind(this); + this.deactivate = this.deactivate.bind(this); + this.toggle = this.toggle.bind(this); + this._onmousedown = this._onmousedown.bind(this); + this._onmousemove = this._onmousemove.bind(this); + this._endPan = this._endPan.bind(this); + + // This overlay will be inserted in the document when the mouse moves during + // a grab operation, to ensure that the cursor has the desired appearance. + var overlay = this.overlay = document.createElement('div'); + overlay.className = 'grab-to-pan-grabbing'; + } + GrabToPan.prototype = { + /** + * Class name of element which can be grabbed + */ + CSS_CLASS_GRAB: 'grab-to-pan-grab', + + /** + * Bind a mousedown event to the element to enable grab-detection. + */ + activate: function GrabToPan_activate() { + if (!this.active) { + this.active = true; + this.element.addEventListener('mousedown', this._onmousedown, true); + this.element.classList.add(this.CSS_CLASS_GRAB); + if (this.onActiveChanged) { + this.onActiveChanged(true); + } + } + }, + + /** + * Removes all events. Any pending pan session is immediately stopped. + */ + deactivate: function GrabToPan_deactivate() { + if (this.active) { + this.active = false; + this.element.removeEventListener('mousedown', this._onmousedown, true); + this._endPan(); + this.element.classList.remove(this.CSS_CLASS_GRAB); + if (this.onActiveChanged) { + this.onActiveChanged(false); + } + } + }, + + toggle: function GrabToPan_toggle() { + if (this.active) { + this.deactivate(); + } else { + this.activate(); + } + }, + + /** + * Whether to not pan if the target element is clicked. + * Override this method to change the default behaviour. + * + * @param node {Element} The target of the event + * @return {boolean} Whether to not react to the click event. + */ + ignoreTarget: function GrabToPan_ignoreTarget(node) { + // Use matchesSelector to check whether the clicked element + // is (a child of) an input element / link + return node[matchesSelector]( + 'a[href], a[href] *, input, textarea, button, button *, select, option' + ); + }, + + /** + * @private + */ + _onmousedown: function GrabToPan__onmousedown(event) { + if (event.button !== 0 || this.ignoreTarget(event.target)) { + return; + } + if (event.originalTarget) { + try { + /* jshint expr:true */ + event.originalTarget.tagName; + } catch (e) { + // Mozilla-specific: element is a scrollbar (XUL element) + return; + } + } + + this.scrollLeftStart = this.element.scrollLeft; + this.scrollTopStart = this.element.scrollTop; + this.clientXStart = event.clientX; + this.clientYStart = event.clientY; + this.document.addEventListener('mousemove', this._onmousemove, true); + this.document.addEventListener('mouseup', this._endPan, true); + // When a scroll event occurs before a mousemove, assume that the user + // dragged a scrollbar (necessary for Opera Presto, Safari and IE) + // (not needed for Chrome/Firefox) + this.element.addEventListener('scroll', this._endPan, true); + event.preventDefault(); + event.stopPropagation(); + this.document.documentElement.classList.add(this.CSS_CLASS_GRABBING); + + var focusedElement = document.activeElement; + if (focusedElement && !focusedElement.contains(event.target)) { + focusedElement.blur(); + } + }, + + /** + * @private + */ + _onmousemove: function GrabToPan__onmousemove(event) { + this.element.removeEventListener('scroll', this._endPan, true); + if (isLeftMouseReleased(event)) { + this._endPan(); + return; + } + var xDiff = event.clientX - this.clientXStart; + var yDiff = event.clientY - this.clientYStart; + this.element.scrollTop = this.scrollTopStart - yDiff; + this.element.scrollLeft = this.scrollLeftStart - xDiff; + if (!this.overlay.parentNode) { + document.body.appendChild(this.overlay); + } + }, + + /** + * @private + */ + _endPan: function GrabToPan__endPan() { + this.element.removeEventListener('scroll', this._endPan, true); + this.document.removeEventListener('mousemove', this._onmousemove, true); + this.document.removeEventListener('mouseup', this._endPan, true); + if (this.overlay.parentNode) { + this.overlay.parentNode.removeChild(this.overlay); + } + } + }; + + // Get the correct (vendor-prefixed) name of the matches method. + var matchesSelector; + ['webkitM', 'mozM', 'msM', 'oM', 'm'].some(function(prefix) { + var name = prefix + 'atches'; + if (name in document.documentElement) { + matchesSelector = name; + } + name += 'Selector'; + if (name in document.documentElement) { + matchesSelector = name; + } + return matchesSelector; // If found, then truthy, and [].some() ends. + }); + + // Browser sniffing because it's impossible to feature-detect + // whether event.which for onmousemove is reliable + var isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9; + var chrome = window.chrome; + var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); + // ^ Chrome 15+ ^ Opera 15+ + var isSafari6plus = /Apple/.test(navigator.vendor) && + /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); + + /** + * Whether the left mouse is not pressed. + * @param event {MouseEvent} + * @return {boolean} True if the left mouse button is not pressed. + * False if unsure or if the left mouse button is pressed. + */ + function isLeftMouseReleased(event) { + if ('buttons' in event && isNotIEorIsIE10plus) { + // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-buttons + // Firefox 15+ + // Internet Explorer 10+ + return !(event.buttons | 1); + } + if (isChrome15OrOpera15plus || isSafari6plus) { + // Chrome 14+ + // Opera 15+ + // Safari 6.0+ + return event.which === 0; + } + } + + return GrabToPan; +})(); + +var HandTool = { + initialize: function handToolInitialize(options) { + var toggleHandTool = options.toggleHandTool; + this.handTool = new GrabToPan({ + element: options.container, + onActiveChanged: function(isActive) { + if (!toggleHandTool) { + return; + } + if (isActive) { + toggleHandTool.title = + mozL10n.get('hand_tool_disable.title', null, 'Disable hand tool'); + toggleHandTool.firstElementChild.textContent = + mozL10n.get('hand_tool_disable_label', null, 'Disable hand tool'); + } else { + toggleHandTool.title = + mozL10n.get('hand_tool_enable.title', null, 'Enable hand tool'); + toggleHandTool.firstElementChild.textContent = + mozL10n.get('hand_tool_enable_label', null, 'Enable hand tool'); + } + } + }); + if (toggleHandTool) { + toggleHandTool.addEventListener('click', this.toggle.bind(this), false); + + window.addEventListener('localized', function (evt) { + Preferences.get('enableHandToolOnLoad').then(function resolved(value) { + if (value) { + this.handTool.activate(); + } + }.bind(this), function rejected(reason) {}); + }.bind(this)); + + window.addEventListener('presentationmodechanged', function (evt) { + if (evt.detail.switchInProgress) { + return; + } + if (evt.detail.active) { + this.enterPresentationMode(); + } else { + this.exitPresentationMode(); + } + }.bind(this)); + } + }, + + toggle: function handToolToggle() { + this.handTool.toggle(); + SecondaryToolbar.close(); + }, + + enterPresentationMode: function handToolEnterPresentationMode() { + if (this.handTool.active) { + this.wasActive = true; + this.handTool.deactivate(); + } + }, + + exitPresentationMode: function handToolExitPresentationMode() { + if (this.wasActive) { + this.wasActive = null; + this.handTool.activate(); + } + } +}; + + +var OverlayManager = { + overlays: {}, + active: null, + + /** + * @param {string} name The name of the overlay that is registered. This must + * be equal to the ID of the overlay's DOM element. + * @param {function} callerCloseMethod (optional) The method that, if present, + * will call OverlayManager.close from the Object + * registering the overlay. Access to this method is + * necessary in order to run cleanup code when e.g. + * the overlay is force closed. The default is null. + * @param {boolean} canForceClose (optional) Indicates if opening the overlay + * will close an active overlay. The default is false. + * @returns {Promise} A promise that is resolved when the overlay has been + * registered. + */ + register: function overlayManagerRegister(name, + callerCloseMethod, canForceClose) { + return new Promise(function (resolve) { + var element, container; + if (!name || !(element = document.getElementById(name)) || + !(container = element.parentNode)) { + throw new Error('Not enough parameters.'); + } else if (this.overlays[name]) { + throw new Error('The overlay is already registered.'); + } + this.overlays[name] = { element: element, + container: container, + callerCloseMethod: (callerCloseMethod || null), + canForceClose: (canForceClose || false) }; + resolve(); + }.bind(this)); + }, + + /** + * @param {string} name The name of the overlay that is unregistered. + * @returns {Promise} A promise that is resolved when the overlay has been + * unregistered. + */ + unregister: function overlayManagerUnregister(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (this.active === name) { + throw new Error('The overlay cannot be removed while it is active.'); + } + delete this.overlays[name]; + + resolve(); + }.bind(this)); + }, + + /** + * @param {string} name The name of the overlay that should be opened. + * @returns {Promise} A promise that is resolved when the overlay has been + * opened. + */ + open: function overlayManagerOpen(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (this.active) { + if (this.overlays[name].canForceClose) { + this._closeThroughCaller(); + } else if (this.active === name) { + throw new Error('The overlay is already active.'); + } else { + throw new Error('Another overlay is currently active.'); + } + } + this.active = name; + this.overlays[this.active].element.classList.remove('hidden'); + this.overlays[this.active].container.classList.remove('hidden'); + + window.addEventListener('keydown', this._keyDown); + resolve(); + }.bind(this)); + }, + + /** + * @param {string} name The name of the overlay that should be closed. + * @returns {Promise} A promise that is resolved when the overlay has been + * closed. + */ + close: function overlayManagerClose(name) { + return new Promise(function (resolve) { + if (!this.overlays[name]) { + throw new Error('The overlay does not exist.'); + } else if (!this.active) { + throw new Error('The overlay is currently not active.'); + } else if (this.active !== name) { + throw new Error('Another overlay is currently active.'); + } + this.overlays[this.active].container.classList.add('hidden'); + this.overlays[this.active].element.classList.add('hidden'); + this.active = null; + + window.removeEventListener('keydown', this._keyDown); + resolve(); + }.bind(this)); + }, + + /** + * @private + */ + _keyDown: function overlayManager_keyDown(evt) { + var self = OverlayManager; + if (self.active && evt.keyCode === 27) { // Esc key. + self._closeThroughCaller(); + evt.preventDefault(); + } + }, + + /** + * @private + */ + _closeThroughCaller: function overlayManager_closeThroughCaller() { + if (this.overlays[this.active].callerCloseMethod) { + this.overlays[this.active].callerCloseMethod(); + } + if (this.active) { + this.close(this.active); + } + } +}; + + +var PasswordPrompt = { + overlayName: null, + updatePassword: null, + reason: null, + passwordField: null, + passwordText: null, + passwordSubmit: null, + passwordCancel: null, + + initialize: function secondaryToolbarInitialize(options) { + this.overlayName = options.overlayName; + this.passwordField = options.passwordField; + this.passwordText = options.passwordText; + this.passwordSubmit = options.passwordSubmit; + this.passwordCancel = options.passwordCancel; + + // Attach the event listeners. + this.passwordSubmit.addEventListener('click', + this.verifyPassword.bind(this)); + + this.passwordCancel.addEventListener('click', this.close.bind(this)); + + this.passwordField.addEventListener('keydown', function (e) { + if (e.keyCode === 13) { // Enter key + this.verifyPassword(); + } + }.bind(this)); + + OverlayManager.register(this.overlayName, this.close.bind(this), true); + }, + + open: function passwordPromptOpen() { + OverlayManager.open(this.overlayName).then(function () { + this.passwordField.focus(); + + var promptString = mozL10n.get('password_label', null, + 'Enter the password to open this PDF file.'); + + if (this.reason === PDFJS.PasswordResponses.INCORRECT_PASSWORD) { + promptString = mozL10n.get('password_invalid', null, + 'Invalid password. Please try again.'); + } + + this.passwordText.textContent = promptString; + }.bind(this)); + }, + + close: function passwordPromptClose() { + OverlayManager.close(this.overlayName).then(function () { + this.passwordField.value = ''; + }.bind(this)); + }, + + verifyPassword: function passwordPromptVerifyPassword() { + var password = this.passwordField.value; + if (password && password.length > 0) { + this.close(); + return this.updatePassword(password); + } + } +}; + + +/** + * @typedef {Object} PDFDocumentPropertiesOptions + * @property {string} overlayName - Name/identifier for the overlay. + * @property {Object} fields - Names and elements of the overlay's fields. + * @property {HTMLButtonElement} closeButton - Button for closing the overlay. + */ + +/** + * @class + */ +var PDFDocumentProperties = (function PDFDocumentPropertiesClosure() { + /** + * @constructs PDFDocumentProperties + * @param {PDFDocumentPropertiesOptions} options + */ + function PDFDocumentProperties(options) { + this.fields = options.fields; + this.overlayName = options.overlayName; + + this.rawFileSize = 0; + this.url = null; + this.pdfDocument = null; + + // Bind the event listener for the Close button. + if (options.closeButton) { + options.closeButton.addEventListener('click', this.close.bind(this)); + } + + this.dataAvailablePromise = new Promise(function (resolve) { + this.resolveDataAvailable = resolve; + }.bind(this)); + + OverlayManager.register(this.overlayName, this.close.bind(this)); + } + + PDFDocumentProperties.prototype = { + /** + * Open the document properties overlay. + */ + open: function PDFDocumentProperties_open() { + Promise.all([OverlayManager.open(this.overlayName), + this.dataAvailablePromise]).then(function () { + this._getProperties(); + }.bind(this)); + }, + + /** + * Close the document properties overlay. + */ + close: function PDFDocumentProperties_close() { + OverlayManager.close(this.overlayName); + }, + + /** + * Set the file size of the PDF document. This method is used to + * update the file size in the document properties overlay once it + * is known so we do not have to wait until the entire file is loaded. + * + * @param {number} fileSize - The file size of the PDF document. + */ + setFileSize: function PDFDocumentProperties_setFileSize(fileSize) { + if (fileSize > 0) { + this.rawFileSize = fileSize; + } + }, + + /** + * Set a reference to the PDF document and the URL in order + * to populate the overlay fields with the document properties. + * Note that the overlay will contain no information if this method + * is not called. + * + * @param {Object} pdfDocument - A reference to the PDF document. + * @param {string} url - The URL of the document. + */ + setDocumentAndUrl: + function PDFDocumentProperties_setDocumentAndUrl(pdfDocument, url) { + this.pdfDocument = pdfDocument; + this.url = url; + this.resolveDataAvailable(); + }, + + /** + * @private + */ + _getProperties: function PDFDocumentProperties_getProperties() { + if (!OverlayManager.active) { + // If the dialog was closed before dataAvailablePromise was resolved, + // don't bother updating the properties. + return; + } + // Get the file size (if it hasn't already been set). + this.pdfDocument.getDownloadInfo().then(function(data) { + if (data.length === this.rawFileSize) { + return; + } + this.setFileSize(data.length); + this._updateUI(this.fields['fileSize'], this._parseFileSize()); + }.bind(this)); + + // Get the document properties. + this.pdfDocument.getMetadata().then(function(data) { + var content = { + 'fileName': getPDFFileNameFromURL(this.url), + 'fileSize': this._parseFileSize(), + 'title': data.info.Title, + 'author': data.info.Author, + 'subject': data.info.Subject, + 'keywords': data.info.Keywords, + 'creationDate': this._parseDate(data.info.CreationDate), + 'modificationDate': this._parseDate(data.info.ModDate), + 'creator': data.info.Creator, + 'producer': data.info.Producer, + 'version': data.info.PDFFormatVersion, + 'pageCount': this.pdfDocument.numPages + }; + + // Show the properties in the dialog. + for (var identifier in content) { + this._updateUI(this.fields[identifier], content[identifier]); + } + }.bind(this)); + }, + + /** + * @private + */ + _updateUI: function PDFDocumentProperties_updateUI(field, content) { + if (field && content !== undefined && content !== '') { + field.textContent = content; + } + }, + + /** + * @private + */ + _parseFileSize: function PDFDocumentProperties_parseFileSize() { + var fileSize = this.rawFileSize, kb = fileSize / 1024; + if (!kb) { + return; + } else if (kb < 1024) { + return mozL10n.get('document_properties_kb', { + size_kb: (+kb.toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }, '{{size_kb}} KB ({{size_b}} bytes)'); + } else { + return mozL10n.get('document_properties_mb', { + size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), + size_b: fileSize.toLocaleString() + }, '{{size_mb}} MB ({{size_b}} bytes)'); + } + }, + + /** + * @private + */ + _parseDate: function PDFDocumentProperties_parseDate(inputDate) { + // This is implemented according to the PDF specification, but note that + // Adobe Reader doesn't handle changing the date to universal time + // and doesn't use the user's time zone (they're effectively ignoring + // the HH' and mm' parts of the date string). + var dateToParse = inputDate; + if (dateToParse === undefined) { + return ''; + } + + // Remove the D: prefix if it is available. + if (dateToParse.substring(0,2) === 'D:') { + dateToParse = dateToParse.substring(2); + } + + // Get all elements from the PDF date string. + // JavaScript's Date object expects the month to be between + // 0 and 11 instead of 1 and 12, so we're correcting for this. + var year = parseInt(dateToParse.substring(0,4), 10); + var month = parseInt(dateToParse.substring(4,6), 10) - 1; + var day = parseInt(dateToParse.substring(6,8), 10); + var hours = parseInt(dateToParse.substring(8,10), 10); + var minutes = parseInt(dateToParse.substring(10,12), 10); + var seconds = parseInt(dateToParse.substring(12,14), 10); + var utRel = dateToParse.substring(14,15); + var offsetHours = parseInt(dateToParse.substring(15,17), 10); + var offsetMinutes = parseInt(dateToParse.substring(18,20), 10); + + // As per spec, utRel = 'Z' means equal to universal time. + // The other cases ('-' and '+') have to be handled here. + if (utRel === '-') { + hours += offsetHours; + minutes += offsetMinutes; + } else if (utRel === '+') { + hours -= offsetHours; + minutes -= offsetMinutes; + } + + // Return the new date format from the user's locale. + var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); + var dateString = date.toLocaleDateString(); + var timeString = date.toLocaleTimeString(); + return mozL10n.get('document_properties_date_string', + {date: dateString, time: timeString}, + '{{date}}, {{time}}'); + } + }; + + return PDFDocumentProperties; +})(); + + +var PresentationModeState = { + UNKNOWN: 0, + NORMAL: 1, + CHANGING: 2, + FULLSCREEN: 3, +}; + +var IGNORE_CURRENT_POSITION_ON_ZOOM = false; +var DEFAULT_CACHE_SIZE = 10; + + +var CLEANUP_TIMEOUT = 30000; + +var RenderingStates = { + INITIAL: 0, + RUNNING: 1, + PAUSED: 2, + FINISHED: 3 +}; + +/** + * Controls rendering of the views for pages and thumbnails. + * @class + */ +var PDFRenderingQueue = (function PDFRenderingQueueClosure() { + /** + * @constructs + */ + function PDFRenderingQueue() { + this.pdfViewer = null; + this.pdfThumbnailViewer = null; + this.onIdle = null; + + this.highestPriorityPage = null; + this.idleTimeout = null; + this.printing = false; + this.isThumbnailViewEnabled = false; + } + + PDFRenderingQueue.prototype = /** @lends PDFRenderingQueue.prototype */ { + /** + * @param {PDFViewer} pdfViewer + */ + setViewer: function PDFRenderingQueue_setViewer(pdfViewer) { + this.pdfViewer = pdfViewer; + }, + + /** + * @param {PDFThumbnailViewer} pdfThumbnailViewer + */ + setThumbnailViewer: + function PDFRenderingQueue_setThumbnailViewer(pdfThumbnailViewer) { + this.pdfThumbnailViewer = pdfThumbnailViewer; + }, + + /** + * @param {IRenderableView} view + * @returns {boolean} + */ + isHighestPriority: function PDFRenderingQueue_isHighestPriority(view) { + return this.highestPriorityPage === view.renderingId; + }, + + renderHighestPriority: function + PDFRenderingQueue_renderHighestPriority(currentlyVisiblePages) { + if (this.idleTimeout) { + clearTimeout(this.idleTimeout); + this.idleTimeout = null; + } + + // Pages have a higher priority than thumbnails, so check them first. + if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { + return; + } + // No pages needed rendering so check thumbnails. + if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { + if (this.pdfThumbnailViewer.forceRendering()) { + return; + } + } + + if (this.printing) { + // If printing is currently ongoing do not reschedule cleanup. + return; + } + + if (this.onIdle) { + this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); + } + }, + + getHighestPriority: function + PDFRenderingQueue_getHighestPriority(visible, views, scrolledDown) { + // The state has changed figure out which page has the highest priority to + // render next (if any). + // Priority: + // 1 visible pages + // 2 if last scrolled down page after the visible pages + // 2 if last scrolled up page before the visible pages + var visibleViews = visible.views; + + var numVisible = visibleViews.length; + if (numVisible === 0) { + return false; + } + for (var i = 0; i < numVisible; ++i) { + var view = visibleViews[i].view; + if (!this.isViewFinished(view)) { + return view; + } + } + + // All the visible views have rendered, try to render next/previous pages. + if (scrolledDown) { + var nextPageIndex = visible.last.id; + // ID's start at 1 so no need to add 1. + if (views[nextPageIndex] && + !this.isViewFinished(views[nextPageIndex])) { + return views[nextPageIndex]; + } + } else { + var previousPageIndex = visible.first.id - 2; + if (views[previousPageIndex] && + !this.isViewFinished(views[previousPageIndex])) { + return views[previousPageIndex]; + } + } + // Everything that needs to be rendered has been. + return null; + }, + + /** + * @param {IRenderableView} view + * @returns {boolean} + */ + isViewFinished: function PDFRenderingQueue_isViewFinished(view) { + return view.renderingState === RenderingStates.FINISHED; + }, + + /** + * Render a page or thumbnail view. This calls the appropriate function + * based on the views state. If the view is already rendered it will return + * false. + * @param {IRenderableView} view + */ + renderView: function PDFRenderingQueue_renderView(view) { + var state = view.renderingState; + switch (state) { + case RenderingStates.FINISHED: + return false; + case RenderingStates.PAUSED: + this.highestPriorityPage = view.renderingId; + view.resume(); + break; + case RenderingStates.RUNNING: + this.highestPriorityPage = view.renderingId; + break; + case RenderingStates.INITIAL: + this.highestPriorityPage = view.renderingId; + var continueRendering = function () { + this.renderHighestPriority(); + }.bind(this); + view.draw().then(continueRendering, continueRendering); + break; + } + return true; + }, + }; + + return PDFRenderingQueue; +})(); + + +var TEXT_LAYER_RENDER_DELAY = 200; // ms + +/** + * @typedef {Object} PDFPageViewOptions + * @property {HTMLDivElement} container - The viewer element. + * @property {number} id - The page unique ID (normally its number). + * @property {number} scale - The page scale display. + * @property {PageViewport} defaultViewport - The page viewport. + * @property {PDFRenderingQueue} renderingQueue - The rendering queue object. + * @property {IPDFTextLayerFactory} textLayerFactory + * @property {IPDFAnnotationsLayerFactory} annotationsLayerFactory + */ + +/** + * @class + * @implements {IRenderableView} + */ +var PDFPageView = (function PDFPageViewClosure() { + /** + * @constructs PDFPageView + * @param {PDFPageViewOptions} options + */ + function PDFPageView(options) { + var container = options.container; + var id = options.id; + var scale = options.scale; + var defaultViewport = options.defaultViewport; + var renderingQueue = options.renderingQueue; + var textLayerFactory = options.textLayerFactory; + var annotationsLayerFactory = options.annotationsLayerFactory; + + this.id = id; + this.renderingId = 'page' + id; + + this.rotation = 0; + this.scale = scale || 1.0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + this.hasRestrictedScaling = false; + + this.renderingQueue = renderingQueue; + this.textLayerFactory = textLayerFactory; + this.annotationsLayerFactory = annotationsLayerFactory; + + this.renderingState = RenderingStates.INITIAL; + this.resume = null; + + this.onBeforeDraw = null; + this.onAfterDraw = null; + + this.textLayer = null; + + this.zoomLayer = null; + + this.annotationLayer = null; + + var div = document.createElement('div'); + div.id = 'pageContainer' + this.id; + div.className = 'page'; + div.style.width = Math.floor(this.viewport.width) + 'px'; + div.style.height = Math.floor(this.viewport.height) + 'px'; + div.setAttribute('data-page-number', this.id); + this.div = div; + + container.appendChild(div); + } + + PDFPageView.prototype = { + setPdfPage: function PDFPageView_setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS, + totalRotation); + this.stats = pdfPage.stats; + this.reset(); + }, + + destroy: function PDFPageView_destroy() { + this.zoomLayer = null; + this.reset(); + if (this.pdfPage) { + this.pdfPage.destroy(); + } + }, + + reset: function PDFPageView_reset(keepAnnotations) { + if (this.renderTask) { + this.renderTask.cancel(); + } + this.resume = null; + this.renderingState = RenderingStates.INITIAL; + + var div = this.div; + div.style.width = Math.floor(this.viewport.width) + 'px'; + div.style.height = Math.floor(this.viewport.height) + 'px'; + + var childNodes = div.childNodes; + var currentZoomLayer = this.zoomLayer || null; + var currentAnnotationNode = (keepAnnotations && this.annotationLayer && + this.annotationLayer.div) || null; + for (var i = childNodes.length - 1; i >= 0; i--) { + var node = childNodes[i]; + if (currentZoomLayer === node || currentAnnotationNode === node) { + continue; + } + div.removeChild(node); + } + div.removeAttribute('data-loaded'); + + if (keepAnnotations) { + if (this.annotationLayer) { + // Hide annotationLayer until all elements are resized + // so they are not displayed on the already-resized page + this.annotationLayer.hide(); + } + } else { + this.annotationLayer = null; + } + + if (this.canvas) { + // Zeroing the width and height causes Firefox to release graphics + // resources immediately, which can greatly reduce memory consumption. + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + + this.loadingIconDiv = document.createElement('div'); + this.loadingIconDiv.className = 'loadingIcon'; + div.appendChild(this.loadingIconDiv); + }, + + update: function PDFPageView_update(scale, rotation) { + this.scale = scale || this.scale; + + if (typeof rotation !== 'undefined') { + this.rotation = rotation; + } + + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: this.scale * CSS_UNITS, + rotation: totalRotation + }); + + var isScalingRestricted = false; + if (this.canvas && PDFJS.maxCanvasPixels > 0) { + var ctx = this.canvas.getContext('2d'); + var outputScale = getOutputScale(ctx); + var pixelsInViewport = this.viewport.width * this.viewport.height; + var maxScale = Math.sqrt(PDFJS.maxCanvasPixels / pixelsInViewport); + if (((Math.floor(this.viewport.width) * outputScale.sx) | 0) * + ((Math.floor(this.viewport.height) * outputScale.sy) | 0) > + PDFJS.maxCanvasPixels) { + isScalingRestricted = true; + } + } + + if (this.canvas && + (PDFJS.useOnlyCssZoom || + (this.hasRestrictedScaling && isScalingRestricted))) { + this.cssTransform(this.canvas, true); + return; + } else if (this.canvas && !this.zoomLayer) { + this.zoomLayer = this.canvas.parentNode; + this.zoomLayer.style.position = 'absolute'; + } + if (this.zoomLayer) { + this.cssTransform(this.zoomLayer.firstChild); + } + this.reset(true); + }, + + /** + * Called when moved in the parent's container. + */ + updatePosition: function PDFPageView_updatePosition() { + if (this.textLayer) { + this.textLayer.render(TEXT_LAYER_RENDER_DELAY); + } + }, + + cssTransform: function PDFPageView_transform(canvas, redrawAnnotations) { + // Scale canvas, canvas wrapper, and page container. + var width = this.viewport.width; + var height = this.viewport.height; + var div = this.div; + canvas.style.width = canvas.parentNode.style.width = div.style.width = + Math.floor(width) + 'px'; + canvas.style.height = canvas.parentNode.style.height = div.style.height = + Math.floor(height) + 'px'; + // The canvas may have been originally rotated, rotate relative to that. + var relativeRotation = this.viewport.rotation - canvas._viewport.rotation; + var absRotation = Math.abs(relativeRotation); + var scaleX = 1, scaleY = 1; + if (absRotation === 90 || absRotation === 270) { + // Scale x and y because of the rotation. + scaleX = height / width; + scaleY = width / height; + } + var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + + 'scale(' + scaleX + ',' + scaleY + ')'; + CustomStyle.setProp('transform', canvas, cssTransform); + + if (this.textLayer) { + // Rotating the text layer is more complicated since the divs inside the + // the text layer are rotated. + // TODO: This could probably be simplified by drawing the text layer in + // one orientation then rotating overall. + var textLayerViewport = this.textLayer.viewport; + var textRelativeRotation = this.viewport.rotation - + textLayerViewport.rotation; + var textAbsRotation = Math.abs(textRelativeRotation); + var scale = width / textLayerViewport.width; + if (textAbsRotation === 90 || textAbsRotation === 270) { + scale = width / textLayerViewport.height; + } + var textLayerDiv = this.textLayer.textLayerDiv; + var transX, transY; + switch (textAbsRotation) { + case 0: + transX = transY = 0; + break; + case 90: + transX = 0; + transY = '-' + textLayerDiv.style.height; + break; + case 180: + transX = '-' + textLayerDiv.style.width; + transY = '-' + textLayerDiv.style.height; + break; + case 270: + transX = '-' + textLayerDiv.style.width; + transY = 0; + break; + default: + console.error('Bad rotation value.'); + break; + } + CustomStyle.setProp('transform', textLayerDiv, + 'rotate(' + textAbsRotation + 'deg) ' + + 'scale(' + scale + ', ' + scale + ') ' + + 'translate(' + transX + ', ' + transY + ')'); + CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); + } + + if (redrawAnnotations && this.annotationLayer) { + this.annotationLayer.setupAnnotations(this.viewport); + } + }, + + get width() { + return this.viewport.width; + }, + + get height() { + return this.viewport.height; + }, + + getPagePoint: function PDFPageView_getPagePoint(x, y) { + return this.viewport.convertToPdfPoint(x, y); + }, + + draw: function PDFPageView_draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error('Must be in new state before drawing'); + } + + this.renderingState = RenderingStates.RUNNING; + + var pdfPage = this.pdfPage; + var viewport = this.viewport; + var div = this.div; + // Wrap the canvas so if it has a css transform for highdpi the overflow + // will be hidden in FF. + var canvasWrapper = document.createElement('div'); + canvasWrapper.style.width = div.style.width; + canvasWrapper.style.height = div.style.height; + canvasWrapper.classList.add('canvasWrapper'); + + var canvas = document.createElement('canvas'); + canvas.id = 'page' + this.id; + canvasWrapper.appendChild(canvas); + if (this.annotationLayer) { + // annotationLayer needs to stay on top + div.insertBefore(canvasWrapper, this.annotationLayer.div); + } else { + div.appendChild(canvasWrapper); + } + this.canvas = canvas; + + var ctx = canvas.getContext('2d'); + var outputScale = getOutputScale(ctx); + + if (PDFJS.useOnlyCssZoom) { + var actualSizeViewport = viewport.clone({ scale: CSS_UNITS }); + // Use a scale that will make the canvas be the original intended size + // of the page. + outputScale.sx *= actualSizeViewport.width / viewport.width; + outputScale.sy *= actualSizeViewport.height / viewport.height; + outputScale.scaled = true; + } + + if (PDFJS.maxCanvasPixels > 0) { + var pixelsInViewport = viewport.width * viewport.height; + var maxScale = Math.sqrt(PDFJS.maxCanvasPixels / pixelsInViewport); + if (outputScale.sx > maxScale || outputScale.sy > maxScale) { + outputScale.sx = maxScale; + outputScale.sy = maxScale; + outputScale.scaled = true; + this.hasRestrictedScaling = true; + } else { + this.hasRestrictedScaling = false; + } + } + + canvas.width = (Math.floor(viewport.width) * outputScale.sx) | 0; + canvas.height = (Math.floor(viewport.height) * outputScale.sy) | 0; + canvas.style.width = Math.floor(viewport.width) + 'px'; + canvas.style.height = Math.floor(viewport.height) + 'px'; + // Add the viewport so it's known what it was originally drawn with. + canvas._viewport = viewport; + + var textLayerDiv = null; + var textLayer = null; + if (this.textLayerFactory) { + textLayerDiv = document.createElement('div'); + textLayerDiv.className = 'textLayer'; + textLayerDiv.style.width = canvas.style.width; + textLayerDiv.style.height = canvas.style.height; + if (this.annotationLayer) { + // annotationLayer needs to stay on top + div.insertBefore(textLayerDiv, this.annotationLayer.div); + } else { + div.appendChild(textLayerDiv); + } + + textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, + this.id - 1, + this.viewport); + } + this.textLayer = textLayer; + + if (outputScale.scaled) { + // Used by the mozCurrentTransform polyfill in src/display/canvas.js. + ctx._transformMatrix = [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; + ctx.scale(outputScale.sx, outputScale.sy); + } + + var resolveRenderPromise, rejectRenderPromise; + var promise = new Promise(function (resolve, reject) { + resolveRenderPromise = resolve; + rejectRenderPromise = reject; + }); + + // Rendering area + + var self = this; + function pageViewDrawCallback(error) { + // The renderTask may have been replaced by a new one, so only remove + // the reference to the renderTask if it matches the one that is + // triggering this callback. + if (renderTask === self.renderTask) { + self.renderTask = null; + } + + if (error === 'cancelled') { + rejectRenderPromise(error); + return; + } + + self.renderingState = RenderingStates.FINISHED; + + if (self.loadingIconDiv) { + div.removeChild(self.loadingIconDiv); + delete self.loadingIconDiv; + } + + if (self.zoomLayer) { + div.removeChild(self.zoomLayer); + self.zoomLayer = null; + } + + self.error = error; + self.stats = pdfPage.stats; + if (self.onAfterDraw) { + self.onAfterDraw(); + } + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('pagerendered', true, true, { + pageNumber: self.id + }); + div.dispatchEvent(event); + // This custom event is deprecated, and will be removed in the future, + // please use the |pagerendered| event instead. + var deprecatedEvent = document.createEvent('CustomEvent'); + deprecatedEvent.initCustomEvent('pagerender', true, true, { + pageNumber: pdfPage.pageNumber + }); + div.dispatchEvent(deprecatedEvent); + + if (!error) { + resolveRenderPromise(undefined); + } else { + rejectRenderPromise(error); + } + } + + var renderContinueCallback = null; + if (this.renderingQueue) { + renderContinueCallback = function renderContinueCallback(cont) { + if (!self.renderingQueue.isHighestPriority(self)) { + self.renderingState = RenderingStates.PAUSED; + self.resume = function resumeCallback() { + self.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + } + + var renderContext = { + canvasContext: ctx, + viewport: this.viewport, + // intent: 'default', // === 'display' + continueCallback: renderContinueCallback + }; + var renderTask = this.renderTask = this.pdfPage.render(renderContext); + + this.renderTask.promise.then( + function pdfPageRenderCallback() { + pageViewDrawCallback(null); + if (textLayer) { + self.pdfPage.getTextContent().then( + function textContentResolved(textContent) { + textLayer.setTextContent(textContent); + textLayer.render(TEXT_LAYER_RENDER_DELAY); + } + ); + } + }, + function pdfPageRenderError(error) { + pageViewDrawCallback(error); + } + ); + + if (this.annotationsLayerFactory) { + if (!this.annotationLayer) { + this.annotationLayer = this.annotationsLayerFactory. + createAnnotationsLayerBuilder(div, this.pdfPage); + } + this.annotationLayer.setupAnnotations(this.viewport); + } + div.setAttribute('data-loaded', true); + + if (self.onBeforeDraw) { + self.onBeforeDraw(); + } + return promise; + }, + + beforePrint: function PDFPageView_beforePrint() { + var pdfPage = this.pdfPage; + + var viewport = pdfPage.getViewport(1); + // Use the same hack we use for high dpi displays for printing to get + // better output until bug 811002 is fixed in FF. + var PRINT_OUTPUT_SCALE = 2; + var canvas = document.createElement('canvas'); + + // The logical size of the canvas. + canvas.width = Math.floor(viewport.width) * PRINT_OUTPUT_SCALE; + canvas.height = Math.floor(viewport.height) * PRINT_OUTPUT_SCALE; + + // The rendered size of the canvas, relative to the size of canvasWrapper. + canvas.style.width = (PRINT_OUTPUT_SCALE * 100) + '%'; + canvas.style.height = (PRINT_OUTPUT_SCALE * 100) + '%'; + + var cssScale = 'scale(' + (1 / PRINT_OUTPUT_SCALE) + ', ' + + (1 / PRINT_OUTPUT_SCALE) + ')'; + CustomStyle.setProp('transform' , canvas, cssScale); + CustomStyle.setProp('transformOrigin' , canvas, '0% 0%'); + + var printContainer = document.getElementById('printContainer'); + var canvasWrapper = document.createElement('div'); + canvasWrapper.style.width = viewport.width + 'pt'; + canvasWrapper.style.height = viewport.height + 'pt'; + canvasWrapper.appendChild(canvas); + printContainer.appendChild(canvasWrapper); + + canvas.mozPrintCallback = function(obj) { + var ctx = obj.context; + + ctx.save(); + ctx.fillStyle = 'rgb(255, 255, 255)'; + ctx.fillRect(0, 0, canvas.width, canvas.height); + ctx.restore(); + // Used by the mozCurrentTransform polyfill in src/display/canvas.js. + ctx._transformMatrix = + [PRINT_OUTPUT_SCALE, 0, 0, PRINT_OUTPUT_SCALE, 0, 0]; + ctx.scale(PRINT_OUTPUT_SCALE, PRINT_OUTPUT_SCALE); + + var renderContext = { + canvasContext: ctx, + viewport: viewport, + intent: 'print' + }; + + pdfPage.render(renderContext).promise.then(function() { + // Tell the printEngine that rendering this canvas/page has finished. + obj.done(); + }, function(error) { + console.error(error); + // Tell the printEngine that rendering this canvas/page has failed. + // This will make the print proces stop. + if ('abort' in obj) { + obj.abort(); + } else { + obj.done(); + } + }); + }; + }, + }; + + return PDFPageView; +})(); + + +var MAX_TEXT_DIVS_TO_RENDER = 100000; + +var NonWhitespaceRegexp = /\S/; + +function isAllWhitespace(str) { + return !NonWhitespaceRegexp.test(str); +} + +/** + * @typedef {Object} TextLayerBuilderOptions + * @property {HTMLDivElement} textLayerDiv - The text layer container. + * @property {number} pageIndex - The page index. + * @property {PageViewport} viewport - The viewport of the text layer. + * @property {PDFFindController} findController + */ + +/** + * TextLayerBuilder provides text-selection functionality for the PDF. + * It does this by creating overlay divs over the PDF text. These divs + * contain text that matches the PDF text they are overlaying. This object + * also provides a way to highlight text that is being searched for. + * @class + */ +var TextLayerBuilder = (function TextLayerBuilderClosure() { + function TextLayerBuilder(options) { + this.textLayerDiv = options.textLayerDiv; + this.renderingDone = false; + this.divContentDone = false; + this.pageIdx = options.pageIndex; + this.pageNumber = this.pageIdx + 1; + this.matches = []; + this.viewport = options.viewport; + this.textDivs = []; + this.findController = options.findController || null; + } + + TextLayerBuilder.prototype = { + _finishRendering: function TextLayerBuilder_finishRendering() { + this.renderingDone = true; + + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('textlayerrendered', true, true, { + pageNumber: this.pageNumber + }); + this.textLayerDiv.dispatchEvent(event); + }, + + renderLayer: function TextLayerBuilder_renderLayer() { + var textLayerFrag = document.createDocumentFragment(); + var textDivs = this.textDivs; + var textDivsLength = textDivs.length; + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + + // No point in rendering many divs as it would make the browser + // unusable even after the divs are rendered. + if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { + this._finishRendering(); + return; + } + + var lastFontSize; + var lastFontFamily; + for (var i = 0; i < textDivsLength; i++) { + var textDiv = textDivs[i]; + if (textDiv.dataset.isWhitespace !== undefined) { + continue; + } + + var fontSize = textDiv.style.fontSize; + var fontFamily = textDiv.style.fontFamily; + + // Only build font string and set to context if different from last. + if (fontSize !== lastFontSize || fontFamily !== lastFontFamily) { + ctx.font = fontSize + ' ' + fontFamily; + lastFontSize = fontSize; + lastFontFamily = fontFamily; + } + + var width = ctx.measureText(textDiv.textContent).width; + if (width > 0) { + textLayerFrag.appendChild(textDiv); + var transform; + if (textDiv.dataset.canvasWidth !== undefined) { + // Dataset values come of type string. + var textScale = textDiv.dataset.canvasWidth / width; + transform = 'scaleX(' + textScale + ')'; + } else { + transform = ''; + } + var rotation = textDiv.dataset.angle; + if (rotation) { + transform = 'rotate(' + rotation + 'deg) ' + transform; + } + if (transform) { + CustomStyle.setProp('transform' , textDiv, transform); + } + } + } + + this.textLayerDiv.appendChild(textLayerFrag); + this._finishRendering(); + this.updateMatches(); + }, + + /** + * Renders the text layer. + * @param {number} timeout (optional) if specified, the rendering waits + * for specified amount of ms. + */ + render: function TextLayerBuilder_render(timeout) { + if (!this.divContentDone || this.renderingDone) { + return; + } + + if (this.renderTimer) { + clearTimeout(this.renderTimer); + this.renderTimer = null; + } + + if (!timeout) { // Render right away + this.renderLayer(); + } else { // Schedule + var self = this; + this.renderTimer = setTimeout(function() { + self.renderLayer(); + self.renderTimer = null; + }, timeout); + } + }, + + appendText: function TextLayerBuilder_appendText(geom, styles) { + var style = styles[geom.fontName]; + var textDiv = document.createElement('div'); + this.textDivs.push(textDiv); + if (isAllWhitespace(geom.str)) { + textDiv.dataset.isWhitespace = true; + return; + } + var tx = PDFJS.Util.transform(this.viewport.transform, geom.transform); + var angle = Math.atan2(tx[1], tx[0]); + if (style.vertical) { + angle += Math.PI / 2; + } + var fontHeight = Math.sqrt((tx[2] * tx[2]) + (tx[3] * tx[3])); + var fontAscent = fontHeight; + if (style.ascent) { + fontAscent = style.ascent * fontAscent; + } else if (style.descent) { + fontAscent = (1 + style.descent) * fontAscent; + } + + var left; + var top; + if (angle === 0) { + left = tx[4]; + top = tx[5] - fontAscent; + } else { + left = tx[4] + (fontAscent * Math.sin(angle)); + top = tx[5] - (fontAscent * Math.cos(angle)); + } + textDiv.style.left = left + 'px'; + textDiv.style.top = top + 'px'; + textDiv.style.fontSize = fontHeight + 'px'; + textDiv.style.fontFamily = style.fontFamily; + + textDiv.textContent = geom.str; + // |fontName| is only used by the Font Inspector. This test will succeed + // when e.g. the Font Inspector is off but the Stepper is on, but it's + // not worth the effort to do a more accurate test. + if (PDFJS.pdfBug) { + textDiv.dataset.fontName = geom.fontName; + } + // Storing into dataset will convert number into string. + if (angle !== 0) { + textDiv.dataset.angle = angle * (180 / Math.PI); + } + // We don't bother scaling single-char text divs, because it has very + // little effect on text highlighting. This makes scrolling on docs with + // lots of such divs a lot faster. + if (textDiv.textContent.length > 1) { + if (style.vertical) { + textDiv.dataset.canvasWidth = geom.height * this.viewport.scale; + } else { + textDiv.dataset.canvasWidth = geom.width * this.viewport.scale; + } + } + }, + + setTextContent: function TextLayerBuilder_setTextContent(textContent) { + this.textContent = textContent; + + var textItems = textContent.items; + for (var i = 0, len = textItems.length; i < len; i++) { + this.appendText(textItems[i], textContent.styles); + } + this.divContentDone = true; + }, + + convertMatches: function TextLayerBuilder_convertMatches(matches) { + var i = 0; + var iIndex = 0; + var bidiTexts = this.textContent.items; + var end = bidiTexts.length - 1; + var queryLen = (this.findController === null ? + 0 : this.findController.state.query.length); + var ret = []; + + for (var m = 0, len = matches.length; m < len; m++) { + // Calculate the start position. + var matchIdx = matches[m]; + + // Loop over the divIdxs. + while (i !== end && matchIdx >= (iIndex + bidiTexts[i].str.length)) { + iIndex += bidiTexts[i].str.length; + i++; + } + + if (i === bidiTexts.length) { + console.error('Could not find a matching mapping'); + } + + var match = { + begin: { + divIdx: i, + offset: matchIdx - iIndex + } + }; + + // Calculate the end position. + matchIdx += queryLen; + + // Somewhat the same array as above, but use > instead of >= to get + // the end position right. + while (i !== end && matchIdx > (iIndex + bidiTexts[i].str.length)) { + iIndex += bidiTexts[i].str.length; + i++; + } + + match.end = { + divIdx: i, + offset: matchIdx - iIndex + }; + ret.push(match); + } + + return ret; + }, + + renderMatches: function TextLayerBuilder_renderMatches(matches) { + // Early exit if there is nothing to render. + if (matches.length === 0) { + return; + } + + var bidiTexts = this.textContent.items; + var textDivs = this.textDivs; + var prevEnd = null; + var pageIdx = this.pageIdx; + var isSelectedPage = (this.findController === null ? + false : (pageIdx === this.findController.selected.pageIdx)); + var selectedMatchIdx = (this.findController === null ? + -1 : this.findController.selected.matchIdx); + var highlightAll = (this.findController === null ? + false : this.findController.state.highlightAll); + var infinity = { + divIdx: -1, + offset: undefined + }; + + function beginText(begin, className) { + var divIdx = begin.divIdx; + textDivs[divIdx].textContent = ''; + appendTextToDiv(divIdx, 0, begin.offset, className); + } + + function appendTextToDiv(divIdx, fromOffset, toOffset, className) { + var div = textDivs[divIdx]; + var content = bidiTexts[divIdx].str.substring(fromOffset, toOffset); + var node = document.createTextNode(content); + if (className) { + var span = document.createElement('span'); + span.className = className; + span.appendChild(node); + div.appendChild(span); + return; + } + div.appendChild(node); + } + + var i0 = selectedMatchIdx, i1 = i0 + 1; + if (highlightAll) { + i0 = 0; + i1 = matches.length; + } else if (!isSelectedPage) { + // Not highlighting all and this isn't the selected page, so do nothing. + return; + } + + for (var i = i0; i < i1; i++) { + var match = matches[i]; + var begin = match.begin; + var end = match.end; + var isSelected = (isSelectedPage && i === selectedMatchIdx); + var highlightSuffix = (isSelected ? ' selected' : ''); + + if (this.findController) { + this.findController.updateMatchPosition(pageIdx, i, textDivs, + begin.divIdx, end.divIdx); + } + + // Match inside new div. + if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { + // If there was a previous div, then add the text at the end. + if (prevEnd !== null) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + // Clear the divs and set the content until the starting point. + beginText(begin); + } else { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); + } + + if (begin.divIdx === end.divIdx) { + appendTextToDiv(begin.divIdx, begin.offset, end.offset, + 'highlight' + highlightSuffix); + } else { + appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, + 'highlight begin' + highlightSuffix); + for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { + textDivs[n0].className = 'highlight middle' + highlightSuffix; + } + beginText(end, 'highlight end' + highlightSuffix); + } + prevEnd = end; + } + + if (prevEnd) { + appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); + } + }, + + updateMatches: function TextLayerBuilder_updateMatches() { + // Only show matches when all rendering is done. + if (!this.renderingDone) { + return; + } + + // Clear all matches. + var matches = this.matches; + var textDivs = this.textDivs; + var bidiTexts = this.textContent.items; + var clearedUntilDivIdx = -1; + + // Clear all current matches. + for (var i = 0, len = matches.length; i < len; i++) { + var match = matches[i]; + var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); + for (var n = begin, end = match.end.divIdx; n <= end; n++) { + var div = textDivs[n]; + div.textContent = bidiTexts[n].str; + div.className = ''; + } + clearedUntilDivIdx = match.end.divIdx + 1; + } + + if (this.findController === null || !this.findController.active) { + return; + } + + // Convert the matches on the page controller into the match format + // used for the textLayer. + this.matches = this.convertMatches(this.findController === null ? + [] : (this.findController.pageMatches[this.pageIdx] || [])); + this.renderMatches(this.matches); + } + }; + return TextLayerBuilder; +})(); + +/** + * @constructor + * @implements IPDFTextLayerFactory + */ +function DefaultTextLayerFactory() {} +DefaultTextLayerFactory.prototype = { + /** + * @param {HTMLDivElement} textLayerDiv + * @param {number} pageIndex + * @param {PageViewport} viewport + * @returns {TextLayerBuilder} + */ + createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport) { + return new TextLayerBuilder({ + textLayerDiv: textLayerDiv, + pageIndex: pageIndex, + viewport: viewport + }); + } +}; + + +/** + * @typedef {Object} AnnotationsLayerBuilderOptions + * @property {HTMLDivElement} pageDiv + * @property {PDFPage} pdfPage + * @property {IPDFLinkService} linkService + */ + +/** + * @class + */ +var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() { + /** + * @param {AnnotationsLayerBuilderOptions} options + * @constructs AnnotationsLayerBuilder + */ + function AnnotationsLayerBuilder(options) { + this.pageDiv = options.pageDiv; + this.pdfPage = options.pdfPage; + this.linkService = options.linkService; + + this.div = null; + } + AnnotationsLayerBuilder.prototype = + /** @lends AnnotationsLayerBuilder.prototype */ { + + /** + * @param {PageViewport} viewport + */ + setupAnnotations: + function AnnotationsLayerBuilder_setupAnnotations(viewport) { + function bindLink(link, dest) { + link.href = linkService.getDestinationHash(dest); + link.onclick = function annotationsLayerBuilderLinksOnclick() { + if (dest) { + linkService.navigateTo(dest); + } + return false; + }; + if (dest) { + link.className = 'internalLink'; + } + } + + function bindNamedAction(link, action) { + link.href = linkService.getAnchorUrl(''); + link.onclick = function annotationsLayerBuilderNamedActionOnClick() { + linkService.executeNamedAction(action); + return false; + }; + link.className = 'internalLink'; + } + + var linkService = this.linkService; + var pdfPage = this.pdfPage; + var self = this; + + pdfPage.getAnnotations().then(function (annotationsData) { + viewport = viewport.clone({ dontFlip: true }); + var transform = viewport.transform; + var transformStr = 'matrix(' + transform.join(',') + ')'; + var data, element, i, ii; + + if (self.div) { + // If an annotationLayer already exists, refresh its children's + // transformation matrices + for (i = 0, ii = annotationsData.length; i < ii; i++) { + data = annotationsData[i]; + element = self.div.querySelector( + '[data-annotation-id="' + data.id + '"]'); + if (element) { + CustomStyle.setProp('transform', element, transformStr); + } + } + // See PDFPageView.reset() + self.div.removeAttribute('hidden'); + } else { + for (i = 0, ii = annotationsData.length; i < ii; i++) { + data = annotationsData[i]; + if (!data || !data.hasHtml) { + continue; + } + + element = PDFJS.AnnotationUtils.getHtmlElement(data, + pdfPage.commonObjs); + element.setAttribute('data-annotation-id', data.id); + if (typeof mozL10n !== 'undefined') { + mozL10n.translate(element); + } + + var rect = data.rect; + var view = pdfPage.view; + rect = PDFJS.Util.normalizeRect([ + rect[0], + view[3] - rect[1] + view[1], + rect[2], + view[3] - rect[3] + view[1] + ]); + element.style.left = rect[0] + 'px'; + element.style.top = rect[1] + 'px'; + element.style.position = 'absolute'; + + CustomStyle.setProp('transform', element, transformStr); + var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px'; + CustomStyle.setProp('transformOrigin', element, transformOriginStr); + + if (data.subtype === 'Link' && !data.url) { + var link = element.getElementsByTagName('a')[0]; + if (link) { + if (data.action) { + bindNamedAction(link, data.action); + } else { + bindLink(link, ('dest' in data) ? data.dest : null); + } + } + } + + if (!self.div) { + var annotationLayerDiv = document.createElement('div'); + annotationLayerDiv.className = 'annotationLayer'; + self.pageDiv.appendChild(annotationLayerDiv); + self.div = annotationLayerDiv; + } + + self.div.appendChild(element); + } + } + }); + }, + + hide: function () { + if (!this.div) { + return; + } + this.div.setAttribute('hidden', 'true'); + } + }; + return AnnotationsLayerBuilder; +})(); + +/** + * @constructor + * @implements IPDFAnnotationsLayerFactory + */ +function DefaultAnnotationsLayerFactory() {} +DefaultAnnotationsLayerFactory.prototype = { + /** + * @param {HTMLDivElement} pageDiv + * @param {PDFPage} pdfPage + * @returns {AnnotationsLayerBuilder} + */ + createAnnotationsLayerBuilder: function (pageDiv, pdfPage) { + return new AnnotationsLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage + }); + } +}; + + +/** + * @typedef {Object} PDFViewerOptions + * @property {HTMLDivElement} container - The container for the viewer element. + * @property {HTMLDivElement} viewer - (optional) The viewer element. + * @property {IPDFLinkService} linkService - The navigation/linking service. + * @property {PDFRenderingQueue} renderingQueue - (optional) The rendering + * queue object. + * @property {boolean} removePageBorders - (optional) Removes the border shadow + * around the pages. The default is false. + */ + +/** + * Simple viewer control to display PDF content/pages. + * @class + * @implements {IRenderableView} + */ +var PDFViewer = (function pdfViewer() { + function PDFPageViewBuffer(size) { + var data = []; + this.push = function cachePush(view) { + var i = data.indexOf(view); + if (i >= 0) { + data.splice(i, 1); + } + data.push(view); + if (data.length > size) { + data.shift().destroy(); + } + }; + this.resize = function (newSize) { + size = newSize; + while (data.length > size) { + data.shift().destroy(); + } + }; + } + + /** + * @constructs PDFViewer + * @param {PDFViewerOptions} options + */ + function PDFViewer(options) { + this.container = options.container; + this.viewer = options.viewer || options.container.firstElementChild; + this.linkService = options.linkService || new SimpleLinkService(this); + this.removePageBorders = options.removePageBorders || false; + + this.defaultRenderingQueue = !options.renderingQueue; + if (this.defaultRenderingQueue) { + // Custom rendering queue is not specified, using default one + this.renderingQueue = new PDFRenderingQueue(); + this.renderingQueue.setViewer(this); + } else { + this.renderingQueue = options.renderingQueue; + } + + this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this)); + this.updateInProgress = false; + this.presentationModeState = PresentationModeState.UNKNOWN; + this._resetView(); + + if (this.removePageBorders) { + this.viewer.classList.add('removePageBorders'); + } + } + + PDFViewer.prototype = /** @lends PDFViewer.prototype */{ + get pagesCount() { + return this._pages.length; + }, + + getPageView: function (index) { + return this._pages[index]; + }, + + get currentPageNumber() { + return this._currentPageNumber; + }, + + set currentPageNumber(val) { + if (!this.pdfDocument) { + this._currentPageNumber = val; + return; + } + + var event = document.createEvent('UIEvents'); + event.initUIEvent('pagechange', true, true, window, 0); + event.updateInProgress = this.updateInProgress; + + if (!(0 < val && val <= this.pagesCount)) { + event.pageNumber = this._currentPageNumber; + event.previousPageNumber = val; + this.container.dispatchEvent(event); + return; + } + + event.previousPageNumber = this._currentPageNumber; + this._currentPageNumber = val; + event.pageNumber = val; + this.container.dispatchEvent(event); + }, + + /** + * @returns {number} + */ + get currentScale() { + return this._currentScale; + }, + + /** + * @param {number} val - Scale of the pages in percents. + */ + set currentScale(val) { + if (isNaN(val)) { + throw new Error('Invalid numeric scale'); + } + if (!this.pdfDocument) { + this._currentScale = val; + this._currentScaleValue = val.toString(); + return; + } + this._setScale(val, false); + }, + + /** + * @returns {string} + */ + get currentScaleValue() { + return this._currentScaleValue; + }, + + /** + * @param val - The scale of the pages (in percent or predefined value). + */ + set currentScaleValue(val) { + if (!this.pdfDocument) { + this._currentScale = isNaN(val) ? UNKNOWN_SCALE : val; + this._currentScaleValue = val; + return; + } + this._setScale(val, false); + }, + + /** + * @returns {number} + */ + get pagesRotation() { + return this._pagesRotation; + }, + + /** + * @param {number} rotation - The rotation of the pages (0, 90, 180, 270). + */ + set pagesRotation(rotation) { + this._pagesRotation = rotation; + + for (var i = 0, l = this._pages.length; i < l; i++) { + var pageView = this._pages[i]; + pageView.update(pageView.scale, rotation); + } + + this._setScale(this._currentScaleValue, true); + }, + + /** + * @param pdfDocument {PDFDocument} + */ + setDocument: function (pdfDocument) { + if (this.pdfDocument) { + this._resetView(); + } + + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return; + } + + var pagesCount = pdfDocument.numPages; + var pagesRefMap = this.pagesRefMap = {}; + var self = this; + + var resolvePagesPromise; + var pagesPromise = new Promise(function (resolve) { + resolvePagesPromise = resolve; + }); + this.pagesPromise = pagesPromise; + pagesPromise.then(function () { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('pagesloaded', true, true, { + pagesCount: pagesCount + }); + self.container.dispatchEvent(event); + }); + + var isOnePageRenderedResolved = false; + var resolveOnePageRendered = null; + var onePageRendered = new Promise(function (resolve) { + resolveOnePageRendered = resolve; + }); + this.onePageRendered = onePageRendered; + + var bindOnAfterAndBeforeDraw = function (pageView) { + pageView.onBeforeDraw = function pdfViewLoadOnBeforeDraw() { + // Add the page to the buffer at the start of drawing. That way it can + // be evicted from the buffer and destroyed even if we pause its + // rendering. + self._buffer.push(this); + }; + // when page is painted, using the image as thumbnail base + pageView.onAfterDraw = function pdfViewLoadOnAfterDraw() { + if (!isOnePageRenderedResolved) { + isOnePageRenderedResolved = true; + resolveOnePageRendered(); + } + }; + }; + + var firstPagePromise = pdfDocument.getPage(1); + this.firstPagePromise = firstPagePromise; + + // Fetch a single page so we can get a viewport that will be the default + // viewport for all pages + return firstPagePromise.then(function(pdfPage) { + var scale = this._currentScale || 1.0; + var viewport = pdfPage.getViewport(scale * CSS_UNITS); + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var textLayerFactory = null; + if (!PDFJS.disableTextLayer) { + textLayerFactory = this; + } + var pageView = new PDFPageView({ + container: this.viewer, + id: pageNum, + scale: scale, + defaultViewport: viewport.clone(), + renderingQueue: this.renderingQueue, + textLayerFactory: textLayerFactory, + annotationsLayerFactory: this + }); + bindOnAfterAndBeforeDraw(pageView); + this._pages.push(pageView); + } + + // Fetch all the pages since the viewport is needed before printing + // starts to create the correct size canvas. Wait until one page is + // rendered so we don't tie up too many resources early on. + onePageRendered.then(function () { + if (!PDFJS.disableAutoFetch) { + var getPagesLeft = pagesCount; + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + pdfDocument.getPage(pageNum).then(function (pageNum, pdfPage) { + var pageView = self._pages[pageNum - 1]; + if (!pageView.pdfPage) { + pageView.setPdfPage(pdfPage); + } + var refStr = pdfPage.ref.num + ' ' + pdfPage.ref.gen + ' R'; + pagesRefMap[refStr] = pageNum; + getPagesLeft--; + if (!getPagesLeft) { + resolvePagesPromise(); + } + }.bind(null, pageNum)); + } + } else { + // XXX: Printing is semi-broken with auto fetch disabled. + resolvePagesPromise(); + } + }); + + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('pagesinit', true, true, null); + self.container.dispatchEvent(event); + + if (this.defaultRenderingQueue) { + this.update(); + } + + if (this.findController) { + this.findController.resolveFirstPage(); + } + }.bind(this)); + }, + + _resetView: function () { + this._pages = []; + this._currentPageNumber = 1; + this._currentScale = UNKNOWN_SCALE; + this._currentScaleValue = null; + this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); + this._location = null; + this._pagesRotation = 0; + this._pagesRequests = []; + + var container = this.viewer; + while (container.hasChildNodes()) { + container.removeChild(container.lastChild); + } + }, + + _scrollUpdate: function () { + if (this.pagesCount === 0) { + return; + } + this.update(); + for (var i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].updatePosition(); + } + }, + + _setScaleDispatchEvent: function pdfViewer_setScaleDispatchEvent( + newScale, newValue, preset) { + var event = document.createEvent('UIEvents'); + event.initUIEvent('scalechange', true, true, window, 0); + event.scale = newScale; + if (preset) { + event.presetValue = newValue; + } + this.container.dispatchEvent(event); + }, + + _setScaleUpdatePages: function pdfViewer_setScaleUpdatePages( + newScale, newValue, noScroll, preset) { + this._currentScaleValue = newValue; + if (newScale === this._currentScale) { + if (preset) { + this._setScaleDispatchEvent(newScale, newValue, true); + } + return; + } + + for (var i = 0, ii = this._pages.length; i < ii; i++) { + this._pages[i].update(newScale); + } + this._currentScale = newScale; + + if (!noScroll) { + var page = this._currentPageNumber, dest; + if (this._location && !IGNORE_CURRENT_POSITION_ON_ZOOM && + !(this.isInPresentationMode || this.isChangingPresentationMode)) { + page = this._location.pageNumber; + dest = [null, { name: 'XYZ' }, this._location.left, + this._location.top, null]; + } + this.scrollPageIntoView(page, dest); + } + + this._setScaleDispatchEvent(newScale, newValue, preset); + }, + + _setScale: function pdfViewer_setScale(value, noScroll) { + if (value === 'custom') { + return; + } + var scale = parseFloat(value); + + if (scale > 0) { + this._setScaleUpdatePages(scale, value, noScroll, false); + } else { + var currentPage = this._pages[this._currentPageNumber - 1]; + if (!currentPage) { + return; + } + var hPadding = (this.isInPresentationMode || this.removePageBorders) ? + 0 : SCROLLBAR_PADDING; + var vPadding = (this.isInPresentationMode || this.removePageBorders) ? + 0 : VERTICAL_PADDING; + var pageWidthScale = (this.container.clientWidth - hPadding) / + currentPage.width * currentPage.scale; + var pageHeightScale = (this.container.clientHeight - vPadding) / + currentPage.height * currentPage.scale; + switch (value) { + case 'page-actual': + scale = 1; + break; + case 'page-width': + scale = pageWidthScale; + break; + case 'page-height': + scale = pageHeightScale; + break; + case 'page-fit': + scale = Math.min(pageWidthScale, pageHeightScale); + break; + case 'auto': + var isLandscape = (currentPage.width > currentPage.height); + // For pages in landscape mode, fit the page height to the viewer + // *unless* the page would thus become too wide to fit horizontally. + var horizontalScale = isLandscape ? + Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; + scale = Math.min(MAX_AUTO_SCALE, horizontalScale); + break; + default: + console.error('pdfViewSetScale: \'' + value + + '\' is an unknown zoom value.'); + return; + } + this._setScaleUpdatePages(scale, value, noScroll, true); + } + }, + + /** + * Scrolls page into view. + * @param {number} pageNumber + * @param {Array} dest - (optional) original PDF destination array: + * + */ + scrollPageIntoView: function PDFViewer_scrollPageIntoView(pageNumber, + dest) { + var pageView = this._pages[pageNumber - 1]; + + if (this.isInPresentationMode) { + if (this.linkService.page !== pageView.id) { + // Avoid breaking getVisiblePages in presentation mode. + this.linkService.page = pageView.id; + return; + } + dest = null; + // Fixes the case when PDF has different page sizes. + this._setScale(this.currentScaleValue, true); + } + if (!dest) { + scrollIntoView(pageView.div); + return; + } + + var x = 0, y = 0; + var width = 0, height = 0, widthScale, heightScale; + var changeOrientation = (pageView.rotation % 180 === 0 ? false : true); + var pageWidth = (changeOrientation ? pageView.height : pageView.width) / + pageView.scale / CSS_UNITS; + var pageHeight = (changeOrientation ? pageView.width : pageView.height) / + pageView.scale / CSS_UNITS; + var scale = 0; + switch (dest[1].name) { + case 'XYZ': + x = dest[2]; + y = dest[3]; + scale = dest[4]; + // If x and/or y coordinates are not supplied, default to + // _top_ left of the page (not the obvious bottom left, + // since aligning the bottom of the intended page with the + // top of the window is rarely helpful). + x = x !== null ? x : 0; + y = y !== null ? y : pageHeight; + break; + case 'Fit': + case 'FitB': + scale = 'page-fit'; + break; + case 'FitH': + case 'FitBH': + y = dest[2]; + scale = 'page-width'; + break; + case 'FitV': + case 'FitBV': + x = dest[2]; + width = pageWidth; + height = pageHeight; + scale = 'page-height'; + break; + case 'FitR': + x = dest[2]; + y = dest[3]; + width = dest[4] - x; + height = dest[5] - y; + var viewerContainer = this.container; + var hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING; + var vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING; + + widthScale = (viewerContainer.clientWidth - hPadding) / + width / CSS_UNITS; + heightScale = (viewerContainer.clientHeight - vPadding) / + height / CSS_UNITS; + scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); + break; + default: + return; + } + + if (scale && scale !== this.currentScale) { + this.currentScaleValue = scale; + } else if (this.currentScale === UNKNOWN_SCALE) { + this.currentScaleValue = DEFAULT_SCALE; + } + + if (scale === 'page-fit' && !dest[4]) { + scrollIntoView(pageView.div); + return; + } + + var boundingRect = [ + pageView.viewport.convertToViewportPoint(x, y), + pageView.viewport.convertToViewportPoint(x + width, y + height) + ]; + var left = Math.min(boundingRect[0][0], boundingRect[1][0]); + var top = Math.min(boundingRect[0][1], boundingRect[1][1]); + + scrollIntoView(pageView.div, { left: left, top: top }); + }, + + _updateLocation: function (firstPage) { + var currentScale = this._currentScale; + var currentScaleValue = this._currentScaleValue; + var normalizedScaleValue = + parseFloat(currentScaleValue) === currentScale ? + Math.round(currentScale * 10000) / 100 : currentScaleValue; + + var pageNumber = firstPage.id; + var pdfOpenParams = '#page=' + pageNumber; + pdfOpenParams += '&zoom=' + normalizedScaleValue; + var currentPageView = this._pages[pageNumber - 1]; + var container = this.container; + var topLeft = currentPageView.getPagePoint( + (container.scrollLeft - firstPage.x), + (container.scrollTop - firstPage.y)); + var intLeft = Math.round(topLeft[0]); + var intTop = Math.round(topLeft[1]); + pdfOpenParams += ',' + intLeft + ',' + intTop; + + this._location = { + pageNumber: pageNumber, + scale: normalizedScaleValue, + top: intTop, + left: intLeft, + pdfOpenParams: pdfOpenParams + }; + }, + + update: function () { + var visible = this._getVisiblePages(); + var visiblePages = visible.views; + if (visiblePages.length === 0) { + return; + } + + this.updateInProgress = true; + + var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, + 2 * visiblePages.length + 1); + this._buffer.resize(suggestedCacheSize); + + this.renderingQueue.renderHighestPriority(visible); + + var currentId = this.currentPageNumber; + var firstPage = visible.first; + + for (var i = 0, ii = visiblePages.length, stillFullyVisible = false; + i < ii; ++i) { + var page = visiblePages[i]; + + if (page.percent < 100) { + break; + } + if (page.id === currentId) { + stillFullyVisible = true; + break; + } + } + + if (!stillFullyVisible) { + currentId = visiblePages[0].id; + } + + if (!this.isInPresentationMode) { + this.currentPageNumber = currentId; + } + + this._updateLocation(firstPage); + + this.updateInProgress = false; + + var event = document.createEvent('UIEvents'); + event.initUIEvent('updateviewarea', true, true, window, 0); + event.location = this._location; + this.container.dispatchEvent(event); + }, + + containsElement: function (element) { + return this.container.contains(element); + }, + + focus: function () { + this.container.focus(); + }, + + get isInPresentationMode() { + return this.presentationModeState === PresentationModeState.FULLSCREEN; + }, + + get isChangingPresentationMode() { + return this.PresentationModeState === PresentationModeState.CHANGING; + }, + + get isHorizontalScrollbarEnabled() { + return (this.isInPresentationMode ? + false : (this.container.scrollWidth > this.container.clientWidth)); + }, + + _getVisiblePages: function () { + if (!this.isInPresentationMode) { + return getVisibleElements(this.container, this._pages, true); + } else { + // The algorithm in getVisibleElements doesn't work in all browsers and + // configurations when presentation mode is active. + var visible = []; + var currentPage = this._pages[this._currentPageNumber - 1]; + visible.push({ id: currentPage.id, view: currentPage }); + return { first: currentPage, last: currentPage, views: visible }; + } + }, + + cleanup: function () { + for (var i = 0, ii = this._pages.length; i < ii; i++) { + if (this._pages[i] && + this._pages[i].renderingState !== RenderingStates.FINISHED) { + this._pages[i].reset(); + } + } + }, + + /** + * @param {PDFPageView} pageView + * @returns {PDFPage} + * @private + */ + _ensurePdfPageLoaded: function (pageView) { + if (pageView.pdfPage) { + return Promise.resolve(pageView.pdfPage); + } + var pageNumber = pageView.id; + if (this._pagesRequests[pageNumber]) { + return this._pagesRequests[pageNumber]; + } + var promise = this.pdfDocument.getPage(pageNumber).then( + function (pdfPage) { + pageView.setPdfPage(pdfPage); + this._pagesRequests[pageNumber] = null; + return pdfPage; + }.bind(this)); + this._pagesRequests[pageNumber] = promise; + return promise; + }, + + forceRendering: function (currentlyVisiblePages) { + var visiblePages = currentlyVisiblePages || this._getVisiblePages(); + var pageView = this.renderingQueue.getHighestPriority(visiblePages, + this._pages, + this.scroll.down); + if (pageView) { + this._ensurePdfPageLoaded(pageView).then(function () { + this.renderingQueue.renderView(pageView); + }.bind(this)); + return true; + } + return false; + }, + + getPageTextContent: function (pageIndex) { + return this.pdfDocument.getPage(pageIndex + 1).then(function (page) { + return page.getTextContent(); + }); + }, + + /** + * @param {HTMLDivElement} textLayerDiv + * @param {number} pageIndex + * @param {PageViewport} viewport + * @returns {TextLayerBuilder} + */ + createTextLayerBuilder: function (textLayerDiv, pageIndex, viewport) { + return new TextLayerBuilder({ + textLayerDiv: textLayerDiv, + pageIndex: pageIndex, + viewport: viewport, + findController: this.isInPresentationMode ? null : this.findController + }); + }, + + /** + * @param {HTMLDivElement} pageDiv + * @param {PDFPage} pdfPage + * @returns {AnnotationsLayerBuilder} + */ + createAnnotationsLayerBuilder: function (pageDiv, pdfPage) { + return new AnnotationsLayerBuilder({ + pageDiv: pageDiv, + pdfPage: pdfPage, + linkService: this.linkService + }); + }, + + setFindController: function (findController) { + this.findController = findController; + }, + }; + + return PDFViewer; +})(); + +var SimpleLinkService = (function SimpleLinkServiceClosure() { + function SimpleLinkService(pdfViewer) { + this.pdfViewer = pdfViewer; + } + SimpleLinkService.prototype = { + /** + * @returns {number} + */ + get page() { + return this.pdfViewer.currentPageNumber; + }, + /** + * @param {number} value + */ + set page(value) { + this.pdfViewer.currentPageNumber = value; + }, + /** + * @param dest - The PDF destination object. + */ + navigateTo: function (dest) {}, + /** + * @param dest - The PDF destination object. + * @returns {string} The hyperlink to the PDF object. + */ + getDestinationHash: function (dest) { + return '#'; + }, + /** + * @param hash - The PDF parameters/hash. + * @returns {string} The hyperlink to the PDF object. + */ + getAnchorUrl: function (hash) { + return '#'; + }, + /** + * @param {string} hash + */ + setHash: function (hash) {}, + /** + * @param {string} action + */ + executeNamedAction: function (action) {}, + }; + return SimpleLinkService; +})(); + + +var THUMBNAIL_SCROLL_MARGIN = -19; + + +var THUMBNAIL_WIDTH = 98; // px +var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; // px + +/** + * @typedef {Object} PDFThumbnailViewOptions + * @property {HTMLDivElement} container - The viewer element. + * @property {number} id - The thumbnail's unique ID (normally its number). + * @property {PageViewport} defaultViewport - The page viewport. + * @property {IPDFLinkService} linkService - The navigation/linking service. + * @property {PDFRenderingQueue} renderingQueue - The rendering queue object. + */ + +/** + * @class + * @implements {IRenderableView} + */ +var PDFThumbnailView = (function PDFThumbnailViewClosure() { + function getTempCanvas(width, height) { + var tempCanvas = PDFThumbnailView.tempImageCache; + if (!tempCanvas) { + tempCanvas = document.createElement('canvas'); + PDFThumbnailView.tempImageCache = tempCanvas; + } + tempCanvas.width = width; + tempCanvas.height = height; + + // Since this is a temporary canvas, we need to fill the canvas with a white + // background ourselves. |_getPageDrawContext| uses CSS rules for this. + var ctx = tempCanvas.getContext('2d'); + ctx.save(); + ctx.fillStyle = 'rgb(255, 255, 255)'; + ctx.fillRect(0, 0, width, height); + ctx.restore(); + return tempCanvas; + } + + /** + * @constructs PDFThumbnailView + * @param {PDFThumbnailViewOptions} options + */ + function PDFThumbnailView(options) { + var container = options.container; + var id = options.id; + var defaultViewport = options.defaultViewport; + var linkService = options.linkService; + var renderingQueue = options.renderingQueue; + + this.id = id; + this.renderingId = 'thumbnail' + id; + + this.pdfPage = null; + this.rotation = 0; + this.viewport = defaultViewport; + this.pdfPageRotate = defaultViewport.rotation; + + this.linkService = linkService; + this.renderingQueue = renderingQueue; + + this.hasImage = false; + this.resume = null; + this.renderingState = RenderingStates.INITIAL; + + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + + this.canvasWidth = THUMBNAIL_WIDTH; + this.canvasHeight = (this.canvasWidth / this.pageRatio) | 0; + this.scale = this.canvasWidth / this.pageWidth; + + var anchor = document.createElement('a'); + anchor.href = linkService.getAnchorUrl('#page=' + id); + anchor.title = mozL10n.get('thumb_page_title', {page: id}, 'Page {{page}}'); + anchor.onclick = function stopNavigation() { + linkService.page = id; + return false; + }; + + var div = document.createElement('div'); + div.id = 'thumbnailContainer' + id; + div.className = 'thumbnail'; + this.div = div; + + if (id === 1) { + // Highlight the thumbnail of the first page when no page number is + // specified (or exists in cache) when the document is loaded. + div.classList.add('selected'); + } + + var ring = document.createElement('div'); + ring.className = 'thumbnailSelectionRing'; + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + 'px'; + ring.style.height = this.canvasHeight + borderAdjustment + 'px'; + this.ring = ring; + + div.appendChild(ring); + anchor.appendChild(div); + container.appendChild(anchor); + } + + PDFThumbnailView.prototype = { + setPdfPage: function PDFThumbnailView_setPdfPage(pdfPage) { + this.pdfPage = pdfPage; + this.pdfPageRotate = pdfPage.rotate; + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = pdfPage.getViewport(1, totalRotation); + this.reset(); + }, + + reset: function PDFThumbnailView_reset() { + if (this.renderTask) { + this.renderTask.cancel(); + } + this.hasImage = false; + this.resume = null; + this.renderingState = RenderingStates.INITIAL; + + this.pageWidth = this.viewport.width; + this.pageHeight = this.viewport.height; + this.pageRatio = this.pageWidth / this.pageHeight; + + this.canvasHeight = (this.canvasWidth / this.pageRatio) | 0; + this.scale = (this.canvasWidth / this.pageWidth); + + this.div.removeAttribute('data-loaded'); + var ring = this.ring; + var childNodes = ring.childNodes; + for (var i = childNodes.length - 1; i >= 0; i--) { + ring.removeChild(childNodes[i]); + } + var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; + ring.style.width = this.canvasWidth + borderAdjustment + 'px'; + ring.style.height = this.canvasHeight + borderAdjustment + 'px'; + + if (this.canvas) { + // Zeroing the width and height causes Firefox to release graphics + // resources immediately, which can greatly reduce memory consumption. + this.canvas.width = 0; + this.canvas.height = 0; + delete this.canvas; + } + }, + + update: function PDFThumbnailView_update(rotation) { + if (typeof rotation !== 'undefined') { + this.rotation = rotation; + } + var totalRotation = (this.rotation + this.pdfPageRotate) % 360; + this.viewport = this.viewport.clone({ + scale: 1, + rotation: totalRotation + }); + this.reset(); + }, + + /** + * @private + */ + _getPageDrawContext: + function PDFThumbnailView_getPageDrawContext(noCtxScale) { + var canvas = document.createElement('canvas'); + canvas.id = this.renderingId; + + canvas.className = 'thumbnailImage'; + canvas.setAttribute('aria-label', mozL10n.get('thumb_page_canvas', + {page: this.id}, 'Thumbnail of Page {{page}}')); + + this.canvas = canvas; + this.div.setAttribute('data-loaded', true); + this.ring.appendChild(canvas); + + var ctx = canvas.getContext('2d'); + var outputScale = getOutputScale(ctx); + canvas.width = (this.canvasWidth * outputScale.sx) | 0; + canvas.height = (this.canvasHeight * outputScale.sy) | 0; + canvas.style.width = this.canvasWidth + 'px'; + canvas.style.height = this.canvasHeight + 'px'; + if (!noCtxScale && outputScale.scaled) { + ctx.scale(outputScale.sx, outputScale.sy); + } + return ctx; + }, + + draw: function PDFThumbnailView_draw() { + if (this.renderingState !== RenderingStates.INITIAL) { + console.error('Must be in new state before drawing'); + } + if (this.hasImage) { + return Promise.resolve(undefined); + } + this.hasImage = true; + this.renderingState = RenderingStates.RUNNING; + + var resolveRenderPromise, rejectRenderPromise; + var promise = new Promise(function (resolve, reject) { + resolveRenderPromise = resolve; + rejectRenderPromise = reject; + }); + + var self = this; + function thumbnailDrawCallback(error) { + // The renderTask may have been replaced by a new one, so only remove + // the reference to the renderTask if it matches the one that is + // triggering this callback. + if (renderTask === self.renderTask) { + self.renderTask = null; + } + if (error === 'cancelled') { + rejectRenderPromise(error); + return; + } + self.renderingState = RenderingStates.FINISHED; + + if (!error) { + resolveRenderPromise(undefined); + } else { + rejectRenderPromise(error); + } + } + + var ctx = this._getPageDrawContext(); + var drawViewport = this.viewport.clone({ scale: this.scale }); + var renderContinueCallback = function renderContinueCallback(cont) { + if (!self.renderingQueue.isHighestPriority(self)) { + self.renderingState = RenderingStates.PAUSED; + self.resume = function resumeCallback() { + self.renderingState = RenderingStates.RUNNING; + cont(); + }; + return; + } + cont(); + }; + + var renderContext = { + canvasContext: ctx, + viewport: drawViewport, + continueCallback: renderContinueCallback + }; + var renderTask = this.renderTask = this.pdfPage.render(renderContext); + + renderTask.promise.then( + function pdfPageRenderCallback() { + thumbnailDrawCallback(null); + }, + function pdfPageRenderError(error) { + thumbnailDrawCallback(error); + } + ); + return promise; + }, + + setImage: function PDFThumbnailView_setImage(pageView) { + var img = pageView.canvas; + if (this.hasImage || !img) { + return; + } + if (!this.pdfPage) { + this.setPdfPage(pageView.pdfPage); + } + this.hasImage = true; + this.renderingState = RenderingStates.FINISHED; + + var ctx = this._getPageDrawContext(true); + var canvas = ctx.canvas; + + if (img.width <= 2 * canvas.width) { + ctx.drawImage(img, 0, 0, img.width, img.height, + 0, 0, canvas.width, canvas.height); + return; + } + // drawImage does an awful job of rescaling the image, doing it gradually. + var MAX_NUM_SCALING_STEPS = 3; + var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; + var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; + var reducedImage = getTempCanvas(reducedWidth, reducedHeight); + var reducedImageCtx = reducedImage.getContext('2d'); + + while (reducedWidth > img.width || reducedHeight > img.height) { + reducedWidth >>= 1; + reducedHeight >>= 1; + } + reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, + 0, 0, reducedWidth, reducedHeight); + while (reducedWidth > 2 * canvas.width) { + reducedImageCtx.drawImage(reducedImage, + 0, 0, reducedWidth, reducedHeight, + 0, 0, reducedWidth >> 1, reducedHeight >> 1); + reducedWidth >>= 1; + reducedHeight >>= 1; + } + ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, + 0, 0, canvas.width, canvas.height); + } + }; + + return PDFThumbnailView; +})(); + +PDFThumbnailView.tempImageCache = null; + + +/** + * @typedef {Object} PDFThumbnailViewerOptions + * @property {HTMLDivElement} container - The container for the thumbnail + * elements. + * @property {IPDFLinkService} linkService - The navigation/linking service. + * @property {PDFRenderingQueue} renderingQueue - The rendering queue object. + */ + +/** + * Simple viewer control to display thumbnails for pages. + * @class + * @implements {IRenderableView} + */ +var PDFThumbnailViewer = (function PDFThumbnailViewerClosure() { + /** + * @constructs PDFThumbnailViewer + * @param {PDFThumbnailViewerOptions} options + */ + function PDFThumbnailViewer(options) { + this.container = options.container; + this.renderingQueue = options.renderingQueue; + this.linkService = options.linkService; + + this.scroll = watchScroll(this.container, this._scrollUpdated.bind(this)); + this._resetView(); + } + + PDFThumbnailViewer.prototype = { + /** + * @private + */ + _scrollUpdated: function PDFThumbnailViewer_scrollUpdated() { + this.renderingQueue.renderHighestPriority(); + }, + + getThumbnail: function PDFThumbnailViewer_getThumbnail(index) { + return this.thumbnails[index]; + }, + + /** + * @private + */ + _getVisibleThumbs: function PDFThumbnailViewer_getVisibleThumbs() { + return getVisibleElements(this.container, this.thumbnails); + }, + + scrollThumbnailIntoView: + function PDFThumbnailViewer_scrollThumbnailIntoView(page) { + var selected = document.querySelector('.thumbnail.selected'); + if (selected) { + selected.classList.remove('selected'); + } + var thumbnail = document.getElementById('thumbnailContainer' + page); + if (thumbnail) { + thumbnail.classList.add('selected'); + } + var visibleThumbs = this._getVisibleThumbs(); + var numVisibleThumbs = visibleThumbs.views.length; + + // If the thumbnail isn't currently visible, scroll it into view. + if (numVisibleThumbs > 0) { + var first = visibleThumbs.first.id; + // Account for only one thumbnail being visible. + var last = (numVisibleThumbs > 1 ? visibleThumbs.last.id : first); + if (page <= first || page >= last) { + scrollIntoView(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); + } + } + }, + + get pagesRotation() { + return this._pagesRotation; + }, + + set pagesRotation(rotation) { + this._pagesRotation = rotation; + for (var i = 0, l = this.thumbnails.length; i < l; i++) { + var thumb = this.thumbnails[i]; + thumb.update(rotation); + } + }, + + cleanup: function PDFThumbnailViewer_cleanup() { + var tempCanvas = PDFThumbnailView.tempImageCache; + if (tempCanvas) { + // Zeroing the width and height causes Firefox to release graphics + // resources immediately, which can greatly reduce memory consumption. + tempCanvas.width = 0; + tempCanvas.height = 0; + } + PDFThumbnailView.tempImageCache = null; + }, + + /** + * @private + */ + _resetView: function PDFThumbnailViewer_resetView() { + this.thumbnails = []; + this._pagesRotation = 0; + this._pagesRequests = []; + }, + + setDocument: function PDFThumbnailViewer_setDocument(pdfDocument) { + if (this.pdfDocument) { + // cleanup of the elements and views + var thumbsView = this.container; + while (thumbsView.hasChildNodes()) { + thumbsView.removeChild(thumbsView.lastChild); + } + this._resetView(); + } + + this.pdfDocument = pdfDocument; + if (!pdfDocument) { + return Promise.resolve(); + } + + return pdfDocument.getPage(1).then(function (firstPage) { + var pagesCount = pdfDocument.numPages; + var viewport = firstPage.getViewport(1.0); + for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { + var thumbnail = new PDFThumbnailView({ + container: this.container, + id: pageNum, + defaultViewport: viewport.clone(), + linkService: this.linkService, + renderingQueue: this.renderingQueue + }); + this.thumbnails.push(thumbnail); + } + }.bind(this)); + }, + + /** + * @param {PDFPageView} pageView + * @returns {PDFPage} + * @private + */ + _ensurePdfPageLoaded: + function PDFThumbnailViewer_ensurePdfPageLoaded(thumbView) { + if (thumbView.pdfPage) { + return Promise.resolve(thumbView.pdfPage); + } + var pageNumber = thumbView.id; + if (this._pagesRequests[pageNumber]) { + return this._pagesRequests[pageNumber]; + } + var promise = this.pdfDocument.getPage(pageNumber).then( + function (pdfPage) { + thumbView.setPdfPage(pdfPage); + this._pagesRequests[pageNumber] = null; + return pdfPage; + }.bind(this)); + this._pagesRequests[pageNumber] = promise; + return promise; + }, + + ensureThumbnailVisible: + function PDFThumbnailViewer_ensureThumbnailVisible(page) { + // Ensure that the thumbnail of the current page is visible + // when switching from another view. + scrollIntoView(document.getElementById('thumbnailContainer' + page)); + }, + + forceRendering: function () { + var visibleThumbs = this._getVisibleThumbs(); + var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, + this.thumbnails, + this.scroll.down); + if (thumbView) { + this._ensurePdfPageLoaded(thumbView).then(function () { + this.renderingQueue.renderView(thumbView); + }.bind(this)); + return true; + } + return false; + } + }; + + return PDFThumbnailViewer; +})(); + + +/** + * @typedef {Object} PDFOutlineViewOptions + * @property {HTMLDivElement} container - The viewer element. + * @property {Array} outline - An array of outline objects. + * @property {IPDFLinkService} linkService - The navigation/linking service. + */ + +/** + * @class + */ +var PDFOutlineView = (function PDFOutlineViewClosure() { + /** + * @constructs PDFOutlineView + * @param {PDFOutlineViewOptions} options + */ + function PDFOutlineView(options) { + this.container = options.container; + this.outline = options.outline; + this.linkService = options.linkService; + } + + PDFOutlineView.prototype = { + reset: function PDFOutlineView_reset() { + var container = this.container; + while (container.firstChild) { + container.removeChild(container.firstChild); + } + }, + + /** + * @private + */ + _dispatchEvent: function PDFOutlineView_dispatchEvent(outlineCount) { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('outlineloaded', true, true, { + outlineCount: outlineCount + }); + this.container.dispatchEvent(event); + }, + + /** + * @private + */ + _bindLink: function PDFOutlineView_bindLink(element, item) { + var linkService = this.linkService; + element.href = linkService.getDestinationHash(item.dest); + element.onclick = function goToDestination(e) { + linkService.navigateTo(item.dest); + return false; + }; + }, + + render: function PDFOutlineView_render() { + var outline = this.outline; + var outlineCount = 0; + + this.reset(); + + if (!outline) { + this._dispatchEvent(outlineCount); + return; + } + + var queue = [{ parent: this.container, items: this.outline }]; + while (queue.length > 0) { + var levelData = queue.shift(); + for (var i = 0, len = levelData.items.length; i < len; i++) { + var item = levelData.items[i]; + var div = document.createElement('div'); + div.className = 'outlineItem'; + var element = document.createElement('a'); + this._bindLink(element, item); + element.textContent = item.title; + div.appendChild(element); + + if (item.items.length > 0) { + var itemsDiv = document.createElement('div'); + itemsDiv.className = 'outlineItems'; + div.appendChild(itemsDiv); + queue.push({ parent: itemsDiv, items: item.items }); + } + + levelData.parent.appendChild(div); + outlineCount++; + } + } + + this._dispatchEvent(outlineCount); + } + }; + + return PDFOutlineView; +})(); + + +/** + * @typedef {Object} PDFAttachmentViewOptions + * @property {HTMLDivElement} container - The viewer element. + * @property {Array} attachments - An array of attachment objects. + * @property {DownloadManager} downloadManager - The download manager. + */ + +/** + * @class + */ +var PDFAttachmentView = (function PDFAttachmentViewClosure() { + /** + * @constructs PDFAttachmentView + * @param {PDFAttachmentViewOptions} options + */ + function PDFAttachmentView(options) { + this.container = options.container; + this.attachments = options.attachments; + this.downloadManager = options.downloadManager; + } + + PDFAttachmentView.prototype = { + reset: function PDFAttachmentView_reset() { + var container = this.container; + while (container.firstChild) { + container.removeChild(container.firstChild); + } + }, + + /** + * @private + */ + _dispatchEvent: function PDFAttachmentView_dispatchEvent(attachmentsCount) { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('attachmentsloaded', true, true, { + attachmentsCount: attachmentsCount + }); + this.container.dispatchEvent(event); + }, + + /** + * @private + */ + _bindLink: function PDFAttachmentView_bindLink(button, content, filename) { + button.onclick = function downloadFile(e) { + this.downloadManager.downloadData(content, filename, ''); + return false; + }.bind(this); + }, + + render: function PDFAttachmentView_render() { + var attachments = this.attachments; + var attachmentsCount = 0; + + this.reset(); + + if (!attachments) { + this._dispatchEvent(attachmentsCount); + return; + } + + var names = Object.keys(attachments).sort(function(a, b) { + return a.toLowerCase().localeCompare(b.toLowerCase()); + }); + attachmentsCount = names.length; + + for (var i = 0; i < attachmentsCount; i++) { + var item = attachments[names[i]]; + var filename = getFileName(item.filename); + var div = document.createElement('div'); + div.className = 'attachmentsItem'; + var button = document.createElement('button'); + this._bindLink(button, item.content, filename); + button.textContent = filename; + div.appendChild(button); + this.container.appendChild(div); + } + + this._dispatchEvent(attachmentsCount); + } + }; + + return PDFAttachmentView; +})(); + + +var PDFViewerApplication = { + initialBookmark: document.location.hash.substring(1), + initialized: false, + fellback: false, + pdfDocument: null, + sidebarOpen: false, + printing: false, + /** @type {PDFViewer} */ + pdfViewer: null, + /** @type {PDFThumbnailViewer} */ + pdfThumbnailViewer: null, + /** @type {PDFRenderingQueue} */ + pdfRenderingQueue: null, + /** @type {PDFPresentationMode} */ + pdfPresentationMode: null, + /** @type {PDFDocumentProperties} */ + pdfDocumentProperties: null, + pageRotation: 0, + updateScaleControls: true, + isInitialViewSet: false, + animationStartedPromise: null, + preferenceSidebarViewOnLoad: SidebarView.NONE, + preferencePdfBugEnabled: false, + preferenceShowPreviousViewOnLoad: true, + preferenceDefaultZoomValue: '', + isViewerEmbedded: (window.parent !== window), + url: '', + + // called once when the document is loaded + initialize: function pdfViewInitialize() { + var pdfRenderingQueue = new PDFRenderingQueue(); + pdfRenderingQueue.onIdle = this.cleanup.bind(this); + this.pdfRenderingQueue = pdfRenderingQueue; + + var container = document.getElementById('viewerContainer'); + var viewer = document.getElementById('viewer'); + this.pdfViewer = new PDFViewer({ + container: container, + viewer: viewer, + renderingQueue: pdfRenderingQueue, + linkService: this + }); + pdfRenderingQueue.setViewer(this.pdfViewer); + + var thumbnailContainer = document.getElementById('thumbnailView'); + this.pdfThumbnailViewer = new PDFThumbnailViewer({ + container: thumbnailContainer, + renderingQueue: pdfRenderingQueue, + linkService: this + }); + pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer); + + Preferences.initialize(); + + this.findController = new PDFFindController({ + pdfViewer: this.pdfViewer, + integratedFind: this.supportsIntegratedFind + }); + this.pdfViewer.setFindController(this.findController); + + this.findBar = new PDFFindBar({ + bar: document.getElementById('findbar'), + toggleButton: document.getElementById('viewFind'), + findField: document.getElementById('findInput'), + highlightAllCheckbox: document.getElementById('findHighlightAll'), + caseSensitiveCheckbox: document.getElementById('findMatchCase'), + findMsg: document.getElementById('findMsg'), + findStatusIcon: document.getElementById('findStatusIcon'), + findPreviousButton: document.getElementById('findPrevious'), + findNextButton: document.getElementById('findNext'), + findController: this.findController + }); + + this.findController.setFindBar(this.findBar); + + HandTool.initialize({ + container: container, + toggleHandTool: document.getElementById('toggleHandTool') + }); + + this.pdfDocumentProperties = new PDFDocumentProperties({ + overlayName: 'documentPropertiesOverlay', + closeButton: document.getElementById('documentPropertiesClose'), + fields: { + 'fileName': document.getElementById('fileNameField'), + 'fileSize': document.getElementById('fileSizeField'), + 'title': document.getElementById('titleField'), + 'author': document.getElementById('authorField'), + 'subject': document.getElementById('subjectField'), + 'keywords': document.getElementById('keywordsField'), + 'creationDate': document.getElementById('creationDateField'), + 'modificationDate': document.getElementById('modificationDateField'), + 'creator': document.getElementById('creatorField'), + 'producer': document.getElementById('producerField'), + 'version': document.getElementById('versionField'), + 'pageCount': document.getElementById('pageCountField') + } + }); + + SecondaryToolbar.initialize({ + toolbar: document.getElementById('secondaryToolbar'), + toggleButton: document.getElementById('secondaryToolbarToggle'), + presentationModeButton: + document.getElementById('secondaryPresentationMode'), + openFile: document.getElementById('secondaryOpenFile'), + print: document.getElementById('secondaryPrint'), + download: document.getElementById('secondaryDownload'), + viewBookmark: document.getElementById('secondaryViewBookmark'), + firstPage: document.getElementById('firstPage'), + lastPage: document.getElementById('lastPage'), + pageRotateCw: document.getElementById('pageRotateCw'), + pageRotateCcw: document.getElementById('pageRotateCcw'), + documentPropertiesButton: document.getElementById('documentProperties') + }); + + if (this.supportsFullscreen) { + var toolbar = SecondaryToolbar; + this.pdfPresentationMode = new PDFPresentationMode({ + container: container, + viewer: viewer, + pdfThumbnailViewer: this.pdfThumbnailViewer, + contextMenuItems: [ + { element: document.getElementById('contextFirstPage'), + handler: toolbar.firstPageClick.bind(toolbar) }, + { element: document.getElementById('contextLastPage'), + handler: toolbar.lastPageClick.bind(toolbar) }, + { element: document.getElementById('contextPageRotateCw'), + handler: toolbar.pageRotateCwClick.bind(toolbar) }, + { element: document.getElementById('contextPageRotateCcw'), + handler: toolbar.pageRotateCcwClick.bind(toolbar) } + ] + }); + } + + PasswordPrompt.initialize({ + overlayName: 'passwordOverlay', + passwordField: document.getElementById('password'), + passwordText: document.getElementById('passwordText'), + passwordSubmit: document.getElementById('passwordSubmit'), + passwordCancel: document.getElementById('passwordCancel') + }); + + var self = this; + var initializedPromise = Promise.all([ + Preferences.get('enableWebGL').then(function resolved(value) { + PDFJS.disableWebGL = !value; + }), + Preferences.get('sidebarViewOnLoad').then(function resolved(value) { + self.preferenceSidebarViewOnLoad = value; + }), + Preferences.get('pdfBugEnabled').then(function resolved(value) { + self.preferencePdfBugEnabled = value; + }), + Preferences.get('showPreviousViewOnLoad').then(function resolved(value) { + self.preferenceShowPreviousViewOnLoad = value; + }), + Preferences.get('defaultZoomValue').then(function resolved(value) { + self.preferenceDefaultZoomValue = value; + }), + Preferences.get('disableTextLayer').then(function resolved(value) { + if (PDFJS.disableTextLayer === true) { + return; + } + PDFJS.disableTextLayer = value; + }), + Preferences.get('disableRange').then(function resolved(value) { + if (PDFJS.disableRange === true) { + return; + } + PDFJS.disableRange = value; + }), + Preferences.get('disableAutoFetch').then(function resolved(value) { + PDFJS.disableAutoFetch = value; + }), + Preferences.get('disableFontFace').then(function resolved(value) { + if (PDFJS.disableFontFace === true) { + return; + } + PDFJS.disableFontFace = value; + }), + Preferences.get('useOnlyCssZoom').then(function resolved(value) { + PDFJS.useOnlyCssZoom = value; + }) + // TODO move more preferences and other async stuff here + ]).catch(function (reason) { }); + + return initializedPromise.then(function () { + PDFViewerApplication.initialized = true; + }); + }, + + zoomIn: function pdfViewZoomIn(ticks) { + var newScale = this.pdfViewer.currentScale; + do { + newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.ceil(newScale * 10) / 10; + newScale = Math.min(MAX_SCALE, newScale); + } while (--ticks > 0 && newScale < MAX_SCALE); + this.setScale(newScale, true); + }, + + zoomOut: function pdfViewZoomOut(ticks) { + var newScale = this.pdfViewer.currentScale; + do { + newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); + newScale = Math.floor(newScale * 10) / 10; + newScale = Math.max(MIN_SCALE, newScale); + } while (--ticks > 0 && newScale > MIN_SCALE); + this.setScale(newScale, true); + }, + + get currentScaleValue() { + return this.pdfViewer.currentScaleValue; + }, + + get pagesCount() { + return this.pdfDocument.numPages; + }, + + set page(val) { + this.pdfViewer.currentPageNumber = val; + }, + + get page() { + return this.pdfViewer.currentPageNumber; + }, + + get supportsPrinting() { + var canvas = document.createElement('canvas'); + var value = 'mozPrintCallback' in canvas; + + return PDFJS.shadow(this, 'supportsPrinting', value); + }, + + get supportsFullscreen() { + var doc = document.documentElement; + var support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || + doc.webkitRequestFullScreen || doc.msRequestFullscreen); + + if (document.fullscreenEnabled === false || + document.mozFullScreenEnabled === false || + document.webkitFullscreenEnabled === false || + document.msFullscreenEnabled === false) { + support = false; + } + if (support && PDFJS.disableFullscreen === true) { + support = false; + } + + return PDFJS.shadow(this, 'supportsFullscreen', support); + }, + + get supportsIntegratedFind() { + var support = false; + + return PDFJS.shadow(this, 'supportsIntegratedFind', support); + }, + + get supportsDocumentFonts() { + var support = true; + + return PDFJS.shadow(this, 'supportsDocumentFonts', support); + }, + + get supportsDocumentColors() { + var support = true; + + return PDFJS.shadow(this, 'supportsDocumentColors', support); + }, + + get loadingBar() { + var bar = new ProgressBar('#loadingBar', {}); + + return PDFJS.shadow(this, 'loadingBar', bar); + }, + + + setTitleUsingUrl: function pdfViewSetTitleUsingUrl(url) { + this.url = url; + try { + this.setTitle(decodeURIComponent(getFileName(url)) || url); + } catch (e) { + // decodeURIComponent may throw URIError, + // fall back to using the unprocessed url in that case + this.setTitle(url); + } + }, + + setTitle: function pdfViewSetTitle(title) { + if (this.isViewerEmbedded) { + // Embedded PDF viewers should not be changing their parent page's title. + return; + } + //document.title = title; + }, + + close: function pdfViewClose() { + var errorWrapper = document.getElementById('errorWrapper'); + errorWrapper.setAttribute('hidden', 'true'); + + if (!this.pdfDocument) { + return; + } + + this.pdfDocument.destroy(); + this.pdfDocument = null; + + this.pdfThumbnailViewer.setDocument(null); + this.pdfViewer.setDocument(null); + + if (typeof PDFBug !== 'undefined') { + PDFBug.cleanup(); + } + }, + + // TODO(mack): This function signature should really be pdfViewOpen(url, args) + open: function pdfViewOpen(file, scale, password, + pdfDataRangeTransport, args) { + if (this.pdfDocument) { + // Reload the preferences if a document was previously opened. + Preferences.reload(); + } + this.close(); + + var parameters = {password: password}; + if (typeof file === 'string') { // URL + this.setTitleUsingUrl(file); + parameters.url = file; + } else if (file && 'byteLength' in file) { // ArrayBuffer + parameters.data = file; + } else if (file.url && file.originalUrl) { + this.setTitleUsingUrl(file.originalUrl); + parameters.url = file.url; + } + if (args) { + for (var prop in args) { + parameters[prop] = args[prop]; + } + } + + var self = this; + self.loading = true; + self.downloadComplete = false; + + var passwordNeeded = function passwordNeeded(updatePassword, reason) { + PasswordPrompt.updatePassword = updatePassword; + PasswordPrompt.reason = reason; + PasswordPrompt.open(); + }; + + function getDocumentProgress(progressData) { + self.progress(progressData.loaded / progressData.total); + } + + PDFJS.getDocument(parameters, pdfDataRangeTransport, passwordNeeded, + getDocumentProgress).then( + function getDocumentCallback(pdfDocument) { + self.load(pdfDocument, scale); + self.loading = false; + }, + function getDocumentError(exception) { + var message = exception && exception.message; + var loadingErrorMessage = mozL10n.get('loading_error', null, + 'An error occurred while loading the PDF.'); + + if (exception instanceof PDFJS.InvalidPDFException) { + // change error message also for other builds + loadingErrorMessage = mozL10n.get('invalid_file_error', null, + 'Invalid or corrupted PDF file.'); + } else if (exception instanceof PDFJS.MissingPDFException) { + // special message for missing PDF's + loadingErrorMessage = mozL10n.get('missing_file_error', null, + 'Missing PDF file.'); + } else if (exception instanceof PDFJS.UnexpectedResponseException) { + loadingErrorMessage = mozL10n.get('unexpected_response_error', null, + 'Unexpected server response.'); + } + + var moreInfo = { + message: message + }; + self.error(loadingErrorMessage, moreInfo); + self.loading = false; + } + ); + + if (args && args.length) { + PDFViewerApplication.pdfDocumentProperties.setFileSize(args.length); + } + }, + + download: function pdfViewDownload() { + function downloadByUrl() { + downloadManager.downloadUrl(url, filename); + } + + var url = this.url.split('#')[0]; + var filename = getPDFFileNameFromURL(url); + var downloadManager = new DownloadManager(); + downloadManager.onerror = function (err) { + // This error won't really be helpful because it's likely the + // fallback won't work either (or is already open). + PDFViewerApplication.error('PDF failed to download.'); + }; + + if (!this.pdfDocument) { // the PDF is not ready yet + downloadByUrl(); + return; + } + + if (!this.downloadComplete) { // the PDF is still downloading + downloadByUrl(); + return; + } + + this.pdfDocument.getData().then( + function getDataSuccess(data) { + var blob = PDFJS.createBlob(data, 'application/pdf'); + downloadManager.download(blob, url, filename); + }, + downloadByUrl // Error occurred try downloading with just the url. + ).then(null, downloadByUrl); + }, + + fallback: function pdfViewFallback(featureId) { + }, + + navigateTo: function pdfViewNavigateTo(dest) { + var destString = ''; + var self = this; + + var goToDestination = function(destRef) { + self.pendingRefStr = null; + // dest array looks like that: + var pageNumber = destRef instanceof Object ? + self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : + (destRef + 1); + if (pageNumber) { + if (pageNumber > self.pagesCount) { + pageNumber = self.pagesCount; + } + self.pdfViewer.scrollPageIntoView(pageNumber, dest); + + // Update the browsing history. + PDFHistory.push({ dest: dest, hash: destString, page: pageNumber }); + } else { + self.pdfDocument.getPageIndex(destRef).then(function (pageIndex) { + var pageNum = pageIndex + 1; + self.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] = pageNum; + goToDestination(destRef); + }); + } + }; + + var destinationPromise; + if (typeof dest === 'string') { + destString = dest; + destinationPromise = this.pdfDocument.getDestination(dest); + } else { + destinationPromise = Promise.resolve(dest); + } + destinationPromise.then(function(destination) { + dest = destination; + if (!(destination instanceof Array)) { + return; // invalid destination + } + goToDestination(destination[0]); + }); + }, + + executeNamedAction: function pdfViewExecuteNamedAction(action) { + // See PDF reference, table 8.45 - Named action + switch (action) { + case 'GoToPage': + document.getElementById('pageNumber').focus(); + break; + + case 'GoBack': + PDFHistory.back(); + break; + + case 'GoForward': + PDFHistory.forward(); + break; + + case 'Find': + if (!this.supportsIntegratedFind) { + this.findBar.toggle(); + } + break; + + case 'NextPage': + this.page++; + break; + + case 'PrevPage': + this.page--; + break; + + case 'LastPage': + this.page = this.pagesCount; + break; + + case 'FirstPage': + this.page = 1; + break; + + default: + break; // No action according to spec + } + }, + + getDestinationHash: function pdfViewGetDestinationHash(dest) { + if (typeof dest === 'string') { + return this.getAnchorUrl('#' + escape(dest)); + } + if (dest instanceof Array) { + var destRef = dest[0]; // see navigateTo method for dest format + var pageNumber = destRef instanceof Object ? + this.pagesRefMap[destRef.num + ' ' + destRef.gen + ' R'] : + (destRef + 1); + if (pageNumber) { + var pdfOpenParams = this.getAnchorUrl('#page=' + pageNumber); + var destKind = dest[1]; + if (typeof destKind === 'object' && 'name' in destKind && + destKind.name === 'XYZ') { + var scale = (dest[4] || this.currentScaleValue); + var scaleNumber = parseFloat(scale); + if (scaleNumber) { + scale = scaleNumber * 100; + } + pdfOpenParams += '&zoom=' + scale; + if (dest[2] || dest[3]) { + pdfOpenParams += ',' + (dest[2] || 0) + ',' + (dest[3] || 0); + } + } + return pdfOpenParams; + } + } + return ''; + }, + + /** + * Prefix the full url on anchor links to make sure that links are resolved + * relative to the current URL instead of the one defined in . + * @param {String} anchor The anchor hash, including the #. + */ + getAnchorUrl: function getAnchorUrl(anchor) { + return anchor; + }, + + /** + * Show the error box. + * @param {String} message A message that is human readable. + * @param {Object} moreInfo (optional) Further information about the error + * that is more technical. Should have a 'message' + * and optionally a 'stack' property. + */ + error: function pdfViewError(message, moreInfo) { + var moreInfoText = mozL10n.get('error_version_info', + {version: PDFJS.version || '?', build: PDFJS.build || '?'}, + 'PDF.js v{{version}} (build: {{build}})') + '\n'; + if (moreInfo) { + moreInfoText += + mozL10n.get('error_message', {message: moreInfo.message}, + 'Message: {{message}}'); + if (moreInfo.stack) { + moreInfoText += '\n' + + mozL10n.get('error_stack', {stack: moreInfo.stack}, + 'Stack: {{stack}}'); + } else { + if (moreInfo.filename) { + moreInfoText += '\n' + + mozL10n.get('error_file', {file: moreInfo.filename}, + 'File: {{file}}'); + } + if (moreInfo.lineNumber) { + moreInfoText += '\n' + + mozL10n.get('error_line', {line: moreInfo.lineNumber}, + 'Line: {{line}}'); + } + } + } + + var errorWrapper = document.getElementById('errorWrapper'); + errorWrapper.removeAttribute('hidden'); + + var errorMessage = document.getElementById('errorMessage'); + errorMessage.textContent = message; + + var closeButton = document.getElementById('errorClose'); + closeButton.onclick = function() { + errorWrapper.setAttribute('hidden', 'true'); + }; + + var errorMoreInfo = document.getElementById('errorMoreInfo'); + var moreInfoButton = document.getElementById('errorShowMore'); + var lessInfoButton = document.getElementById('errorShowLess'); + moreInfoButton.onclick = function() { + errorMoreInfo.removeAttribute('hidden'); + moreInfoButton.setAttribute('hidden', 'true'); + lessInfoButton.removeAttribute('hidden'); + errorMoreInfo.style.height = errorMoreInfo.scrollHeight + 'px'; + }; + lessInfoButton.onclick = function() { + errorMoreInfo.setAttribute('hidden', 'true'); + moreInfoButton.removeAttribute('hidden'); + lessInfoButton.setAttribute('hidden', 'true'); + }; + moreInfoButton.oncontextmenu = noContextMenuHandler; + lessInfoButton.oncontextmenu = noContextMenuHandler; + closeButton.oncontextmenu = noContextMenuHandler; + moreInfoButton.removeAttribute('hidden'); + lessInfoButton.setAttribute('hidden', 'true'); + errorMoreInfo.value = moreInfoText; + }, + + progress: function pdfViewProgress(level) { + var percent = Math.round(level * 100); + // When we transition from full request to range requests, it's possible + // that we discard some of the loaded data. This can cause the loading + // bar to move backwards. So prevent this by only updating the bar if it + // increases. + if (percent > this.loadingBar.percent || isNaN(percent)) { + this.loadingBar.percent = percent; + + // When disableAutoFetch is enabled, it's not uncommon for the entire file + // to never be fetched (depends on e.g. the file structure). In this case + // the loading bar will not be completely filled, nor will it be hidden. + // To prevent displaying a partially filled loading bar permanently, we + // hide it when no data has been loaded during a certain amount of time. + if (PDFJS.disableAutoFetch && percent) { + if (this.disableAutoFetchLoadingBarTimeout) { + clearTimeout(this.disableAutoFetchLoadingBarTimeout); + this.disableAutoFetchLoadingBarTimeout = null; + } + this.loadingBar.show(); + + this.disableAutoFetchLoadingBarTimeout = setTimeout(function () { + this.loadingBar.hide(); + this.disableAutoFetchLoadingBarTimeout = null; + }.bind(this), DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); + } + } + }, + + load: function pdfViewLoad(pdfDocument, scale) { + var self = this; + scale = scale || UNKNOWN_SCALE; + + this.findController.reset(); + + this.pdfDocument = pdfDocument; + + this.pdfDocumentProperties.setDocumentAndUrl(pdfDocument, this.url); + + var downloadedPromise = pdfDocument.getDownloadInfo().then(function() { + self.downloadComplete = true; + self.loadingBar.hide(); + }); + + var pagesCount = pdfDocument.numPages; + document.getElementById('numPages').textContent = + mozL10n.get('page_of', {pageCount: pagesCount}, 'of {{pageCount}}'); + document.getElementById('pageNumber').max = pagesCount; + + var id = this.documentFingerprint = pdfDocument.fingerprint; + var store = this.store = new ViewHistory(id); + + var pdfViewer = this.pdfViewer; + pdfViewer.currentScale = scale; + pdfViewer.setDocument(pdfDocument); + var firstPagePromise = pdfViewer.firstPagePromise; + var pagesPromise = pdfViewer.pagesPromise; + var onePageRendered = pdfViewer.onePageRendered; + + this.pageRotation = 0; + this.isInitialViewSet = false; + this.pagesRefMap = pdfViewer.pagesRefMap; + + this.pdfThumbnailViewer.setDocument(pdfDocument); + + firstPagePromise.then(function(pdfPage) { + downloadedPromise.then(function () { + var event = document.createEvent('CustomEvent'); + event.initCustomEvent('documentload', true, true, {}); + window.dispatchEvent(event); + }); + + self.loadingBar.setWidth(document.getElementById('viewer')); + + if (!PDFJS.disableHistory && !self.isViewerEmbedded) { + // The browsing history is only enabled when the viewer is standalone, + // i.e. not when it is embedded in a web page. + if (!self.preferenceShowPreviousViewOnLoad && window.history.state) { + window.history.replaceState(null, ''); + } + PDFHistory.initialize(self.documentFingerprint, self); + } + + store.initializedPromise.then(function resolved() { + var storedHash = null; + if (self.preferenceShowPreviousViewOnLoad && + store.get('exists', false)) { + var pageNum = store.get('page', '1'); + var zoom = self.preferenceDefaultZoomValue || + store.get('zoom', self.pdfViewer.currentScale); + var left = store.get('scrollLeft', '0'); + var top = store.get('scrollTop', '0'); + + storedHash = 'page=' + pageNum + '&zoom=' + zoom + ',' + + left + ',' + top; + } else if (self.preferenceDefaultZoomValue) { + storedHash = 'page=1&zoom=' + self.preferenceDefaultZoomValue; + } + self.setInitialView(storedHash, scale); + + // Make all navigation keys work on document load, + // unless the viewer is embedded in a web page. + if (!self.isViewerEmbedded) { + self.pdfViewer.focus(); + } + }, function rejected(reason) { + console.error(reason); + self.setInitialView(null, scale); + }); + }); + + pagesPromise.then(function() { + if (self.supportsPrinting) { + pdfDocument.getJavaScript().then(function(javaScript) { + if (javaScript.length) { + console.warn('Warning: JavaScript is not supported'); + self.fallback(PDFJS.UNSUPPORTED_FEATURES.javaScript); + } + // Hack to support auto printing. + var regex = /\bprint\s*\(/g; + for (var i = 0, ii = javaScript.length; i < ii; i++) { + var js = javaScript[i]; + if (js && regex.test(js)) { + setTimeout(function() { + window.print(); + }); + return; + } + } + }); + } + }); + + // outline depends on pagesRefMap + var promises = [pagesPromise, this.animationStartedPromise]; + Promise.all(promises).then(function() { + pdfDocument.getOutline().then(function(outline) { + var container = document.getElementById('outlineView'); + self.outline = new PDFOutlineView({ + container: container, + outline: outline, + linkService: self + }); + self.outline.render(); + document.getElementById('viewOutline').disabled = !outline; + + if (!outline && !container.classList.contains('hidden')) { + self.switchSidebarView('thumbs'); + } + if (outline && + self.preferenceSidebarViewOnLoad === SidebarView.OUTLINE) { + self.switchSidebarView('outline', true); + } + }); + pdfDocument.getAttachments().then(function(attachments) { + var container = document.getElementById('attachmentsView'); + self.attachments = new PDFAttachmentView({ + container: container, + attachments: attachments, + downloadManager: new DownloadManager() + }); + self.attachments.render(); + document.getElementById('viewAttachments').disabled = !attachments; + + if (!attachments && !container.classList.contains('hidden')) { + self.switchSidebarView('thumbs'); + } + if (attachments && + self.preferenceSidebarViewOnLoad === SidebarView.ATTACHMENTS) { + self.switchSidebarView('attachments', true); + } + }); + }); + + if (self.preferenceSidebarViewOnLoad === SidebarView.THUMBS) { + Promise.all([firstPagePromise, onePageRendered]).then(function () { + self.switchSidebarView('thumbs', true); + }); + } + + pdfDocument.getMetadata().then(function(data) { + var info = data.info, metadata = data.metadata; + self.documentInfo = info; + self.metadata = metadata; + + // Provides some basic debug information + console.log('PDF ' + pdfDocument.fingerprint + ' [' + + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + + ' / ' + (info.Creator || '-').trim() + ']' + + ' (PDF.js: ' + (PDFJS.version || '-') + + (!PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); + + var pdfTitle; + if (metadata && metadata.has('dc:title')) { + var title = metadata.get('dc:title'); + // Ghostscript sometimes return 'Untitled', sets the title to 'Untitled' + if (title !== 'Untitled') { + pdfTitle = title; + } + } + + if (!pdfTitle && info && info['Title']) { + pdfTitle = info['Title']; + } + + if (pdfTitle) { + self.setTitle(pdfTitle + ' - ' + document.title); + } + + if (info.IsAcroFormPresent) { + console.warn('Warning: AcroForm/XFA is not supported'); + self.fallback(PDFJS.UNSUPPORTED_FEATURES.forms); + } + + }); + }, + + setInitialView: function pdfViewSetInitialView(storedHash, scale) { + this.isInitialViewSet = true; + + // When opening a new file (when one is already loaded in the viewer): + // Reset 'currentPageNumber', since otherwise the page's scale will be wrong + // if 'currentPageNumber' is larger than the number of pages in the file. + document.getElementById('pageNumber').value = + this.pdfViewer.currentPageNumber = 1; + + if (PDFHistory.initialDestination) { + this.navigateTo(PDFHistory.initialDestination); + PDFHistory.initialDestination = null; + } else if (this.initialBookmark) { + this.setHash(this.initialBookmark); + PDFHistory.push({ hash: this.initialBookmark }, !!this.initialBookmark); + this.initialBookmark = null; + } else if (storedHash) { + this.setHash(storedHash); + } else if (scale) { + this.setScale(scale, true); + this.page = 1; + } + + if (this.pdfViewer.currentScale === UNKNOWN_SCALE) { + // Scale was not initialized: invalid bookmark or scale was not specified. + // Setting the default one. + this.setScale(DEFAULT_SCALE, true); + } + }, + + cleanup: function pdfViewCleanup() { + this.pdfViewer.cleanup(); + this.pdfThumbnailViewer.cleanup(); + this.pdfDocument.cleanup(); + }, + + forceRendering: function pdfViewForceRendering() { + this.pdfRenderingQueue.printing = this.printing; + this.pdfRenderingQueue.isThumbnailViewEnabled = this.sidebarOpen; + this.pdfRenderingQueue.renderHighestPriority(); + }, + + setHash: function pdfViewSetHash(hash) { + if (!this.isInitialViewSet) { + this.initialBookmark = hash; + return; + } + if (!hash) { + return; + } + + if (hash.indexOf('=') >= 0) { + var params = this.parseQueryString(hash); + // borrowing syntax from "Parameters for Opening PDF Files" + if ('nameddest' in params) { + PDFHistory.updateNextHashParam(params.nameddest); + this.navigateTo(params.nameddest); + return; + } + var pageNumber, dest; + if ('page' in params) { + pageNumber = (params.page | 0) || 1; + } + if ('zoom' in params) { + // Build the destination array. + var zoomArgs = params.zoom.split(','); // scale,left,top + var zoomArg = zoomArgs[0]; + var zoomArgNumber = parseFloat(zoomArg); + + if (zoomArg.indexOf('Fit') === -1) { + // If the zoomArg is a number, it has to get divided by 100. If it's + // a string, it should stay as it is. + dest = [null, { name: 'XYZ' }, + zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null, + zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null, + (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)]; + } else { + if (zoomArg === 'Fit' || zoomArg === 'FitB') { + dest = [null, { name: zoomArg }]; + } else if ((zoomArg === 'FitH' || zoomArg === 'FitBH') || + (zoomArg === 'FitV' || zoomArg === 'FitBV')) { + dest = [null, { name: zoomArg }, + zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null]; + } else if (zoomArg === 'FitR') { + if (zoomArgs.length !== 5) { + console.error('pdfViewSetHash: ' + + 'Not enough parameters for \'FitR\'.'); + } else { + dest = [null, { name: zoomArg }, + (zoomArgs[1] | 0), (zoomArgs[2] | 0), + (zoomArgs[3] | 0), (zoomArgs[4] | 0)]; + } + } else { + console.error('pdfViewSetHash: \'' + zoomArg + + '\' is not a valid zoom value.'); + } + } + } + if (dest) { + this.pdfViewer.scrollPageIntoView(pageNumber || this.page, dest); + } else if (pageNumber) { + this.page = pageNumber; // simple page + } + if ('pagemode' in params) { + if (params.pagemode === 'thumbs' || params.pagemode === 'bookmarks' || + params.pagemode === 'attachments') { + this.switchSidebarView((params.pagemode === 'bookmarks' ? + 'outline' : params.pagemode), true); + } else if (params.pagemode === 'none' && this.sidebarOpen) { + document.getElementById('sidebarToggle').click(); + } + } + } else if (/^\d+$/.test(hash)) { // page number + this.page = hash; + } else { // named destination + PDFHistory.updateNextHashParam(unescape(hash)); + this.navigateTo(unescape(hash)); + } + }, + + refreshThumbnailViewer: function pdfViewRefreshThumbnailViewer() { + var pdfViewer = this.pdfViewer; + var thumbnailViewer = this.pdfThumbnailViewer; + + // set thumbnail images of rendered pages + var pagesCount = pdfViewer.pagesCount; + for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { + var pageView = pdfViewer.getPageView(pageIndex); + if (pageView && pageView.renderingState === RenderingStates.FINISHED) { + var thumbnailView = thumbnailViewer.getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + } + + thumbnailViewer.scrollThumbnailIntoView(this.page); + }, + + switchSidebarView: function pdfViewSwitchSidebarView(view, openSidebar) { + if (openSidebar && !this.sidebarOpen) { + document.getElementById('sidebarToggle').click(); + } + var thumbsView = document.getElementById('thumbnailView'); + var outlineView = document.getElementById('outlineView'); + var attachmentsView = document.getElementById('attachmentsView'); + + var thumbsButton = document.getElementById('viewThumbnail'); + var outlineButton = document.getElementById('viewOutline'); + var attachmentsButton = document.getElementById('viewAttachments'); + + switch (view) { + case 'thumbs': + var wasAnotherViewVisible = thumbsView.classList.contains('hidden'); + + thumbsButton.classList.add('toggled'); + outlineButton.classList.remove('toggled'); + attachmentsButton.classList.remove('toggled'); + thumbsView.classList.remove('hidden'); + outlineView.classList.add('hidden'); + attachmentsView.classList.add('hidden'); + + this.forceRendering(); + + if (wasAnotherViewVisible) { + this.pdfThumbnailViewer.ensureThumbnailVisible(this.page); + } + break; + + case 'outline': + thumbsButton.classList.remove('toggled'); + outlineButton.classList.add('toggled'); + attachmentsButton.classList.remove('toggled'); + thumbsView.classList.add('hidden'); + outlineView.classList.remove('hidden'); + attachmentsView.classList.add('hidden'); + + if (outlineButton.getAttribute('disabled')) { + return; + } + break; + + case 'attachments': + thumbsButton.classList.remove('toggled'); + outlineButton.classList.remove('toggled'); + attachmentsButton.classList.add('toggled'); + thumbsView.classList.add('hidden'); + outlineView.classList.add('hidden'); + attachmentsView.classList.remove('hidden'); + + if (attachmentsButton.getAttribute('disabled')) { + return; + } + break; + } + }, + + // Helper function to parse query string (e.g. ?param1=value&parm2=...). + parseQueryString: function pdfViewParseQueryString(query) { + var parts = query.split('&'); + var params = {}; + for (var i = 0, ii = parts.length; i < ii; ++i) { + var param = parts[i].split('='); + var key = param[0].toLowerCase(); + var value = param.length > 1 ? param[1] : null; + params[decodeURIComponent(key)] = decodeURIComponent(value); + } + return params; + }, + + beforePrint: function pdfViewSetupBeforePrint() { + if (!this.supportsPrinting) { + var printMessage = mozL10n.get('printing_not_supported', null, + 'Warning: Printing is not fully supported by this browser.'); + this.error(printMessage); + return; + } + + var alertNotReady = false; + var i, ii; + if (!this.pagesCount) { + alertNotReady = true; + } else { + for (i = 0, ii = this.pagesCount; i < ii; ++i) { + if (!this.pdfViewer.getPageView(i).pdfPage) { + alertNotReady = true; + break; + } + } + } + if (alertNotReady) { + var notReadyMessage = mozL10n.get('printing_not_ready', null, + 'Warning: The PDF is not fully loaded for printing.'); + window.alert(notReadyMessage); + return; + } + + this.printing = true; + this.forceRendering(); + + var body = document.querySelector('body'); + body.setAttribute('data-mozPrintCallback', true); + + if (!this.hasEqualPageSizes) { + console.warn('Not all pages have the same size. The printed result ' + + 'may be incorrect!'); + } + + // Insert a @page + size rule to make sure that the page size is correctly + // set. Note that we assume that all pages have the same size, because + // variable-size pages are not supported yet (at least in Chrome & Firefox). + // TODO(robwu): Use named pages when size calculation bugs get resolved + // (e.g. https://crbug.com/355116) AND when support for named pages is + // added (http://www.w3.org/TR/css3-page/#using-named-pages). + // In browsers where @page + size is not supported (such as Firefox, + // https://bugzil.la/851441), the next stylesheet will be ignored and the + // user has to select the correct paper size in the UI if wanted. + this.pageStyleSheet = document.createElement('style'); + var pageSize = this.pdfViewer.getPageView(0).pdfPage.getViewport(1); + this.pageStyleSheet.textContent = + // "size: " is what we need. But also add "A4" because + // Firefox incorrectly reports support for the other value. + '@supports ((size:A4) and (size:1pt 1pt)) {' + + '@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' + + // The canvas and each ancestor node must have a height of 100% to make + // sure that each canvas is printed on exactly one page. + '#printContainer {height:100%}' + + '#printContainer > div {width:100% !important;height:100% !important;}' + + '}'; + body.appendChild(this.pageStyleSheet); + + for (i = 0, ii = this.pagesCount; i < ii; ++i) { + this.pdfViewer.getPageView(i).beforePrint(); + } + + }, + + // Whether all pages of the PDF have the same width and height. + get hasEqualPageSizes() { + var firstPage = this.pdfViewer.getPageView(0); + for (var i = 1, ii = this.pagesCount; i < ii; ++i) { + var pageView = this.pdfViewer.getPageView(i); + if (pageView.width !== firstPage.width || + pageView.height !== firstPage.height) { + return false; + } + } + return true; + }, + + afterPrint: function pdfViewSetupAfterPrint() { + var div = document.getElementById('printContainer'); + while (div.hasChildNodes()) { + div.removeChild(div.lastChild); + } + + if (this.pageStyleSheet && this.pageStyleSheet.parentNode) { + this.pageStyleSheet.parentNode.removeChild(this.pageStyleSheet); + this.pageStyleSheet = null; + } + + this.printing = false; + this.forceRendering(); + }, + + setScale: function (value, resetAutoSettings) { + this.updateScaleControls = !!resetAutoSettings; + this.pdfViewer.currentScaleValue = value; + this.updateScaleControls = true; + }, + + rotatePages: function pdfViewRotatePages(delta) { + var pageNumber = this.page; + this.pageRotation = (this.pageRotation + 360 + delta) % 360; + this.pdfViewer.pagesRotation = this.pageRotation; + this.pdfThumbnailViewer.pagesRotation = this.pageRotation; + + this.forceRendering(); + + this.pdfViewer.scrollPageIntoView(pageNumber); + }, + + requestPresentationMode: function pdfViewRequestPresentationMode() { + if (!this.pdfPresentationMode) { + return; + } + this.pdfPresentationMode.request(); + }, + + /** + * @param {number} delta - The delta value from the mouse event. + */ + scrollPresentationMode: function pdfViewScrollPresentationMode(delta) { + if (!this.pdfPresentationMode) { + return; + } + this.pdfPresentationMode.mouseScroll(delta); + } +}; +window.PDFView = PDFViewerApplication; // obsolete name, using it as an alias + + +function webViewerLoad(evt) { + PDFViewerApplication.initialize().then(webViewerInitialized); +} + +function webViewerInitialized() { + var queryString = document.location.search.substring(1); + var params = PDFViewerApplication.parseQueryString(queryString); + var file = 'file' in params ? params.file : DEFAULT_URL; + + var fileInput = document.createElement('input'); + fileInput.id = 'fileInput'; + fileInput.className = 'fileInput'; + fileInput.setAttribute('type', 'file'); + fileInput.oncontextmenu = noContextMenuHandler; + document.body.appendChild(fileInput); + + if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { + document.getElementById('openFile').setAttribute('hidden', 'true'); + document.getElementById('secondaryOpenFile').setAttribute('hidden', 'true'); + } else { + document.getElementById('fileInput').value = null; + } + + var locale = PDFJS.locale || navigator.language; + + if (PDFViewerApplication.preferencePdfBugEnabled) { + // Special debugging flags in the hash section of the URL. + var hash = document.location.hash.substring(1); + var hashParams = PDFViewerApplication.parseQueryString(hash); + + if ('disableworker' in hashParams) { + PDFJS.disableWorker = (hashParams['disableworker'] === 'true'); + } + if ('disablerange' in hashParams) { + PDFJS.disableRange = (hashParams['disablerange'] === 'true'); + } + if ('disablestream' in hashParams) { + PDFJS.disableStream = (hashParams['disablestream'] === 'true'); + } + if ('disableautofetch' in hashParams) { + PDFJS.disableAutoFetch = (hashParams['disableautofetch'] === 'true'); + } + if ('disablefontface' in hashParams) { + PDFJS.disableFontFace = (hashParams['disablefontface'] === 'true'); + } + if ('disablehistory' in hashParams) { + PDFJS.disableHistory = (hashParams['disablehistory'] === 'true'); + } + if ('webgl' in hashParams) { + PDFJS.disableWebGL = (hashParams['webgl'] !== 'true'); + } + if ('useonlycsszoom' in hashParams) { + PDFJS.useOnlyCssZoom = (hashParams['useonlycsszoom'] === 'true'); + } + if ('verbosity' in hashParams) { + PDFJS.verbosity = hashParams['verbosity'] | 0; + } + if ('ignorecurrentpositiononzoom' in hashParams) { + IGNORE_CURRENT_POSITION_ON_ZOOM = + (hashParams['ignorecurrentpositiononzoom'] === 'true'); + } + if ('locale' in hashParams) { + locale = hashParams['locale']; + } + if ('textlayer' in hashParams) { + switch (hashParams['textlayer']) { + case 'off': + PDFJS.disableTextLayer = true; + break; + case 'visible': + case 'shadow': + case 'hover': + var viewer = document.getElementById('viewer'); + viewer.classList.add('textLayer-' + hashParams['textlayer']); + break; + } + } + if ('pdfbug' in hashParams) { + PDFJS.pdfBug = true; + var pdfBug = hashParams['pdfbug']; + var enabled = pdfBug.split(','); + PDFBug.enable(enabled); + PDFBug.init(); + } + } + + mozL10n.setLanguage(locale); + + if (!PDFViewerApplication.supportsPrinting) { + document.getElementById('print').classList.add('hidden'); + document.getElementById('secondaryPrint').classList.add('hidden'); + } + + if (!PDFViewerApplication.supportsFullscreen) { + document.getElementById('presentationMode').classList.add('hidden'); + document.getElementById('secondaryPresentationMode'). + classList.add('hidden'); + } + + if (PDFViewerApplication.supportsIntegratedFind) { + document.getElementById('viewFind').classList.add('hidden'); + } + + // Listen for unsupported features to trigger the fallback UI. + PDFJS.UnsupportedManager.listen( + PDFViewerApplication.fallback.bind(PDFViewerApplication)); + + // Suppress context menus for some controls + document.getElementById('scaleSelect').oncontextmenu = noContextMenuHandler; + + var mainContainer = document.getElementById('mainContainer'); + var outerContainer = document.getElementById('outerContainer'); + mainContainer.addEventListener('transitionend', function(e) { + if (e.target === mainContainer) { + var event = document.createEvent('UIEvents'); + event.initUIEvent('resize', false, false, window, 0); + window.dispatchEvent(event); + outerContainer.classList.remove('sidebarMoving'); + } + }, true); + + document.getElementById('sidebarToggle').addEventListener('click', + function() { + this.classList.toggle('toggled'); + outerContainer.classList.add('sidebarMoving'); + outerContainer.classList.toggle('sidebarOpen'); + PDFViewerApplication.sidebarOpen = + outerContainer.classList.contains('sidebarOpen'); + if (PDFViewerApplication.sidebarOpen) { + PDFViewerApplication.refreshThumbnailViewer(); + } + PDFViewerApplication.forceRendering(); + }); + + document.getElementById('viewThumbnail').addEventListener('click', + function() { + PDFViewerApplication.switchSidebarView('thumbs'); + }); + + document.getElementById('viewOutline').addEventListener('click', + function() { + PDFViewerApplication.switchSidebarView('outline'); + }); + + document.getElementById('viewAttachments').addEventListener('click', + function() { + PDFViewerApplication.switchSidebarView('attachments'); + }); + + document.getElementById('previous').addEventListener('click', + function() { + PDFViewerApplication.page--; + }); + + document.getElementById('next').addEventListener('click', + function() { + PDFViewerApplication.page++; + }); + + document.getElementById('zoomIn').addEventListener('click', + function() { + PDFViewerApplication.zoomIn(); + }); + + document.getElementById('zoomOut').addEventListener('click', + function() { + PDFViewerApplication.zoomOut(); + }); + + document.getElementById('pageNumber').addEventListener('click', function() { + this.select(); + }); + + document.getElementById('pageNumber').addEventListener('change', function() { + // Handle the user inputting a floating point number. + PDFViewerApplication.page = (this.value | 0); + + if (this.value !== (this.value | 0).toString()) { + this.value = PDFViewerApplication.page; + } + }); + + document.getElementById('scaleSelect').addEventListener('change', + function() { + PDFViewerApplication.setScale(this.value, false); + }); + + document.getElementById('presentationMode').addEventListener('click', + SecondaryToolbar.presentationModeClick.bind(SecondaryToolbar)); + + document.getElementById('openFile').addEventListener('click', + SecondaryToolbar.openFileClick.bind(SecondaryToolbar)); + + document.getElementById('print').addEventListener('click', + SecondaryToolbar.printClick.bind(SecondaryToolbar)); + + document.getElementById('download').addEventListener('click', + SecondaryToolbar.downloadClick.bind(SecondaryToolbar)); + + + if (file && file.lastIndexOf('file:', 0) === 0) { + // file:-scheme. Load the contents in the main thread because QtWebKit + // cannot load file:-URLs in a Web Worker. file:-URLs are usually loaded + // very quickly, so there is no need to set up progress event listeners. + PDFViewerApplication.setTitleUsingUrl(file); + var xhr = new XMLHttpRequest(); + xhr.onload = function() { + PDFViewerApplication.open(new Uint8Array(xhr.response), 0); + }; + try { + xhr.open('GET', file); + xhr.responseType = 'arraybuffer'; + xhr.send(); + } catch (e) { + PDFViewerApplication.error(mozL10n.get('loading_error', null, + 'An error occurred while loading the PDF.'), e); + } + return; + } + + if (file) { + PDFViewerApplication.open(file, 0); + } +} + +document.addEventListener('DOMContentLoaded', webViewerLoad, true); + +document.addEventListener('pagerendered', function (e) { + var pageNumber = e.detail.pageNumber; + var pageIndex = pageNumber - 1; + var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex); + + if (PDFViewerApplication.sidebarOpen) { + var thumbnailView = PDFViewerApplication.pdfThumbnailViewer. + getThumbnail(pageIndex); + thumbnailView.setImage(pageView); + } + + if (PDFJS.pdfBug && Stats.enabled && pageView.stats) { + Stats.add(pageNumber, pageView.stats); + } + + if (pageView.error) { + PDFViewerApplication.error(mozL10n.get('rendering_error', null, + 'An error occurred while rendering the page.'), pageView.error); + } + + // If the page is still visible when it has finished rendering, + // ensure that the page number input loading indicator is hidden. + if (pageNumber === PDFViewerApplication.page) { + var pageNumberInput = document.getElementById('pageNumber'); + pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR); + } + +}, true); + +document.addEventListener('textlayerrendered', function (e) { + var pageIndex = e.detail.pageNumber - 1; + var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex); + +}, true); + +window.addEventListener('presentationmodechanged', function (e) { + var active = e.detail.active; + var switchInProgress = e.detail.switchInProgress; + PDFViewerApplication.pdfViewer.presentationModeState = + switchInProgress ? PresentationModeState.CHANGING : + active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL; +}); + +function updateViewarea() { + if (!PDFViewerApplication.initialized) { + return; + } + PDFViewerApplication.pdfViewer.update(); +} + +window.addEventListener('updateviewarea', function (evt) { + if (!PDFViewerApplication.initialized) { + return; + } + var location = evt.location; + + PDFViewerApplication.store.initializedPromise.then(function() { + PDFViewerApplication.store.setMultiple({ + 'exists': true, + 'page': location.pageNumber, + 'zoom': location.scale, + 'scrollLeft': location.left, + 'scrollTop': location.top + }).catch(function() { + // unable to write to storage + }); + }); + var href = PDFViewerApplication.getAnchorUrl(location.pdfOpenParams); + document.getElementById('viewBookmark').href = href; + document.getElementById('secondaryViewBookmark').href = href; + + // Update the current bookmark in the browsing history. + PDFHistory.updateCurrentBookmark(location.pdfOpenParams, location.pageNumber); + + // Show/hide the loading indicator in the page number input element. + var pageNumberInput = document.getElementById('pageNumber'); + var currentPage = + PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); + + if (currentPage.renderingState === RenderingStates.FINISHED) { + pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR); + } else { + pageNumberInput.classList.add(PAGE_NUMBER_LOADING_INDICATOR); + } +}, true); + +window.addEventListener('resize', function webViewerResize(evt) { + if (PDFViewerApplication.initialized && + (document.getElementById('pageAutoOption').selected || + /* Note: the scale is constant for |pageActualOption|. */ + document.getElementById('pageFitOption').selected || + document.getElementById('pageWidthOption').selected)) { + var selectedScale = document.getElementById('scaleSelect').value; + PDFViewerApplication.setScale(selectedScale, false); + } + updateViewarea(); + + // Set the 'max-height' CSS property of the secondary toolbar. + SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer')); +}); + +window.addEventListener('hashchange', function webViewerHashchange(evt) { + if (PDFHistory.isHashChangeUnlocked) { + PDFViewerApplication.setHash(document.location.hash.substring(1)); + } +}); + +window.addEventListener('change', function webViewerChange(evt) { + var files = evt.target.files; + if (!files || files.length === 0) { + return; + } + var file = files[0]; + + if (!PDFJS.disableCreateObjectURL && + typeof URL !== 'undefined' && URL.createObjectURL) { + PDFViewerApplication.open(URL.createObjectURL(file), 0); + } else { + // Read the local file into a Uint8Array. + var fileReader = new FileReader(); + fileReader.onload = function webViewerChangeFileReaderOnload(evt) { + var buffer = evt.target.result; + var uint8Array = new Uint8Array(buffer); + PDFViewerApplication.open(uint8Array, 0); + }; + fileReader.readAsArrayBuffer(file); + } + + PDFViewerApplication.setTitleUsingUrl(file.name); + + // URL does not reflect proper document location - hiding some icons. + document.getElementById('viewBookmark').setAttribute('hidden', 'true'); + document.getElementById('secondaryViewBookmark'). + setAttribute('hidden', 'true'); + document.getElementById('download').setAttribute('hidden', 'true'); + document.getElementById('secondaryDownload').setAttribute('hidden', 'true'); +}, true); + +function selectScaleOption(value) { + var options = document.getElementById('scaleSelect').options; + var predefinedValueFound = false; + for (var i = 0; i < options.length; i++) { + var option = options[i]; + if (option.value !== value) { + option.selected = false; + continue; + } + option.selected = true; + predefinedValueFound = true; + } + return predefinedValueFound; +} + +window.addEventListener('localized', function localized(evt) { + document.getElementsByTagName('html')[0].dir = mozL10n.getDirection(); + + PDFViewerApplication.animationStartedPromise.then(function() { + // Adjust the width of the zoom box to fit the content. + // Note: If the window is narrow enough that the zoom box is not visible, + // we temporarily show it to be able to adjust its width. + var container = document.getElementById('scaleSelectContainer'); + if (container.clientWidth === 0) { + container.setAttribute('style', 'display: inherit;'); + } + if (container.clientWidth > 0) { + var select = document.getElementById('scaleSelect'); + select.setAttribute('style', 'min-width: inherit;'); + var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING; + select.setAttribute('style', 'min-width: ' + + (width + SCALE_SELECT_PADDING) + 'px;'); + container.setAttribute('style', 'min-width: ' + width + 'px; ' + + 'max-width: ' + width + 'px;'); + } + + // Set the 'max-height' CSS property of the secondary toolbar. + SecondaryToolbar.setMaxHeight(document.getElementById('viewerContainer')); + }); +}, true); + +window.addEventListener('scalechange', function scalechange(evt) { + document.getElementById('zoomOut').disabled = (evt.scale === MIN_SCALE); + document.getElementById('zoomIn').disabled = (evt.scale === MAX_SCALE); + + var customScaleOption = document.getElementById('customScaleOption'); + customScaleOption.selected = false; + + if (!PDFViewerApplication.updateScaleControls && + (document.getElementById('pageAutoOption').selected || + document.getElementById('pageActualOption').selected || + document.getElementById('pageFitOption').selected || + document.getElementById('pageWidthOption').selected)) { + updateViewarea(); + return; + } + + if (evt.presetValue) { + selectScaleOption(evt.presetValue); + updateViewarea(); + return; + } + + var predefinedValueFound = selectScaleOption('' + evt.scale); + if (!predefinedValueFound) { + var customScale = Math.round(evt.scale * 10000) / 100; + customScaleOption.textContent = + mozL10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%'); + customScaleOption.selected = true; + } + updateViewarea(); +}, true); + +window.addEventListener('pagechange', function pagechange(evt) { + var page = evt.pageNumber; + if (evt.previousPageNumber !== page) { + document.getElementById('pageNumber').value = page; + if (PDFViewerApplication.sidebarOpen) { + PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); + } + } + var numPages = PDFViewerApplication.pagesCount; + + document.getElementById('previous').disabled = (page <= 1); + document.getElementById('next').disabled = (page >= numPages); + + document.getElementById('firstPage').disabled = (page <= 1); + document.getElementById('lastPage').disabled = (page >= numPages); + + // we need to update stats + if (PDFJS.pdfBug && Stats.enabled) { + var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); + if (pageView.stats) { + Stats.add(page, pageView.stats); + } + } + + // checking if the this.page was called from the updateViewarea function + if (evt.updateInProgress) { + return; + } + // Avoid scrolling the first page during loading + if (this.loading && page === 1) { + return; + } + PDFViewerApplication.pdfViewer.scrollPageIntoView(page); +}, true); + +function handleMouseWheel(evt) { + var MOUSE_WHEEL_DELTA_FACTOR = 40; + var ticks = (evt.type === 'DOMMouseScroll') ? -evt.detail : + evt.wheelDelta / MOUSE_WHEEL_DELTA_FACTOR; + var direction = (ticks < 0) ? 'zoomOut' : 'zoomIn'; + + if (PDFViewerApplication.pdfViewer.isInPresentationMode) { + evt.preventDefault(); + PDFViewerApplication.scrollPresentationMode(ticks * + MOUSE_WHEEL_DELTA_FACTOR); + } else if (evt.ctrlKey || evt.metaKey) { + // Only zoom the pages, not the entire viewer. + evt.preventDefault(); + PDFViewerApplication[direction](Math.abs(ticks)); + } +} + +window.addEventListener('DOMMouseScroll', handleMouseWheel); +window.addEventListener('mousewheel', handleMouseWheel); + +window.addEventListener('click', function click(evt) { + if (SecondaryToolbar.opened && + PDFViewerApplication.pdfViewer.containsElement(evt.target)) { + SecondaryToolbar.close(); + } +}, false); + +window.addEventListener('keydown', function keydown(evt) { + if (OverlayManager.active) { + return; + } + + var handled = false; + var cmd = (evt.ctrlKey ? 1 : 0) | + (evt.altKey ? 2 : 0) | + (evt.shiftKey ? 4 : 0) | + (evt.metaKey ? 8 : 0); + + var pdfViewer = PDFViewerApplication.pdfViewer; + var isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode; + + // First, handle the key bindings that are independent whether an input + // control is selected or not. + if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { + // either CTRL or META key with optional SHIFT. + switch (evt.keyCode) { + case 70: // f + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.findBar.open(); + handled = true; + } + break; + case 71: // g + if (!PDFViewerApplication.supportsIntegratedFind) { + PDFViewerApplication.findBar.dispatchEvent('again', + cmd === 5 || cmd === 12); + handled = true; + } + break; + case 61: // FF/Mac '=' + case 107: // FF '+' and '=' + case 187: // Chrome '+' + case 171: // FF with German keyboard + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomIn(); + } + handled = true; + break; + case 173: // FF/Mac '-' + case 109: // FF '-' + case 189: // Chrome '-' + if (!isViewerInPresentationMode) { + PDFViewerApplication.zoomOut(); + } + handled = true; + break; + case 48: // '0' + case 96: // '0' on Numpad of Swedish keyboard + if (!isViewerInPresentationMode) { + // keeping it unhandled (to restore page zoom to 100%) + setTimeout(function () { + // ... and resetting the scale after browser adjusts its scale + PDFViewerApplication.setScale(DEFAULT_SCALE, true); + }); + handled = false; + } + break; + } + } + + // CTRL or META without shift + if (cmd === 1 || cmd === 8) { + switch (evt.keyCode) { + case 83: // s + PDFViewerApplication.download(); + handled = true; + break; + } + } + + // CTRL+ALT or Option+Command + if (cmd === 3 || cmd === 10) { + switch (evt.keyCode) { + case 80: // p + PDFViewerApplication.requestPresentationMode(); + handled = true; + break; + case 71: // g + // focuses input#pageNumber field + document.getElementById('pageNumber').select(); + handled = true; + break; + } + } + + if (handled) { + evt.preventDefault(); + return; + } + + // Some shortcuts should not get handled if a control/input element + // is selected. + var curElement = document.activeElement || document.querySelector(':focus'); + var curElementTagName = curElement && curElement.tagName.toUpperCase(); + if (curElementTagName === 'INPUT' || + curElementTagName === 'TEXTAREA' || + curElementTagName === 'SELECT') { + // Make sure that the secondary toolbar is closed when Escape is pressed. + if (evt.keyCode !== 27) { // 'Esc' + return; + } + } + + if (cmd === 0) { // no control key pressed at all. + switch (evt.keyCode) { + case 38: // up arrow + case 33: // pg up + case 8: // backspace + if (!isViewerInPresentationMode && + PDFViewerApplication.currentScaleValue !== 'page-fit') { + break; + } + /* in presentation mode */ + /* falls through */ + case 37: // left arrow + // horizontal scrolling using arrow keys + if (pdfViewer.isHorizontalScrollbarEnabled) { + break; + } + /* falls through */ + case 75: // 'k' + case 80: // 'p' + PDFViewerApplication.page--; + handled = true; + break; + case 27: // esc key + if (SecondaryToolbar.opened) { + SecondaryToolbar.close(); + handled = true; + } + if (!PDFViewerApplication.supportsIntegratedFind && + PDFViewerApplication.findBar.opened) { + PDFViewerApplication.findBar.close(); + handled = true; + } + break; + case 40: // down arrow + case 34: // pg down + case 32: // spacebar + if (!isViewerInPresentationMode && + PDFViewerApplication.currentScaleValue !== 'page-fit') { + break; + } + /* falls through */ + case 39: // right arrow + // horizontal scrolling using arrow keys + if (pdfViewer.isHorizontalScrollbarEnabled) { + break; + } + /* falls through */ + case 74: // 'j' + case 78: // 'n' + PDFViewerApplication.page++; + handled = true; + break; + + case 36: // home + if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { + PDFViewerApplication.page = 1; + handled = true; + } + break; + case 35: // end + if (isViewerInPresentationMode || (PDFViewerApplication.pdfDocument && + PDFViewerApplication.page < PDFViewerApplication.pagesCount)) { + PDFViewerApplication.page = PDFViewerApplication.pagesCount; + handled = true; + } + break; + + case 72: // 'h' + if (!isViewerInPresentationMode) { + HandTool.toggle(); + } + break; + case 82: // 'r' + PDFViewerApplication.rotatePages(90); + break; + } + } + + if (cmd === 4) { // shift-key + switch (evt.keyCode) { + case 32: // spacebar + if (!isViewerInPresentationMode && + PDFViewerApplication.currentScaleValue !== 'page-fit') { + break; + } + PDFViewerApplication.page--; + handled = true; + break; + + case 82: // 'r' + PDFViewerApplication.rotatePages(-90); + break; + } + } + + if (!handled && !isViewerInPresentationMode) { + // 33=Page Up 34=Page Down 35=End 36=Home + // 37=Left 38=Up 39=Right 40=Down + if (evt.keyCode >= 33 && evt.keyCode <= 40 && + !pdfViewer.containsElement(curElement)) { + // The page container is not focused, but a page navigation key has been + // pressed. Change the focus to the viewer container to make sure that + // navigation by keyboard works as expected. + pdfViewer.focus(); + } + // 32=Spacebar + if (evt.keyCode === 32 && curElementTagName !== 'BUTTON' && + !pdfViewer.containsElement(curElement)) { + pdfViewer.focus(); + } + } + + if (cmd === 2) { // alt-key + switch (evt.keyCode) { + case 37: // left arrow + if (isViewerInPresentationMode) { + PDFHistory.back(); + handled = true; + } + break; + case 39: // right arrow + if (isViewerInPresentationMode) { + PDFHistory.forward(); + handled = true; + } + break; + } + } + + if (handled) { + evt.preventDefault(); + } +}); + +window.addEventListener('beforeprint', function beforePrint(evt) { + PDFViewerApplication.beforePrint(); +}); + +window.addEventListener('afterprint', function afterPrint(evt) { + PDFViewerApplication.afterPrint(); +}); + +(function animationStartedClosure() { + // The offsetParent is not set until the pdf.js iframe or object is visible. + // Waiting for first animation. + PDFViewerApplication.animationStartedPromise = new Promise( + function (resolve) { + window.requestAnimationFrame(resolve); + }); +})(); + + diff --git a/jero-boot-single-startup/src/main/resources/static/view/userlist.html b/jero-boot-single-startup/src/main/resources/static/view/userlist.html new file mode 100644 index 00000000..049c8225 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/static/view/userlist.html @@ -0,0 +1,122 @@ + + + + + iview example + + + + + + +
+ +
+ + + \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/templates/demo3.ftl b/jero-boot-single-startup/src/main/resources/templates/demo3.ftl new file mode 100644 index 00000000..d75badce --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/templates/demo3.ftl @@ -0,0 +1,17 @@ + + + +Spring Boot FreeMarker + + + Freemarker HTML

+ + Sessionid: ${sessionid!}

+ + + <#list userList as item> + ${item!}
+ +
+ + \ No newline at end of file diff --git a/jero-boot-single-startup/src/main/resources/templates/pdfPreviewIframe.ftl b/jero-boot-single-startup/src/main/resources/templates/pdfPreviewIframe.ftl new file mode 100644 index 00000000..1ed4cff1 --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/templates/pdfPreviewIframe.ftl @@ -0,0 +1,30 @@ +<#assign base=springMacroRequestContext.getContextUrl("")> + + + + + + + +PDF预览 + + + + + diff --git a/jero-boot-single-startup/src/main/resources/templates/thirdLogin.ftl b/jero-boot-single-startup/src/main/resources/templates/thirdLogin.ftl new file mode 100644 index 00000000..dd3ab8af --- /dev/null +++ b/jero-boot-single-startup/src/main/resources/templates/thirdLogin.ftl @@ -0,0 +1,28 @@ + + + + + + + 第三方登录 + + +登陆中... + + + \ No newline at end of file diff --git a/jero-boot-single-startup/src/test/java/com/jero/SecurityToolsTest.java b/jero-boot-single-startup/src/test/java/com/jero/SecurityToolsTest.java new file mode 100644 index 00000000..dc8ed397 --- /dev/null +++ b/jero-boot-single-startup/src/test/java/com/jero/SecurityToolsTest.java @@ -0,0 +1,49 @@ +package com.jero; + +import cn.hutool.json.JSONObject; +import com.jero.common.util.security.SecurityTools; +import com.jero.common.util.security.entity.*; +import org.junit.Test; + +public class SecurityToolsTest { + @Test + public void Test(){ + MyKeyPair mkeyPair = SecurityTools.generateKeyPair(); + + JSONObject msg = new JSONObject(); + msg.put("name", "党政辉"); + msg.put("age", 50); + JSONObject identity = new JSONObject(); + identity.put("type", "01"); + identity.put("no", "210882165896524512"); + msg.put("identity", identity); + + // 签名加密部分 + SecuritySignReq signReq = new SecuritySignReq(); + // data为要加密的报文字符串 + signReq.setData(msg.toString()); + // 为rsa私钥 + signReq.setPrikey(mkeyPair.getPriKey()); + // 调用签名方法 + SecuritySignResp sign = SecurityTools.sign(signReq); + // 打印出来加密数据 + // signData为签名数据 + // data为aes加密数据 + // asekey为ras加密过的aeskey + System.out.println(new JSONObject(sign).toStringPretty()); + + // 验签解密部分 + SecurityReq req = new SecurityReq(); + //对方传过来的数据一一对应 + req.setAesKey(sign.getAesKey()); + req.setData(sign.getData()); + req.setSignData(sign.getSignData()); + //我们的公钥 + req.setPubKey(mkeyPair.getPubKey()); + //验签方法调用 + SecurityResp securityResp = SecurityTools.valid(req); + //解密报文data为解密报文 + //sucess 为验签成功失败标志 true代码验签成功,false代表失败 + System.out.println(new JSONObject(securityResp).toStringPretty()); + } +} diff --git a/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/DesformApiTest.java b/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/DesformApiTest.java new file mode 100644 index 00000000..be692dc0 --- /dev/null +++ b/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/DesformApiTest.java @@ -0,0 +1,192 @@ +package com.jero.modules.online.desform.test; + +import com.alibaba.fastjson.JSONObject; +import com.jero.JeroSystemSingleApplication; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.RestUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * 表单设计器 API 接口单元测试 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeroSystemSingleApplication.class) +@SuppressWarnings({"FieldCanBeLocal", "SpringJavaAutowiredMembersInspection"}) +public class DesformApiTest { + + @Autowired + private RedisUtil redisUtil; + + /** + * 测试地址:实际使用时替换成你自己的地址 + */ + private final String BASE_URL = "http://localhost:8080/jero-boot/desform/api/"; + + // 请实际使用时替换成你自己的用户名和密码 + private final String USERNAME = "admin"; + private final String PASSWORD = "123456"; + + /** + * 表单code,实际使用时可以替换成你要测试的表单code + */ + private final String DESFORM_CODE = "qingjiadan"; + + /** + * 测试用例:新增 + */ + @Test + public void testAdd() { + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + DESFORM_CODE; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 POST 代表提交新增数据 + HttpMethod method = HttpMethod.POST; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("name", "张三"); + params.put("sex", "1"); + params.put("begin_time", "2019-12-27"); + params.put("remarks", "生病了"); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:修改 + */ + @Test + public void testEdit() { + // 数据Id + String dataId = "f43ea15c654337fbcb2336dd5422ffc3"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + DESFORM_CODE + "/" + dataId; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 PUT 代表提交修改数据 + HttpMethod method = HttpMethod.PUT; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("name", "李四"); + params.put("sex", "0"); + params.put("begin_time", "2019-12-27"); + params.put("remarks", "感冒了"); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:删除 + */ + @Test + public void testDelete() { + // 数据Id + String dataId = "f43ea15c654337fbcb2336dd5422ffc3"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + DESFORM_CODE + "/" + dataId; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 DELETE 代表删除数据 + HttpMethod method = HttpMethod.DELETE; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + /** + * 测试用例:查询记录 + */ + @Test + public void testQuery() { + // 数据Id + String dataId = "18146ddaa062296442a9310a51baf67b"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + DESFORM_CODE + "/" + dataId; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 GET 代表获取数据 + HttpMethod method = HttpMethod.GET; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + private String getToken() { + String token = JwtUtil.sign(USERNAME, PASSWORD); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, 60); + return token; + } + + private HttpHeaders getHeaders(String token) { + HttpHeaders headers = new HttpHeaders(); + String mediaType = MediaType.APPLICATION_JSON_UTF8_VALUE; + headers.setContentType(MediaType.parseMediaType(mediaType)); + headers.set("Accept", mediaType); + headers.set("X-Access-Token", token); + return headers; + } + +} diff --git a/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/OnlineApiTest.java b/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/OnlineApiTest.java new file mode 100644 index 00000000..73ec7470 --- /dev/null +++ b/jero-boot-single-startup/src/test/java/com/jero/modules/online/desform/test/OnlineApiTest.java @@ -0,0 +1,190 @@ +package com.jero.modules.online.desform.test; + +import com.alibaba.fastjson.JSONObject; +import com.jero.JeroSystemSingleApplication; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.RestUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * online api online表单单元测试 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeroSystemSingleApplication.class) +@SuppressWarnings({"FieldCanBeLocal", "SpringJavaAutowiredMembersInspection"}) +public class OnlineApiTest { + @Autowired + private RedisUtil redisUtil; + + /** + * 测试地址:实际使用时替换成你自己的地址 + */ + private final String BASE_URL = "http://localhost:8080/jero-boot/online/cgform/api/"; + + // 请实际使用时替换成你自己的用户名和密码 + private final String USERNAME = "admin"; + private final String PASSWORD = "123456"; + + /** + * online表单code,实际使用时可以替换成你要测试的表单code + * (测试表test_demo) + */ + private final String ONLINE_CODE = "d35109c3632c4952a19ecc094943dd71"; + + /** + * 测试用例:新增 + */ + @Test + public void testAdd() { + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "form/" + ONLINE_CODE; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 POST 代表提交新增数据 + HttpMethod method = HttpMethod.POST; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("name", "张三"); + params.put("sex", "1"); + params.put("age",15); + params.put("descc", "

富文本编辑

"); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:修改 + */ + @Test + public void testEdit() { + // dataId + String dataId = "1331797913880883201"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "form/" + ONLINE_CODE; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 PUT 代表提交修改数据 + HttpMethod method = HttpMethod.PUT; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("id", dataId); + params.put("name", "张三"); + params.put("sex", "1"); + params.put("age",30); + params.put("descc", "

富文本编辑,重新编辑

"); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:删除 + */ + @Test + public void testDelete() { + // 数据id + String dataId = "1331797913880883201"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "form/" + ONLINE_CODE + "/" + dataId; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 DELETE 代表删除数据 + HttpMethod method = HttpMethod.DELETE; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + /** + * 测试用例:查询记录 + */ + @Test + public void testQuery() { + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "getData/"+ ONLINE_CODE ; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 GET 代表获取数据 + HttpMethod method = HttpMethod.GET; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + private String getToken() { + String token = JwtUtil.sign(USERNAME, PASSWORD); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, 60); + return token; + } + + private HttpHeaders getHeaders(String token) { + HttpHeaders headers = new HttpHeaders(); + String mediaType = MediaType.APPLICATION_JSON_UTF8_VALUE; + headers.setContentType(MediaType.parseMediaType(mediaType)); + headers.set("Accept", mediaType); + headers.set("X-Access-Token", token); + return headers; + } +} diff --git a/jero-boot-single-startup/src/test/java/com/jero/modules/system/test/SysUserTest.java b/jero-boot-single-startup/src/test/java/com/jero/modules/system/test/SysUserTest.java new file mode 100644 index 00000000..9b9bd397 --- /dev/null +++ b/jero-boot-single-startup/src/test/java/com/jero/modules/system/test/SysUserTest.java @@ -0,0 +1,188 @@ +package com.jero.modules.system.test; + +import com.jero.JeroSystemSingleApplication; +import com.jero.common.constant.CommonConstant; +import com.jero.common.system.util.JwtUtil; +import com.jero.common.util.RedisUtil; +import com.jero.common.util.RestUtil; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import com.alibaba.fastjson.JSONObject; +import org.springframework.http.ResponseEntity; + +/** + * 系统用户单元测试 + */ +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = JeroSystemSingleApplication.class) +@SuppressWarnings({"FieldCanBeLocal", "SpringJavaAutowiredMembersInspection"}) +public class SysUserTest { + @Autowired + private RedisUtil redisUtil; + + /** + * 测试地址:实际使用时替换成你自己的地址 + */ + private final String BASE_URL = "http://localhost:8080/jero-boot/sys/user/"; + + // 请实际使用时替换成你自己的用户名和密码 + private final String USERNAME = "admin"; + private final String PASSWORD = "123456"; + + /** + * 测试用例:新增 + */ + @Test + public void testAdd() { + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "add" ; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 POST 代表提交新增数据 + HttpMethod method = HttpMethod.POST; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("username", "wangwuTest"); + params.put("password", "123456"); + params.put("confirmpassword","123456"); + params.put("realname", "单元测试"); + params.put("activitiSync", "1"); + params.put("userIdentity","1"); + params.put("workNo","0025"); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:修改 + */ + @Test + public void testEdit() { + // 数据Id + String dataId = "1331795062924374018"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "edit"; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 PUT 代表提交修改数据 + HttpMethod method = HttpMethod.PUT; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + JSONObject params = new JSONObject(); + params.put("username", "wangwuTest"); + params.put("realname", "单元测试1111"); + params.put("activitiSync", "1"); + params.put("userIdentity","1"); + params.put("workNo","0025"); + params.put("id",dataId); + + System.out.println("请求参数:" + params.toJSONString()); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, params, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + + /** + * 测试用例:删除 + */ + @Test + public void testDelete() { + // 数据Id + String dataId = "1331795062924374018"; + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "delete" + "?id=" + dataId; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 DELETE 代表删除数据 + HttpMethod method = HttpMethod.DELETE; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + /** + * 测试用例:查询记录 + */ + @Test + public void testQuery() { + // 用户Token + String token = this.getToken(); + // 请求地址 + String url = BASE_URL + "list"; + // 请求 Header (用于传递Token) + HttpHeaders headers = this.getHeaders(token); + // 请求方式是 GET 代表获取数据 + HttpMethod method = HttpMethod.GET; + + System.out.println("请求地址:" + url); + System.out.println("请求方式:" + method); + System.out.println("请求Token:" + token); + + // 利用 RestUtil 请求该url + ResponseEntity result = RestUtil.request(url, method, headers, null, null, JSONObject.class); + if (result != null && result.getBody() != null) { + System.out.println("返回结果:" + result.getBody().toJSONString()); + } else { + System.out.println("查询失败"); + } + } + + private String getToken() { + String token = JwtUtil.sign(USERNAME, PASSWORD); + redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token); + redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, 60); + return token; + } + + private HttpHeaders getHeaders(String token) { + HttpHeaders headers = new HttpHeaders(); + String mediaType = MediaType.APPLICATION_JSON_UTF8_VALUE; + headers.setContentType(MediaType.parseMediaType(mediaType)); + headers.set("Accept", mediaType); + headers.set("X-Access-Token", token); + return headers; + } +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 00000000..b0da6d9f --- /dev/null +++ b/pom.xml @@ -0,0 +1,387 @@ + + 4.0.0 + com.jero.boot + jero-boot + 2.4.2 + pom + + + org.springframework.boot + spring-boot-starter-parent + 2.3.5.RELEASE + + + + + 2.4.2 + 1.8 + UTF-8 + 2.2.0 + 1.2.75 + 2.0.4 + 2.0.4 + 42.2.6 + 11.2.0.3 + 4.0 + 8.0.21 + 3.2.0 + 5.3.8 + 3.13.6 + 1.9.4 + 29.0-jre + 3.4.1 + 1.1.22 + 2.6 + 2.1.0 + 3.11.2 + 1.7.1 + 3.11.0 + 3.1.0 + 1.2.5 + 8.0.3 + 1.3.4 + 1.6.1 + 7.4.0 + + + + + jero-boot-single-startup + jero-boot-base + jero-boot-module-demo + jero-boot-module-system + + + + + + hzwlsoft + Releases + http://maven.hzwlsoft.com:4000/repository/maven-releases/ + + + hzwlsoft-snapshot + Snapshot + http://maven.hzwlsoft.com:4000/repository/maven-snapshots/ + + + + + + aliyun + aliyun Repository + http://maven.aliyun.com/nexus/content/groups/public + + false + + + + hzwl-maven + hzwl-maven + http://maven.hzwlsoft.com:4000/repository/maven-public/ + + true + + + true + + + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.projectlombok + lombok + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + + + com.jero.boot + jero-boot-module-system + ${jero.version} + + + + + com.jero.boot + jero-boot-base-tools + ${jero.version} + + + + com.jero.boot + jero-boot-base-core + ${jero.version} + + + + com.jero.boot + jero-boot-base-api + ${jero.version} + + + + com.jero.boot + jero-boot-starter-job + ${jero.version} + + + + + com.jero.boot + jero-boot-starter-lock + ${jero.version} + + + + + com.jero.boot + jero-boot-starter-rabbitmq + ${jero.version} + + + + + com.jero.boot + jero-boot-starter-redis + ${jero.version} + + + + + com.qiniu + qiniu-java-sdk + ${qiniu-java-sdk.version} + + + okhttp + com.squareup.okhttp3 + + + + + + dom4j + dom4j + ${dom4j.version} + + + + org.redisson + redisson + ${redisson.version} + + + + + com.google.guava + guava + ${guava.version} + + + + + cn.hutool + hutool-all + ${hutool-all.version} + + + + + commons-beanutils + commons-beanutils + ${commons-beanutils.version} + + + + commons-fileupload + commons-fileupload + 1.4 + + + commons-io + commons-io + + + + + + + com.xkcoding.justauth + justauth-spring-boot-starter + ${justauth-spring-boot-starter.version} + + + hutool-core + cn.hutool + + + fastjson + com.alibaba + + + + + com.squareup.okhttp3 + okhttp + 4.4.1 + + + + io.minio + minio + ${minio.version} + + + okio + com.squareup.okio + + + okhttp + com.squareup.okhttp3 + + + + + p6spy + p6spy + 3.9.1 + + + + + + jero-boot + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + UTF-8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + org.apache.maven.plugins + maven-resources-plugin + + + woff + woff2 + eot + ttf + svg + + + + + + + src/main/resources + true + + + src/main/java + + **/*.xml + **/*.json + **/*.ftl + + + + + + + + + dev + + + true + + + + dev + + jeecg + + 127.0.0.1:8848 + + + + DEFAULT_GROUP + + 127.0.0.1:8848 + + + + + test + + + test + + jeecg + + 127.0.0.1:8848 + + + + DEFAULT_GROUP + + 127.0.0.1:8848 + + + + + prod + + + prod + + jeecg + + 127.0.0.1:8848 + + + + DEFAULT_GROUP + + 127.0.0.1:8848 + + + + \ No newline at end of file