From ca5445257b1fdeceddf3fcc2dea18c442023aeb7 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期五, 08 十二月 2023 09:30:36 +0800
Subject: [PATCH] 新街口

---
 assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatableFilter.java                   |   47 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertInfoServiceImpl.java     |   86 
 assess-system/src/main/java/com/gkhy/assess/system/mapper/SysUserMapper.java                      |    6 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictType.java                        |    6 
 assess-admin/src/main/resources/db/migration/V20231130002_risk_estimate.sql                       |   33 
 assess-framework/src/main/java/com/gkhy/assess/framework/exception/GlobalExceptionHandler.java    |    2 
 assess-system/src/main/java/com/gkhy/assess/system/service/SysAgencyService.java                  |    9 
 assess-system/src/main/resources/mapper/system/SysNoticeMapper.xml                                |    4 
 assess-admin/src/main/resources/db/migration/V20231204001_device.sql                              |   38 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysCommonServiceImpl.java         |   29 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysUserController.java            |   76 
 assess-admin/src/main/resources/db/migration/V20231205003_accessory_file.sql                      |   21 
 assess-common/src/main/java/com/gkhy/assess/common/domain/vo/AccountVO.java                       |    5 
 assess-admin/src/main/resources/db/migration/V20231123006_notice.sql                              |    8 
 assess-common/src/main/java/com/gkhy/assess/common/domain/PageDomain.java                         |    8 
 assess-admin/src/main/resources/db/migration/V20231123004_config.sql                              |    6 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysAgency.java                          |   52 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysLaw.java                             |    2 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysCommonController.java          |    2 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysDictTypeServiceImpl.java       |   13 
 assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertInfoMapper.java                |   39 
 assess-common/src/main/java/com/gkhy/assess/common/constant/CacheConstant.java                    |    9 
 assess-admin/src/main/resources/db/migration/V20231130003_contract.sql                            |   22 
 assess-admin/src/main/resources/db/migration/V20231124002_attach.sql                              |    4 
 assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertClassifyMapper.java            |   18 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertClassifyController.java     |   47 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysAgencyServiceImpl.java         |   27 
 assess-system/src/main/resources/mapper/system/SysAgencyMapper.xml                                |   60 
 assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysPasswordService.java    |   26 
 assess-admin/src/main/resources/db/migration/V20231124001_region.sql                              |  521 ++
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysUser.java                            |   33 
 assess-admin/src/main/resources/db/migration/V20231204004_plan_person.sql                         |   30 
 assess-common/src/main/java/com/gkhy/assess/common/enums/ExpertTypeEnum.java                      |   29 
 assess-admin/src/main/resources/db/migration/V20231204005_plan_expert.sql                         |   25 
 assess-admin/src/main/resources/db/migration/V20231205002_investigation.sql                       |   21 
 assess-admin/src/main/resources/db/migration/V20231123007_law.sql                                 |   10 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java           |  188 
 assess-system/src/main/resources/mapper/system/SysAttachMapper.xml                                |    2 
 assess-common/pom.xml                                                                             |    5 
 assess-framework/src/main/java/com/gkhy/assess/framework/shiro/ShiroConfig.java                   |   35 
 pom.xml                                                                                           |    8 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertInfoController.java         |   66 
 assess-admin/src/main/resources/db/migration/V20231123002_dict_type.sql                           |    6 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertClassify.java                  |   60 
 assess-admin/src/main/resources/db/migration/V20231205005_audit.sql                               |   41 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysRegionController.java          |   10 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictData.java                        |    4 
 assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/RepeatSubmitInterceptor.java |   51 
 assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertClassifyService.java          |   44 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysConfigServiceImpl.java         |    6 
 assess-system/src/main/resources/mapper/system/SysUserMapper.xml                                  |   46 
 assess-admin/src/main/resources/db/migration/V20231123001_add_user.sql                            |   32 
 assess-admin/src/main/resources/db/migration/V20231130001_project.sql                             |   36 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLawController.java             |   11 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertClassifyServiceImpl.java |   84 
 assess-system/src/main/resources/mapper/system/SysRegionMapper.xml                                |    2 
 assess-common/src/main/java/com/gkhy/assess/common/enums/ApproveStatusEnum.java                   |    2 
 assess-common/src/main/java/com/gkhy/assess/common/utils/StringUtils.java                         |   49 
 assess-admin/src/main/resources/db/migration/V20231204003_estimate_schedule.sql                   |   21 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/CaptchaController.java            |    2 
 assess-admin/src/main/resources/db/migration/V20231205004_face_record.sql                         |   19 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysNoticeController.java          |   11 
 assess-admin/src/main/resources/db/migration/V20231206002_project_material.sql                    |   20 
 assess-common/src/main/java/com/gkhy/assess/common/filter/XssHttpServletRequestWrapper.java       |  111 
 assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpHelper.java                     |   55 
 assess-common/src/main/java/com/gkhy/assess/common/validate/AgencyGroup.java                      |    4 
 assess-admin/src/main/resources/db/migration/V20231123005_agency.sql                              |   17 
 assess-common/src/main/java/com/gkhy/assess/common/utils/ConvertUtil.java                         |   31 
 assess-admin/src/main/resources/db/migration/V20231127001_expert_classify.sql                     |   17 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysNotice.java                          |    2 
 assess-common/src/main/java/com/gkhy/assess/common/domain/BaseEntity.java                         |    2 
 assess-system/src/main/java/com/gkhy/assess/system/domain/vo/UploadObjectVO.java                  |    2 
 assess-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml                        |    5 
 assess-common/src/main/java/com/gkhy/assess/common/validate/MonitorGroup.java                     |    9 
 assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/LogInterceptor.java          |    1 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/NoticeController.java       |   44 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysRegion.java                          |    3 
 assess-system/src/main/java/com/gkhy/assess/system/service/SysNoticeService.java                  |    7 
 assess-admin/src/main/java/com/gkhy/assess/admin/GkhyAdminApplication.java                        |    2 
 assess-common/src/main/java/com/gkhy/assess/common/validate/ExpertGroup.java                      |    4 
 assess-system/src/main/java/com/gkhy/assess/system/service/SysUserService.java                    |   24 
 assess-framework/src/main/java/com/gkhy/assess/framework/config/FilterConfig.java                 |   58 
 assess-system/src/main/java/com/gkhy/assess/system/mapper/SysRegionMapper.java                    |    2 
 assess-admin/src/main/resources/db/migration/V20231205001_work_notification.sql                   |   22 
 assess-admin/src/main/resources/application.yml                                                   |   28 
 assess-admin/src/main/resources/db/migration/V20231127002_expert_info.sql                         |   45 
 assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatedlyRequestWrapper.java           |   77 
 assess-admin/src/main/resources/db/migration/V20231130004_estimate_task.sql                       |   23 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/LawController.java          |   42 
 assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertInfoService.java              |   50 
 assess-common/src/main/java/com/gkhy/assess/common/utils/JSONUtil.java                            |  182 
 assess-framework/src/main/java/com/gkhy/assess/framework/config/MyWebMvcConfig.java               |   11 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysAttach.java                          |    6 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysLawServiceImpl.java            |   20 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysRegionServiceImpl.java         |   58 
 assess-common/src/main/java/com/gkhy/assess/common/utils/SqlUtil.java                             |   12 
 assess-admin/src/main/resources/db/migration/V20231206001_process_audit.sql                       |   48 
 assess-admin/src/test/java/com/gkhy/admin/RegionTest.java                                         |  116 
 assess-common/src/main/java/com/gkhy/assess/common/utils/html/EscapeUtil.java                     |  167 
 assess-common/src/main/java/com/gkhy/assess/common/enums/AccessoryFileTypeEnum.java               |   38 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/AgencyController.java       |   19 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictDataController.java        |   11 
 assess-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml                            |   50 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictTypeController.java        |   11 
 assess-common/src/main/java/com/gkhy/assess/common/filter/XssFilter.java                          |   70 
 assess-admin/src/main/resources/db/migration/V20231204002_estimate_plan.sql                       |   21 
 assess-common/src/main/java/com/gkhy/assess/common/utils/html/HTMLFilter.java                     |  566 ++
 assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/SameUrlDataInterceptor.java  |  106 
 assess-admin/src/main/resources/db/migration/V20231205006_conclusion.sql                          |   19 
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysAgencyController.java          |   19 
 assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java                        |   15 
 assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java       |   23 
 assess-framework/src/main/java/com/gkhy/assess/framework/aop/LogAspect.java                       |    6 
 assess-common/src/main/java/com/gkhy/assess/common/enums/RegionTypeEnum.java                      |   29 
 assess-admin/src/main/resources/db/migration/V20231123003_dict_data.sql                           |   14 
 assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java               |    1 
 assess-framework/src/main/java/com/gkhy/assess/framework/config/ApplicationConfig.java            |   29 
 assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpUtils.java                      |  265 +
 assess-system/src/main/java/com/gkhy/assess/system/service/SysLawService.java                     |    7 
 assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertInfo.java                      |  180 
 assess-system/src/main/resources/mapper/system/SysLawMapper.xml                                   |    2 
 assess-admin/src/main/resources/region.json                                                       | 8528 +++++++++++++++++++++++++++++++++++++
 assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLoginController.java           |    2 
 assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysNoticeServiceImpl.java         |   22 
 124 files changed, 13,283 insertions(+), 312 deletions(-)

diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/GkhyAdminApplication.java b/assess-admin/src/main/java/com/gkhy/assess/admin/GkhyAdminApplication.java
index d7acabe..b901f3e 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/GkhyAdminApplication.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/GkhyAdminApplication.java
@@ -1,5 +1,6 @@
 package com.gkhy.assess.admin;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@@ -7,6 +8,7 @@
 
 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
 @ComponentScan("com.gkhy.assess")
+//@MapperScan("com.gkhy.**.mapper")
 public class GkhyAdminApplication {
 
     public static void main(String[] args) {
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/CaptchaController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/CaptchaController.java
similarity index 94%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/CaptchaController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/CaptchaController.java
index 18b4e2e..5ec1154 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/CaptchaController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/CaptchaController.java
@@ -1,4 +1,4 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.service.CaptchaService;
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertClassifyController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertClassifyController.java
new file mode 100644
index 0000000..bb19588
--- /dev/null
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertClassifyController.java
@@ -0,0 +1,47 @@
+package com.gkhy.assess.admin.controller.web;
+
+import com.gkhy.assess.common.annotation.RepeatSubmit;
+import com.gkhy.assess.common.api.CommonResult;
+import com.gkhy.assess.system.domain.SysExpertClassify;
+import com.gkhy.assess.system.service.SysExpertClassifyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "专家库-专家分类前端控制器")
+@RestController
+@RequestMapping("/system/expert_classify")
+public class ExpertClassifyController {
+    @Autowired
+    private SysExpertClassifyService expertClassifyService;
+
+    @ApiOperation(value = "专家分类列表(树形)")
+    @GetMapping("/tree")
+    public CommonResult classifyTree(SysExpertClassify expertClassify){
+        return CommonResult.success(expertClassifyService.classifyTree(expertClassify));
+    }
+
+    @RepeatSubmit
+    @ApiOperation(value = "修改专家分类")
+    @PutMapping("/mod")
+    public CommonResult modClassify(@RequestBody SysExpertClassify expertClassify){
+        return CommonResult.success(expertClassifyService.modClassify(expertClassify));
+    }
+
+    @RepeatSubmit
+    @ApiOperation(value = "删除专家分类")
+    @DeleteMapping("/del/{classifyId}")
+    public CommonResult delClassify(@PathVariable(value = "classifyId") Long classifyId){
+        return CommonResult.success(expertClassifyService.delClassify(classifyId));
+    }
+
+
+    @RepeatSubmit
+    @ApiOperation(value = "新增专家分类")
+    @PostMapping("/add")
+    public CommonResult addClassify(@RequestBody SysExpertClassify expertClassify){
+        return CommonResult.success(expertClassifyService.addClassify(expertClassify));
+    }
+
+}
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertInfoController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertInfoController.java
new file mode 100644
index 0000000..8a87e30
--- /dev/null
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/ExpertInfoController.java
@@ -0,0 +1,66 @@
+package com.gkhy.assess.admin.controller.web;
+
+import com.gkhy.assess.common.annotation.RepeatSubmit;
+import com.gkhy.assess.common.api.CommonResult;
+import com.gkhy.assess.system.domain.SysAgency;
+import com.gkhy.assess.system.domain.SysExpertClassify;
+import com.gkhy.assess.system.domain.SysExpertInfo;
+import com.gkhy.assess.system.service.SysExpertInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "专家库-专家信息前端控制器")
+@RestController
+@RequestMapping("/system/expert_info")
+public class ExpertInfoController {
+    @Autowired
+    private SysExpertInfoService expertInfoService;
+
+    @ApiOperation(value = "专家列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+    })
+    @GetMapping("/list")
+    public CommonResult exportInfoList(SysExpertInfo expertInfo){
+        return CommonResult.success(expertInfoService.exportInfoList(expertInfo));
+    }
+
+    @RepeatSubmit
+    @ApiOperation(value = "新增专家信息")
+    @PostMapping("/add")
+    public CommonResult addExpertInfo(@RequestBody SysExpertInfo expertInfo){
+        return CommonResult.success(expertInfoService.addExpertInfo(expertInfo));
+    }
+
+    @RepeatSubmit
+    @ApiOperation(value = "修改专家信息")
+    @PutMapping("/mod")
+    public CommonResult modExpertInfo(@RequestBody SysExpertInfo expertInfo){
+        return CommonResult.success(expertInfoService.modExpertInfo(expertInfo));
+    }
+
+
+    @RepeatSubmit
+    @ApiOperation(value = "删除专家信息")
+    @DeleteMapping("/del/{expertId}")
+    public CommonResult delExpertInfo(@PathVariable(value = "expertId") Long expertId){
+        return CommonResult.success(expertInfoService.delExpertInfo(expertId));
+    }
+
+
+    @RepeatSubmit
+    @ApiOperation(value = "批量删除专家信息")
+    @DeleteMapping("/del/batch/{expertIds}")
+    public CommonResult delExpertInfo(@PathVariable(value = "expertIds") Long[] expertIds){
+        return CommonResult.success(expertInfoService.delExpertInfoBatch(expertIds));
+    }
+
+
+
+
+}
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysAgencyController.java
similarity index 69%
copy from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java
copy to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysAgencyController.java
index d7f343f..892fdd1 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysAgencyController.java
@@ -1,12 +1,16 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysAgency;
+import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.service.SysAgencyService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.Logical;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -39,9 +43,18 @@
 
     @ApiOperation(value = "校验机构名称")
     @PostMapping("/checkAgencyNameUnique")
-    public boolean checkAgencyNameUnique(SysAgency agency)
+    public CommonResult checkAgencyNameUnique(@RequestBody SysAgency agency)
     {
-        return agencyService.checkAgencyNameUnique(agency);
+        return CommonResult.success(agencyService.checkAgencyNameUnique(agency));
+    }
+
+    @RepeatSubmit
+    @RequiresPermissions(value={"system:assess:monitor"})
+    @ApiOperation(value = "公示状态修改,公示/不公示")
+    @PostMapping("/changePublic")
+    public CommonResult changePublic(@RequestBody SysAgency agency)
+    {
+        return CommonResult.success(agencyService.changePublic(agency));
     }
 
 }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysCommonController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysCommonController.java
similarity index 96%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysCommonController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysCommonController.java
index fbfc141..b3e22f6 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysCommonController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysCommonController.java
@@ -1,4 +1,4 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysAgency;
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictDataController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictDataController.java
similarity index 90%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictDataController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictDataController.java
index 9ae185f..0b2067a 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictDataController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictDataController.java
@@ -1,5 +1,6 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysDictData;
 import com.gkhy.assess.system.domain.SysDictType;
@@ -38,6 +39,7 @@
         return CommonResult.success(dictDataService.getDictDataById(dictId));
     }
 
+    @RepeatSubmit
     @ApiOperation(value = "新增字典数据")
     @PostMapping("/addDictData")
     public CommonResult addDictData(@Validated @RequestBody SysDictData dictData){
@@ -45,6 +47,7 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "编辑字典数据")
     @PutMapping("/editDictData")
     public CommonResult editDictData(@Validated @RequestBody SysDictData dictData){
@@ -52,16 +55,18 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "删除字典数据")
-    @PutMapping("/remove/{dictId}")
+    @DeleteMapping("/remove/{dictId}")
     public CommonResult removeDictData(@PathVariable(name = "dictId")Long dictId){
         return CommonResult.success(dictDataService.deleteDictDataById(dictId));
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "字典数据状态修改,停用/启用")
     @PostMapping("/changeStatus")
-    public CommonResult changeStatus(SysDictData SysDictData)
+    public CommonResult changeStatus(@RequestBody SysDictData SysDictData)
     {
         return CommonResult.success(dictDataService.changeDictDataStatus(SysDictData));
     }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictTypeController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictTypeController.java
similarity index 90%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictTypeController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictTypeController.java
index 6390ecc..7a98a2d 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysDictTypeController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysDictTypeController.java
@@ -1,5 +1,6 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysDictType;
 import com.gkhy.assess.system.domain.SysLaw;
@@ -52,6 +53,7 @@
 
 
 
+    @RepeatSubmit
     @ApiOperation(value = "新增字典类型")
     @PostMapping("/addDictType")
     public CommonResult addDictType(@Validated @RequestBody SysDictType dictType){
@@ -59,6 +61,7 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "编辑字典类型")
     @PutMapping("/editDictType")
     public CommonResult editDictType(@Validated @RequestBody SysDictType dictType){
@@ -66,6 +69,7 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "删除字典类型")
     @DeleteMapping("/remove/{dictId}")
     public CommonResult removeDictType(@PathVariable(name = "dictId")Long dictId){
@@ -73,9 +77,10 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "字典类型状态修改,停用/启用")
     @PostMapping("/changeStatus")
-    public CommonResult changeStatus(SysDictType SysDictType)
+    public CommonResult changeStatus(@RequestBody SysDictType SysDictType)
     {
         return CommonResult.success(dictTypeService.changeDictTypeStatus(SysDictType));
     }
@@ -85,7 +90,7 @@
      * 校验字典类型
      */
     @PostMapping("/checkDictTypeUnique")
-    public CommonResult checkDictTypeUnique(SysDictType dictType)
+    public CommonResult checkDictTypeUnique(@RequestBody SysDictType dictType)
     {
         return CommonResult.success(dictTypeService.checkDictTypeUnique(dictType));
     }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLawController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLawController.java
similarity index 90%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLawController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLawController.java
index ef50867..b913ea0 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLawController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLawController.java
@@ -1,5 +1,6 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysLaw;
 import com.gkhy.assess.system.service.SysLawService;
@@ -39,6 +40,7 @@
         return CommonResult.success(lawService.getLawById(lawId));
     }
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "新增法律法规")
     @PostMapping("/addLaw")
@@ -47,6 +49,7 @@
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "编辑法律法规")
     @PutMapping("/editLaw")
@@ -55,18 +58,20 @@
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "删除法律法规")
-    @PutMapping("/remove/{lawId}")
+    @DeleteMapping("/remove/{lawId}")
     public CommonResult removeLaw(@PathVariable(name = "lawId")Long lawId){
         return CommonResult.success(lawService.deleteLawById(lawId));
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "法律法规状态修改,停用/启用")
     @PostMapping("/changeStatus")
-    public CommonResult changeStatus(SysLaw law)
+    public CommonResult changeStatus(@RequestBody SysLaw law)
     {
         return CommonResult.success(lawService.changeLawStatus(law));
     }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLoginController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLoginController.java
similarity index 96%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLoginController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLoginController.java
index 9850ac2..64e5a75 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysLoginController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysLoginController.java
@@ -1,4 +1,4 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
 
 import com.gkhy.assess.common.api.CommonResult;
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysNoticeController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysNoticeController.java
similarity index 90%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysNoticeController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysNoticeController.java
index 29a2757..8964a06 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysNoticeController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysNoticeController.java
@@ -1,5 +1,6 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysNotice;
 import com.gkhy.assess.system.service.SysNoticeService;
@@ -39,6 +40,7 @@
         return CommonResult.success(noticeService.getNoticeById(noticeId));
     }
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "新增通知")
     @PostMapping("/addNotice")
@@ -47,6 +49,7 @@
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "编辑通知")
     @PutMapping("/editNotice")
@@ -55,17 +58,19 @@
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "删除通知")
-    @PutMapping("/remove/{noticeId}")
+    @DeleteMapping("/remove/{noticeId}")
     public CommonResult removeNotice(@PathVariable(name = "noticeId")Long noticeId){
         return CommonResult.success(noticeService.deleteNoticeById(noticeId));
     }
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "通知状态修改,停用/启用")
     @PostMapping("/changeStatus")
-    public CommonResult changeStatus(SysNotice notice)
+    public CommonResult changeStatus(@RequestBody SysNotice notice)
     {
         return CommonResult.success(noticeService.changeNoticeStatus(notice));
     }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysRegionController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysRegionController.java
similarity index 87%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysRegionController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysRegionController.java
index 0a12f77..44d11d0 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysRegionController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysRegionController.java
@@ -1,5 +1,6 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysRegion;
 import com.gkhy.assess.system.service.SysRegionService;
@@ -18,7 +19,7 @@
     @Autowired
     private SysRegionService regionService;
 
-    @ApiOperation(value = "地区列表(树形结构)")
+    @ApiOperation(value = "地区列表(树形结构),默认返回疆内数据")
     @GetMapping("/regionTree")
     public CommonResult regionTree(SysRegion region){
         return CommonResult.success(regionService.regionTree(region));
@@ -35,6 +36,7 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "新增地区")
     @PostMapping("/addRegion")
     public CommonResult addLaw(@Validated @RequestBody SysRegion region){
@@ -42,6 +44,7 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "编辑地区")
     @PutMapping("/editRegion")
     public CommonResult editLaw(@Validated @RequestBody SysRegion region){
@@ -49,8 +52,9 @@
     }
 
 
+    @RepeatSubmit
     @ApiOperation(value = "删除地区")
-    @PutMapping("/remove/{regionId}")
+    @DeleteMapping("/remove/{regionId}")
     public CommonResult removeRegion(@PathVariable(name = "regionId")Long regionId){
         return CommonResult.success(regionService.deleteRegionById(regionId));
     }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysUserController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysUserController.java
similarity index 64%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysUserController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysUserController.java
index 871800b..fe343cb 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysUserController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/SysUserController.java
@@ -1,8 +1,10 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web;
 
+import com.gkhy.assess.common.annotation.RepeatSubmit;
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.common.validate.AgencyGroup;
 import com.gkhy.assess.common.validate.ExpertGroup;
+import com.gkhy.assess.common.validate.MonitorGroup;
 import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.service.SysUserService;
 import io.swagger.annotations.Api;
@@ -55,13 +57,22 @@
         return CommonResult.success(sysUserService.expertList(user));
     }
 
-
-    @ApiOperation(value = "机构注册")
-    @PostMapping("/agencyRegister")
-    public CommonResult agencyRegister(@Validated(AgencyGroup.class) @RequestBody SysUser user){
-        return CommonResult.success(sysUserService.agencyRegister(user));
+    @RepeatSubmit
+    @ApiOperation(value = "创建监管用户")
+    @PostMapping("/addMonitor")
+    public CommonResult addMonitor(@Validated(MonitorGroup.class) @RequestBody SysUser user){
+        return CommonResult.success(sysUserService.addMonitor(user));
     }
 
+
+    @RepeatSubmit
+    @ApiOperation(value = "机构注册")
+    @PostMapping("/addAgency")
+    public CommonResult addAgency(@Validated(AgencyGroup.class) @RequestBody SysUser user){
+        return CommonResult.success(sysUserService.addAgency(user));
+    }
+
+    @RepeatSubmit
     @RequiresPermissions(value={"system:assess:monitor","system:assess:agency"},logical = Logical.OR)
     @ApiOperation(value = "创建专家")
     @PostMapping("/addExpert")
@@ -69,58 +80,84 @@
         return CommonResult.success(sysUserService.addExpert(user));
     }
 
+    @RepeatSubmit
+    @RequiresPermissions("system:assess:monitor")
+    @ApiOperation(value = "编辑监管用户")
+    @PutMapping("/editMonitor")
+    public CommonResult editMonitor(@RequestBody SysUser user){
+        return CommonResult.success(sysUserService.editMonitor(user));
+    }
+
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
     @ApiOperation(value = "编辑机构")
     @PutMapping("/editAgency")
-    public CommonResult editAgency(@Validated(ExpertGroup.class) @RequestBody SysUser user){
+    public CommonResult editAgency(@RequestBody SysUser user){
         return CommonResult.success(sysUserService.editAgency(user));
     }
 
+    @RepeatSubmit
     @RequiresPermissions(value={"system:assess:monitor","system:assess:agency"},logical = Logical.OR)
     @ApiOperation(value = "编辑专家")
     @PutMapping("/editExpert")
-    public CommonResult editExpert(@Validated(ExpertGroup.class) @RequestBody SysUser user){
+    public CommonResult editExpert(@RequestBody SysUser user){
         return CommonResult.success(sysUserService.editExpert(user));
+    }
+
+    @ApiOperation(value = "根据id获取用户详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "userId", dataType = "int", required = true, value = "用户id")
+    })
+    @GetMapping("/getUserById")
+    public CommonResult getUserById(@RequestParam(required = true) Long userId){
+        return CommonResult.success(sysUserService.getUserInfoById(userId));
     }
 
 
     @ApiOperation(value = "校验用户名")
     @PostMapping("/checkUserNameUnique")
-    public boolean checkLoginNameUnique(SysUser user)
+    public CommonResult checkLoginNameUnique(@RequestBody SysUser user)
     {
-        return sysUserService.checkUsernameUnique(user);
+        return CommonResult.success(sysUserService.checkUsernameUnique(user));
     }
 
 
     @ApiOperation(value = "校验手机号")
     @PostMapping("/checkPhoneUnique")
-    public boolean checkPhoneUnique(SysUser user)
+    public CommonResult checkPhoneUnique(@RequestBody SysUser user)
     {
-        return sysUserService.checkPhoneUnique(user);
+        return CommonResult.success(sysUserService.checkPhoneUnique(user));
+    }
+
+    @RepeatSubmit
+    @ApiOperation(value = "用户修改密码")
+    @PutMapping("/resetUserPwd")
+    public CommonResult resetUserPwd(@RequestBody SysUser user)
+    {
+        return CommonResult.success(sysUserService.resetUserPwd(user));
     }
 
 
-
-    /**
-     * 用户状态修改
-     */
+    @RepeatSubmit
     @RequiresPermissions(value={"system:assess:monitor","system:assess:agency"},logical = Logical.OR)
     @ApiOperation(value = "用户状态修改,停用/启用")
     @PostMapping("/changeStatus")
-    public CommonResult changeStatus(SysUser user)
+    public CommonResult changeStatus(@RequestBody SysUser user)
     {
         return CommonResult.success(sysUserService.changeUserStatus(user));
     }
 
+    @RepeatSubmit
     @RequiresPermissions("system:assess:monitor")
-    @ApiOperation(value = "审批状态修改,停用/启用")
+    @ApiOperation(value = "审批状态修改,审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废)")
     @PostMapping("/changeApprove")
-    public CommonResult changeApprove(SysUser user)
+    public CommonResult changeApprove(@RequestBody SysUser user)
     {
         return CommonResult.success(sysUserService.changeApprove(user));
     }
 
 
+    @RepeatSubmit
     @RequiresPermissions(value={"system:assess:monitor","system:assess:agency"},logical = Logical.OR)
     @ApiOperation(value = "根据id删除用户")
     @DeleteMapping("/remove/{userId}")
@@ -131,4 +168,5 @@
 
 
 
+
 }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/AgencyController.java
similarity index 79%
rename from assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java
rename to assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/AgencyController.java
index d7f343f..3245b1b 100644
--- a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/SysAgencyController.java
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/AgencyController.java
@@ -1,4 +1,4 @@
-package com.gkhy.assess.admin.controller;
+package com.gkhy.assess.admin.controller.web.front;
 
 import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.system.domain.SysAgency;
@@ -7,13 +7,14 @@
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-@Api(tags = "机构前端控制器")
+@Api(tags = "前台首页-机构前端控制器")
 @RestController
-@RequestMapping("/system/agency")
-public class SysAgencyController {
+@RequestMapping("/agency")
+public class AgencyController {
     @Autowired
     private SysAgencyService agencyService;
 
@@ -24,6 +25,8 @@
     })
     @GetMapping("/agencyList")
     public CommonResult agencyList(SysAgency agency){
+        agency.setPublication(0);
+        agency.setDelFlag(0);
         return CommonResult.success(agencyService.agencyList(agency));
     }
 
@@ -36,12 +39,4 @@
     public CommonResult getAgencyById(@RequestParam(required = true) Long agencyId){
         return CommonResult.success(agencyService.getAgencyById(agencyId));
     }
-
-    @ApiOperation(value = "校验机构名称")
-    @PostMapping("/checkAgencyNameUnique")
-    public boolean checkAgencyNameUnique(SysAgency agency)
-    {
-        return agencyService.checkAgencyNameUnique(agency);
-    }
-
 }
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/LawController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/LawController.java
new file mode 100644
index 0000000..1259e00
--- /dev/null
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/LawController.java
@@ -0,0 +1,42 @@
+package com.gkhy.assess.admin.controller.web.front;
+
+import com.gkhy.assess.common.api.CommonResult;
+import com.gkhy.assess.system.domain.SysLaw;
+import com.gkhy.assess.system.service.SysLawService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "前台首页-法律法规前端控制器")
+@RestController
+@RequestMapping("/law")
+public class LawController {
+    @Autowired
+    private SysLawService lawService;
+
+    @ApiOperation(value = "法律法规列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+    })
+    @GetMapping("/lawList")
+    public CommonResult lawList(SysLaw law){
+        law.setStatus(0);
+        return CommonResult.success(lawService.lawList(law));
+    }
+
+
+    @ApiOperation(value = "根据id获取法律法规详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "lawId", dataType = "int", required = true, value = "法律法规id")
+    })
+    @GetMapping("/getLawById")
+    public CommonResult getLawById(@RequestParam(required = true)Long lawId){
+        return CommonResult.success(lawService.getLawById(lawId));
+    }
+}
diff --git a/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/NoticeController.java b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/NoticeController.java
new file mode 100644
index 0000000..b858a36
--- /dev/null
+++ b/assess-admin/src/main/java/com/gkhy/assess/admin/controller/web/front/NoticeController.java
@@ -0,0 +1,44 @@
+package com.gkhy.assess.admin.controller.web.front;
+
+import com.gkhy.assess.common.api.CommonResult;
+import com.gkhy.assess.system.domain.SysNotice;
+import com.gkhy.assess.system.service.SysNoticeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "前台首页-通知公告前端控制器")
+@RestController
+@RequestMapping("/notice")
+public class NoticeController {
+    @Autowired
+    private SysNoticeService noticeService;
+
+    @ApiOperation(value = "通知列表(分页)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "pageNum", dataType = "int", required = false, value = "当前页,默认1"),
+            @ApiImplicitParam(paramType = "query", name = "pageSize", dataType = "int", required = false, value = "每页数目,默认10")
+    })
+    @GetMapping("/noticeList")
+    public CommonResult noticeList(SysNotice notice){
+        notice.setStatus(0);
+        return CommonResult.success(noticeService.noticeList(notice));
+    }
+
+
+    @ApiOperation(value = "根据id获取通知详情")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "query", name = "noticeId", dataType = "int", required = true, value = "通知id")
+    })
+    @GetMapping("/getNoticeById")
+    public CommonResult getNoticeById(@RequestParam(required = true)Long noticeId){
+        return CommonResult.success(noticeService.getNoticeById(noticeId));
+    }
+
+
+}
diff --git a/assess-admin/src/main/resources/application.yml b/assess-admin/src/main/resources/application.yml
index 9ae7cd4..f82a6b9 100644
--- a/assess-admin/src/main/resources/application.yml
+++ b/assess-admin/src/main/resources/application.yml
@@ -7,9 +7,9 @@
     multipart:
       enabled: true
       # 单个文件大小
-      max-file-size: 10MB
+      max-file-size: 20MB
       # 设置总上传的文件大小
-      max-request-size: 20MB
+      max-request-size: 100MB
   mvc:
     pathmatch:
       matching-strategy: ant_path_matcher
@@ -19,16 +19,6 @@
   servlet:
     context-path: /api
 
-#shiro配置
-#shiro:
-#  sessionManager:
-#    sessionIdCookieEnabled: true
-#    sessionIdUrlRewritingEnabled: true
-#  unauthorizedUrl: /unauthorizedurl
-#  web:
-#    enabled: true
-#  successUrl: /index
-#  loginUrl: /account/login
 
 # 用户配置
 user:
@@ -38,6 +28,14 @@
 
 
 image:
-  root_path: upload
-  upload_image: upload/images
-  upload_file: upload/documents
+  upload_path: upload
+
+
+# 防止XSS攻击
+xss:
+  # 过滤开关
+  enabled: true
+  # 排除链接(多个用逗号分隔)
+  excludes: /system/notice
+  # 匹配链接
+  urlPatterns: /system/*,/monitor/*,/tool/*
diff --git a/assess-admin/src/main/resources/db/migration/V20231123001_add_user.sql b/assess-admin/src/main/resources/db/migration/V20231123001_add_user.sql
index ab3a99e..9caf8db 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123001_add_user.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123001_add_user.sql
@@ -2,34 +2,34 @@
 CREATE TABLE `smart_assess`.`sys_user`  (
 `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
 `username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '登录账号',
-`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '用户昵称/姓名',
+`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '用户昵称/姓名',
 `identity` tinyint NOT NULL COMMENT '用户身份(0代表监管用户,1代表机构用户,2代表专家用户)',
-`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '邮箱',
-`phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码',
+`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '邮箱',
+`phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '手机号码',
 `sex` tinyint NULL DEFAULT 2 COMMENT '用户性别(0男,1女,2未知,默认2)',
-`avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像路径',
+`avatar` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '头像路径',
 `password` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
-`salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '盐加密',
+`salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '盐加密',
 `status` tinyint NULL DEFAULT 0 COMMENT '账号状态(0正常,1停用,默认0)',
 `del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0代表存在,1代表删除,默认0)',
 `user_type` tinyint NULL DEFAULT 0 COMMENT '账号类型(0代表工作人员,1代表领导,默认0)',
-`manage_region` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '管辖地区',
+`manage_region` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '管辖地区',
 `expert_type` tinyint NULL DEFAULT 0 COMMENT '专家类型(0代表安全评价,1代表检验检测,默认0)',
 `agency_id` bigint NULL DEFAULT NULL COMMENT '机构id',
-`post` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '职务',
-`job_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '职称',
-`major` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '专业方向',
-`approve` tinyint NULL DEFAULT 1 COMMENT '审批状态(0审批通过,1待审批,2未通过 默认1)',
-`login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '最后登录ip',
+`post` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '职务',
+`job_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '职称',
+`major` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '专业方向',
+`state` tinyint(2) NULL DEFAULT 1 COMMENT '审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废 默认1)',
+`login_ip` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '最后登录ip',
 `login_date` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后登录时间',
 `pwd_update_date` datetime NULL DEFAULT NULL COMMENT '密码最后更新时间',
-`create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
+`create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '创建者',
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-`update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
+`update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '更新者',
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '备注',
 PRIMARY KEY (`id`) USING BTREE,
 UNIQUE INDEX `index_username`(`username`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '用户表' ROW_FORMAT = Dynamic;
-
-insert into sys_user values(1,'admin', '国科鸿宇', 0, 'gkhy@163.com', '15888888888', 0, '', '29c67a30398638269fe600f73a054934', '111111', 0, 0, 0,'',null,null,'','','',1,'127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', sysdate(), '管理员');
+-- admin  admin@123
+insert into sys_user values(1,'admin', '国科鸿宇', 0, 'gkhy@163.com', '15888888888', 0, '', 'b3065cdf5dfdbbc573e2f576c8dc147a', '111111', 0, 0, 0,'',null,null,'','','',1,'127.0.0.1', sysdate(), sysdate(), 'admin', sysdate(), '', sysdate(), '管理员');
diff --git a/assess-admin/src/main/resources/db/migration/V20231123002_dict_type.sql b/assess-admin/src/main/resources/db/migration/V20231123002_dict_type.sql
index b4a1d7b..3a2b9af 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123002_dict_type.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123002_dict_type.sql
@@ -8,11 +8,11 @@
 `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典名称',
 `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典类型',
 `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0正常,1停用)',
-`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
-`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
+`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
 PRIMARY KEY (`id`) USING BTREE,
 UNIQUE INDEX `index_name`(`name`) USING BTREE,
 UNIQUE INDEX `index_type`(`dict_type`) USING BTREE
diff --git a/assess-admin/src/main/resources/db/migration/V20231123003_dict_data.sql b/assess-admin/src/main/resources/db/migration/V20231123003_dict_data.sql
index c52c178..98c2cd0 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123003_dict_data.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123003_dict_data.sql
@@ -11,11 +11,19 @@
 `dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '字典类型',
 `is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'N' COMMENT '是否默认(Y是 N否)',
 `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态(0正常 1停用)',
-`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
-`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '',
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',
 PRIMARY KEY (`id`) USING BTREE,
 UNIQUE INDEX `index_l_v_t`(`dict_type`, `label`, `value`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
+
+insert into sys_dict_data values(1, 0, '煤炭开采业','0', 'sys_business_scope', 'Y',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(2, 0, '金属、非金属矿及其他矿采选业','1', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(3, 0, '陆地石油和天然气开采业','2', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(4, 0, '陆上油气管道运输业','3', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(5, 0, '石油加工业,化学原料、化学品及医药制造业','4', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(6, 0, '烟花爆竹制造业','5', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
+insert into sys_dict_data values(7, 0, '金属冶炼','6', 'sys_business_scope', 'N',0, 'admin', sysdate(), '', sysdate(), '业务范围数据');
diff --git a/assess-admin/src/main/resources/db/migration/V20231123004_config.sql b/assess-admin/src/main/resources/db/migration/V20231123004_config.sql
index 02358e3..1d86c69 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123004_config.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123004_config.sql
@@ -9,11 +9,11 @@
 `config_key` varchar(100) NOT NULL COMMENT '参数键名',
 `config_value` varchar(500) NOT NULL COMMENT '参数键值',
 `type` char(1) NULL DEFAULT 'N' COMMENT '系统内置(Y是 N否)',
-`create_by` varchar(64) NULL DEFAULT '' COMMENT '创建人',
+`create_by` varchar(64) NULL COMMENT '创建人',
 `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-`update_by` varchar(64) NULL DEFAULT '' COMMENT '更新人',
+`update_by` varchar(64) NULL COMMENT '更新人',
 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
-`remark` varchar(100) NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) NULL COMMENT '备注',
 PRIMARY KEY (`id`),
 UNIQUE INDEX `index_key`(`config_key`) USING BTREE,
 UNIQUE INDEX `index_name`(`name`) USING BTREE
diff --git a/assess-admin/src/main/resources/db/migration/V20231123005_agency.sql b/assess-admin/src/main/resources/db/migration/V20231123005_agency.sql
index 1b8881d..10a7652 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123005_agency.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123005_agency.sql
@@ -6,13 +6,13 @@
 CREATE TABLE `smart_assess`.`sys_agency`  (
 `id` bigint NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL COMMENT '机构名称',
-`credit_code` varchar(50) NOT NULL COMMENT '社会信用代码',
+`credit_code` varchar(30) NOT NULL COMMENT '社会信用代码',
 `attribute` tinyint(2) NOT NULL COMMENT '机构属性(0疆内,1疆外,默认0)',
-`province` varchar(10) NULL DEFAULT '' COMMENT '省',
+`province` varchar(10) NULL COMMENT '省',
 `city` varchar(20) NOT NULL COMMENT '市',
-`district` varchar(20) NOT NULL COMMENT '区',
+`district` varchar(20) NULL COMMENT '区',
 `address` varchar(100) NOT NULL COMMENT '经营地址',
-`web` varchar(100) NULL DEFAULT '' COMMENT '机构网址',
+`web` varchar(100) NULL COMMENT '机构网址',
 `legal_person` varchar(20) NOT NULL COMMENT '法定代表人',
 `legal_phone` varchar(13) NOT NULL COMMENT '法人电话',
 `manager` varchar(20) NOT NULL COMMENT '机构负责人',
@@ -25,13 +25,14 @@
 `archive_area` varchar(20) NOT NULL COMMENT '档案室面积',
 `reg_address` varchar(100) NOT NULL COMMENT '注册地址',
 `business` varchar(20) NOT NULL COMMENT '业务范围',
-`report_path` varchar(50) NULL DEFAULT '' COMMENT '机构信息上报表存放路径',
+`report_path` varchar(50) NULL COMMENT '机构信息上报表存放路径',
+`publication` tinyint(2) NULL DEFAULT 0 COMMENT '是否公示(0代表公示,1代表不公示,默认0)',
 `del_flag` tinyint(2) NULL DEFAULT 0 COMMENT '删除标志(0代表存在,1代表删除,默认0)',
-`create_by` varchar(20) NULL DEFAULT '' COMMENT '创建人',
+`create_by` varchar(20) NULL COMMENT '创建人',
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-`update_by` varchar(20) NULL DEFAULT '' COMMENT '更新人',
+`update_by` varchar(20) NULL COMMENT '更新人',
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-`remark` varchar(100) NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) NULL COMMENT '备注',
 PRIMARY KEY (`id`),
 INDEX `index_name`(`name`) USING BTREE
 )ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '机构表' ROW_FORMAT = Dynamic;
diff --git a/assess-admin/src/main/resources/db/migration/V20231123006_notice.sql b/assess-admin/src/main/resources/db/migration/V20231123006_notice.sql
index 1272c78..67711f2 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123006_notice.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123006_notice.sql
@@ -6,12 +6,12 @@
 CREATE TABLE `smart_assess`.`sys_notice`  (
 `id` bigint NOT NULL AUTO_INCREMENT,
 `title` varchar(50) NOT NULL COMMENT '通知标题',
-`content` varchar(2000) NULL DEFAULT '' COMMENT '通知内容',
+`content` text NULL COMMENT '通知内容',
 `status` tinyint(2) NULL DEFAULT 0 COMMENT '通知状态(0正常,1关闭 默认0)',
-`create_by` varchar(20) NULL DEFAULT '' COMMENT '创建人',
+`create_by` varchar(20) NULL COMMENT '创建人',
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-`update_by` varchar(20) NULL DEFAULT '' COMMENT '更新人',
+`update_by` varchar(20) NULL COMMENT '更新人',
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-`remark` varchar(100) NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) NULL COMMENT '备注',
 PRIMARY KEY (`id`)
 )ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '通知表' ROW_FORMAT = Dynamic;
diff --git a/assess-admin/src/main/resources/db/migration/V20231123007_law.sql b/assess-admin/src/main/resources/db/migration/V20231123007_law.sql
index ded507e..4606862 100644
--- a/assess-admin/src/main/resources/db/migration/V20231123007_law.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231123007_law.sql
@@ -6,16 +6,16 @@
 CREATE TABLE `smart_assess`.`sys_law`  (
 `id` bigint NOT NULL AUTO_INCREMENT,
 `title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '住标题',
-`sub_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '副标题',
-`content` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '内容',
+`sub_title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '副标题',
+`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',
 `law_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '法律法规类别',
 `pub_agency` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '颁布机构',
 `pub_date` datetime NOT NULL COMMENT '颁布日期',
 `status` tinyint NULL DEFAULT 0 COMMENT '状态(0正常,1关闭 默认0)',
-`create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建人',
+`create_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL  COMMENT '创建人',
 `create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-`update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新人',
+`update_by` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
 `update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
-`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
+`remark` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',
 PRIMARY KEY (`id`) USING BTREE
 ) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '法律法规表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231124001_region.sql b/assess-admin/src/main/resources/db/migration/V20231124001_region.sql
index a270859..1d4a9d8 100644
--- a/assess-admin/src/main/resources/db/migration/V20231124001_region.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231124001_region.sql
@@ -8,6 +8,523 @@
 `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '地区名称',
 `sort` int NULL DEFAULT 0 COMMENT '排序',
 `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父主键',
+`region_type` tinyint NULL DEFAULT 0 COMMENT '地区类型(0是疆内,1是疆外,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`) USING BTREE,
-UNIQUE INDEX `index_key`(`parent_id`, `name`) USING BTREE
-) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统地区表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
+UNIQUE INDEX `index_key`(`parent_id`, `name`,`region_type`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统地区表' ROW_FORMAT = DYNAMIC;
+
+
+
+use smart_assess;
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (1, '乌鲁木齐市', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (2, '天山区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (3, '沙依巴克区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (4, '新市区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (5, '水磨沟区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (6, '头屯河区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (7, '达坂城区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (8, '米东区', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (9, '乌鲁木齐县', 0, 1, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (10, '克拉玛依市', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (11, '独山子区', 0, 10, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (12, '克拉玛依区', 0, 10, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (13, '白碱滩区', 0, 10, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (14, '乌尔禾区', 0, 10, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (15, '吐鲁番市', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (16, '高昌区', 0, 15, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (17, '鄯善县', 0, 15, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (18, '托克逊县', 0, 15, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (19, '哈密市', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (20, '伊州区', 0, 19, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (21, '巴里坤哈萨克自治县', 0, 19, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (22, '伊吾县', 0, 19, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (23, '昌吉回族自治州', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (24, '昌吉市', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (25, '阜康市', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (26, '呼图壁县', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (27, '玛纳斯县', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (28, '奇台县', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (29, '吉木萨尔县', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (30, '木垒哈萨克自治县', 0, 23, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (31, '博尔塔拉蒙古自治州', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (32, '博乐市', 0, 31, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (33, '阿拉山口市', 0, 31, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (34, '精河县', 0, 31, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (35, '温泉县', 0, 31, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (36, '巴音郭楞蒙古自治州', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (37, '库尔勒市', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (38, '轮台县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (39, '尉犁县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (40, '若羌县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (41, '且末县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (42, '焉耆回族自治县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (43, '和静县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (44, '和硕县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (45, '博湖县', 0, 36, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (46, '阿克苏地区', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (47, '阿克苏市', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (48, '库车市', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (49, '温宿县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (50, '沙雅县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (51, '新和县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (52, '拜城县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (53, '乌什县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (54, '阿瓦提县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (55, '柯坪县', 0, 46, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (56, '克孜勒苏柯尔克孜自治州', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (57, '阿图什市', 0, 56, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (58, '阿克陶县', 0, 56, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (59, '阿合奇县', 0, 56, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (60, '乌恰县', 0, 56, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (61, '喀什地区', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (62, '喀什市', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (63, '疏附县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (64, '疏勒县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (65, '英吉沙县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (66, '泽普县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (67, '莎车县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (68, '叶城县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (69, '麦盖提县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (70, '岳普湖县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (71, '伽师县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (72, '巴楚县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (73, '塔什库尔干塔吉克自治县', 0, 61, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (74, '和田地区', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (75, '和田市', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (76, '和田县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (77, '墨玉县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (78, '皮山县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (79, '洛浦县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (80, '策勒县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (81, '于田县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (82, '民丰县', 0, 74, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (83, '伊犁哈萨克自治州', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (84, '伊宁市', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (85, '奎屯市', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (86, '霍尔果斯市', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (87, '伊宁县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (88, '察布查尔锡伯自治县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (89, '霍城县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (90, '巩留县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (91, '新源县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (92, '昭苏县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (93, '特克斯县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (94, '尼勒克县', 0, 83, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (95, '塔城地区', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (96, '塔城市', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (97, '乌苏市', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (98, '沙湾市', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (99, '额敏县', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (100, '托里县', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (101, '裕民县', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (102, '和布克赛尔蒙古自治县', 0, 95, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (103, '阿勒泰地区', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (104, '阿勒泰市', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (105, '布尔津县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (106, '富蕴县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (107, '福海县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (108, '哈巴河县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (109, '青河县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (110, '吉木乃县', 0, 103, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (111, '自治区直辖县级行政区划', 0, 0, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (112, '石河子市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (113, '阿拉尔市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (114, '图木舒克市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (115, '五家渠市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (116, '北屯市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (117, '铁门关市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (118, '双河市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (119, '可克达拉市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (120, '昆玉市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (121, '胡杨河市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (122, '新星市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (123, '白杨市', 0, 111, 0);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (124, '北京市', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (125, '天津市', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (126, '河北省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (127, '石家庄市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (128, '唐山市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (129, '秦皇岛市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (130, '邯郸市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (131, '邢台市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (132, '保定市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (133, '张家口市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (134, '承德市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (135, '沧州市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (136, '廊坊市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (137, '衡水市', 0, 126, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (138, '山西省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (139, '太原市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (140, '大同市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (141, '阳泉市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (142, '长治市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (143, '晋城市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (144, '朔州市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (145, '晋中市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (146, '运城市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (147, '忻州市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (148, '临汾市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (149, '吕梁市', 0, 138, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (150, '内蒙古自治区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (151, '呼和浩特市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (152, '包头市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (153, '乌海市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (154, '赤峰市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (155, '通辽市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (156, '鄂尔多斯市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (157, '呼伦贝尔市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (158, '巴彦淖尔市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (159, '乌兰察布市', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (160, '兴安盟', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (161, '锡林郭勒盟', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (162, '阿拉善盟', 0, 150, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (163, '辽宁省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (164, '沈阳市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (165, '大连市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (166, '鞍山市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (167, '抚顺市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (168, '本溪市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (169, '丹东市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (170, '锦州市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (171, '营口市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (172, '阜新市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (173, '辽阳市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (174, '盘锦市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (175, '铁岭市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (176, '朝阳市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (177, '葫芦岛市', 0, 163, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (178, '吉林省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (179, '长春市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (180, '吉林市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (181, '四平市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (182, '辽源市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (183, '通化市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (184, '白山市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (185, '松原市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (186, '白城市', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (187, '延边朝鲜族自治州', 0, 178, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (188, '黑龙江省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (189, '哈尔滨市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (190, '齐齐哈尔市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (191, '鸡西市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (192, '鹤岗市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (193, '双鸭山市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (194, '大庆市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (195, '伊春市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (196, '佳木斯市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (197, '七台河市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (198, '牡丹江市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (199, '黑河市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (200, '绥化市', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (201, '大兴安岭地区', 0, 188, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (202, '上海市', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (203, '江苏省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (204, '南京市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (205, '无锡市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (206, '徐州市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (207, '常州市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (208, '苏州市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (209, '南通市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (210, '连云港市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (211, '淮安市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (212, '盐城市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (213, '扬州市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (214, '镇江市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (215, '泰州市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (216, '宿迁市', 0, 203, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (217, '浙江省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (218, '杭州市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (219, '宁波市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (220, '温州市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (221, '嘉兴市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (222, '湖州市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (223, '绍兴市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (224, '金华市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (225, '衢州市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (226, '舟山市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (227, '台州市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (228, '丽水市', 0, 217, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (229, '安徽省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (230, '合肥市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (231, '芜湖市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (232, '蚌埠市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (233, '淮南市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (234, '马鞍山市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (235, '淮北市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (236, '铜陵市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (237, '安庆市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (238, '黄山市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (239, '滁州市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (240, '阜阳市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (241, '宿州市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (242, '六安市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (243, '亳州市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (244, '池州市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (245, '宣城市', 0, 229, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (246, '福建省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (247, '福州市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (248, '厦门市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (249, '莆田市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (250, '三明市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (251, '泉州市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (252, '漳州市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (253, '南平市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (254, '龙岩市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (255, '宁德市', 0, 246, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (256, '江西省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (257, '南昌市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (258, '景德镇市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (259, '萍乡市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (260, '九江市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (261, '新余市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (262, '鹰潭市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (263, '赣州市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (264, '吉安市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (265, '宜春市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (266, '抚州市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (267, '上饶市', 0, 256, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (268, '山东省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (269, '济南市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (270, '青岛市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (271, '淄博市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (272, '枣庄市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (273, '东营市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (274, '烟台市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (275, '潍坊市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (276, '济宁市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (277, '泰安市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (278, '威海市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (279, '日照市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (280, '临沂市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (281, '德州市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (282, '聊城市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (283, '滨州市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (284, '菏泽市', 0, 268, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (285, '河南省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (286, '郑州市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (287, '开封市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (288, '洛阳市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (289, '平顶山市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (290, '安阳市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (291, '鹤壁市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (292, '新乡市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (293, '焦作市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (294, '濮阳市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (295, '许昌市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (296, '漯河市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (297, '三门峡市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (298, '南阳市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (299, '商丘市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (300, '信阳市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (301, '周口市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (302, '驻马店市', 0, 285, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (303, '湖北省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (304, '武汉市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (305, '黄石市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (306, '十堰市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (307, '宜昌市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (308, '襄阳市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (309, '鄂州市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (310, '荆门市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (311, '孝感市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (312, '荆州市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (313, '黄冈市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (314, '咸宁市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (315, '随州市', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (316, '恩施土家族苗族自治州', 0, 303, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (317, '湖南省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (318, '长沙市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (319, '株洲市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (320, '湘潭市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (321, '衡阳市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (322, '邵阳市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (323, '岳阳市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (324, '常德市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (325, '张家界市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (326, '益阳市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (327, '郴州市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (328, '永州市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (329, '怀化市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (330, '娄底市', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (331, '湘西土家族苗族自治州', 0, 317, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (332, '广东省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (333, '广州市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (334, '韶关市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (335, '深圳市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (336, '珠海市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (337, '汕头市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (338, '佛山市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (339, '江门市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (340, '湛江市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (341, '茂名市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (342, '肇庆市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (343, '惠州市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (344, '梅州市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (345, '汕尾市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (346, '河源市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (347, '阳江市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (348, '清远市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (349, '潮州市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (350, '揭阳市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (351, '云浮市', 0, 332, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (352, '广西壮族自治区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (353, '南宁市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (354, '柳州市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (355, '桂林市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (356, '梧州市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (357, '北海市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (358, '防城港市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (359, '钦州市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (360, '贵港市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (361, '玉林市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (362, '百色市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (363, '贺州市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (364, '河池市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (365, '来宾市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (366, '崇左市', 0, 352, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (367, '海南省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (368, '海口市', 0, 367, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (369, '三亚市', 0, 367, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (370, '儋州市', 0, 367, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (371, '重庆市', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (372, '四川省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (373, '成都市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (374, '自贡市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (375, '攀枝花市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (376, '泸州市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (377, '德阳市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (378, '绵阳市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (379, '广元市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (380, '遂宁市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (381, '内江市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (382, '乐山市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (383, '南充市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (384, '眉山市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (385, '宜宾市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (386, '广安市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (387, '达州市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (388, '雅安市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (389, '巴中市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (390, '资阳市', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (391, '阿坝藏族羌族自治州', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (392, '甘孜藏族自治州', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (393, '凉山彝族自治州', 0, 372, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (394, '贵州省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (395, '贵阳市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (396, '六盘水市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (397, '遵义市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (398, '安顺市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (399, '毕节市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (400, '铜仁市', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (401, '黔西南布依族苗族自治州', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (402, '黔东南苗族侗族自治州', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (403, '黔南布依族苗族自治州', 0, 394, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (404, '云南省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (405, '昆明市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (406, '曲靖市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (407, '玉溪市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (408, '保山市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (409, '昭通市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (410, '丽江市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (411, '普洱市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (412, '临沧市', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (413, '楚雄彝族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (414, '红河哈尼族彝族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (415, '文山壮族苗族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (416, '西双版纳傣族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (417, '大理白族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (418, '德宏傣族景颇族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (419, '怒江傈僳族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (420, '迪庆藏族自治州', 0, 404, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (421, '西藏自治区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (422, '拉萨市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (423, '日喀则市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (424, '昌都市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (425, '林芝市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (426, '山南市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (427, '那曲市', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (428, '阿里地区', 0, 421, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (429, '陕西省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (430, '西安市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (431, '铜川市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (432, '宝鸡市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (433, '咸阳市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (434, '渭南市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (435, '延安市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (436, '汉中市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (437, '榆林市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (438, '安康市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (439, '商洛市', 0, 429, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (440, '甘肃省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (441, '兰州市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (442, '金昌市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (443, '白银市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (444, '天水市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (445, '武威市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (446, '张掖市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (447, '平凉市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (448, '酒泉市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (449, '庆阳市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (450, '定西市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (451, '陇南市', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (452, '临夏回族自治州', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (453, '甘南藏族自治州', 0, 440, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (454, '青海省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (455, '西宁市', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (456, '海东市', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (457, '海北藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (458, '黄南藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (459, '海南藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (460, '果洛藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (461, '玉树藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (462, '海西蒙古族藏族自治州', 0, 454, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (463, '宁夏回族自治区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (464, '银川市', 0, 463, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (465, '石嘴山市', 0, 463, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (466, '吴忠市', 0, 463, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (467, '固原市', 0, 463, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (468, '中卫市', 0, 463, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (469, '新疆维吾尔自治区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (470, '乌鲁木齐市', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (471, '克拉玛依市', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (472, '吐鲁番市', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (473, '哈密市', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (474, '昌吉回族自治州', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (475, '博尔塔拉蒙古自治州', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (476, '巴音郭楞蒙古自治州', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (477, '阿克苏地区', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (478, '克孜勒苏柯尔克孜自治州', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (479, '喀什地区', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (480, '和田地区', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (481, '伊犁哈萨克自治州', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (482, '塔城地区', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (483, '阿勒泰地区', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (484, '自治区直辖县级行政区划', 0, 469, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (485, '台湾省', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (486, '台北市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (487, '新北市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (488, '桃园市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (489, '台中市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (490, '台南市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (491, '高雄市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (492, '基隆市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (493, '新竹市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (494, '嘉义市', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (495, '新竹县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (496, '苗栗县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (497, '彰化县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (498, '南投县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (499, '云林县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (500, '嘉义县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (501, '屏东县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (502, '宜兰县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (503, '花莲县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (504, '台东县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (505, '澎湖县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (506, '连江县', 0, 485, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (507, '香港特别行政区', 0, 0, 1);
+INSERT INTO `sys_region`(`id`, `name`, `sort`, `parent_id`, `region_type`) VALUES (508, '澳门特别行政区', 0, 0, 1);
diff --git a/assess-admin/src/main/resources/db/migration/V20231124002_attach.sql b/assess-admin/src/main/resources/db/migration/V20231124002_attach.sql
index b970e5c..08cc0c4 100644
--- a/assess-admin/src/main/resources/db/migration/V20231124002_attach.sql
+++ b/assess-admin/src/main/resources/db/migration/V20231124002_attach.sql
@@ -9,9 +9,9 @@
 `path` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件存放路径',
 `type` tinyint NOT NULL COMMENT '文件所属类型(1社保,2医保,3工资单)',
 `user_id` bigint NOT NULL COMMENT '用户id',
-`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建人',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
 `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
-`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新人',
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
 `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`) USING BTREE,
 UNIQUE INDEX `index_name`(`name`) USING BTREE
diff --git a/assess-admin/src/main/resources/db/migration/V20231127001_expert_classify.sql b/assess-admin/src/main/resources/db/migration/V20231127001_expert_classify.sql
new file mode 100644
index 0000000..e4644b2
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231127001_expert_classify.sql
@@ -0,0 +1,17 @@
+
+-- ----------------------------
+-- 系统专家分类表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_expert_classify`;
+CREATE TABLE `smart_assess`.`sys_expert_classify`  (
+`classify_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+`classify_name` varchar(20) NOT NULL COMMENT '分类名称',
+`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父id',
+`del_flag` tinyint NOT NULL DEFAULT 0 COMMENT '删除标志(0代表存在,1代表删除,默认0)',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '修改人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`classify_id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统专家分类表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231127002_expert_info.sql b/assess-admin/src/main/resources/db/migration/V20231127002_expert_info.sql
new file mode 100644
index 0000000..517d21f
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231127002_expert_info.sql
@@ -0,0 +1,45 @@
+
+-- ----------------------------
+-- 系统专家分类表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_expert_info`;
+CREATE TABLE `smart_assess`.`sys_expert_info`  (
+`expert_id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+`name` varchar(20) NOT NULL COMMENT '专家名称',
+`sex` tinyint NULL DEFAULT 2 COMMENT '性别(0男,1女,2未知,默认2)',
+`big_classify` bigint NULL COMMENT '类别id',
+`small_classify` bigint NULL COMMENT '类别id',
+`birthday` datetime NULL COMMENT '出生日期',
+`phone` varchar(11) NULL COMMENT '手机号',
+`title` varchar(20) NULL COMMENT '职称',
+`electronic_photo` varchar(100) NULL COMMENT '电子照片',
+`id_card` varchar(18) NULL COMMENT '身份证号码',
+`duty_status` tinyint NULL COMMENT '在职状态',
+`company_name` varchar(20) NULL COMMENT '公司名称',
+`company_address` varchar(50) NULL COMMENT '公司地址',
+`dept_name` varchar(20) NULL COMMENT '部门名称',
+`job` varchar(10) NULL COMMENT '职务',
+`company_telephone` varchar(11) NULL COMMENT '公司电话',
+`fax_num` varchar(11) NULL COMMENT '传真',
+`email` varchar(20) NULL COMMENT '邮箱',
+`graduation_school` varchar(20) NULL COMMENT '毕业学校',
+`degree` varchar(10) NULL COMMENT '学历',
+`speciality` varchar(20) NULL COMMENT '专业',
+`current_profession` varchar(20) NULL COMMENT '当前专业',
+`support_direction_safety` varchar(20) NULL COMMENT '支撑安全',
+`support_direction_prevention` varchar(20) NULL COMMENT '支撑预防',
+`support_direction_emergency` varchar(20) NULL COMMENT '支持应急',
+`resume_key` varchar(20) NULL COMMENT '简述',
+`paper_situation_key` varchar(20) NULL,
+`reward_key` varchar(20) NULL,
+`achievement_key` varchar(20) NULL,
+`personal_opinion_key` varchar(20) NULL,
+`recommend_unit_opinion_key` varchar(20) NULL,
+`del_flag` tinyint(255) NOT NULL DEFAULT 0 COMMENT '删除标志(0代表存在,1代表删除,默认0)',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '修改人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+`remark` varchar(100) NULL,
+PRIMARY KEY (`expert_id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统专家信息表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231130001_project.sql b/assess-admin/src/main/resources/db/migration/V20231130001_project.sql
new file mode 100644
index 0000000..2a43432
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231130001_project.sql
@@ -0,0 +1,36 @@
+
+-- ----------------------------
+-- 项目表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_project`;
+CREATE TABLE `smart_assess`.`ass_project`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`name` varchar(50) NOT NULL COMMENT '项目名称',
+`code` varchar(50) NULL COMMENT '项目编号',
+`agency_id` bigint NOT NULL COMMENT '机构id',
+`client` varchar(50) NOT NULL COMMENT '委托方',
+`province` varchar(20) NULL COMMENT '省份',
+`city` varchar(20) NOT NULL COMMENT '城市',
+`district` varchar(20) NOT NULL COMMENT '区县',
+`business` varchar(20) NOT NULL COMMENT '业务范围,字典id',
+`invest` varchar(10) NOT NULL COMMENT '项目投资额/万',
+`address` varchar(100) NOT NULL COMMENT '地址',
+`actual_location` varchar(60) NULL COMMENT '实际纬度/经度',
+`location` varchar(20) NULL COMMENT '纬度/经度',
+`estimate_type` bigint NULL COMMENT '评估类型,字典id',
+`leader_id` bigint NOT NULL COMMENT '负责人id',
+`defect_numb` int NULL,
+`review_plan_date` datetime NULL COMMENT '评估计划时间',
+`township` varchar(20) NULL,
+`credit_code` varchar(30) NOT NULL COMMENT '委托单位社会统一信用代码',
+`report_progress` tinyint(2) NULL DEFAULT 0 COMMENT '项目状态(0创建,1风险评估,2合同管理,默认0)',
+`state` tinyint(2) NULL DEFAULT 1 COMMENT '审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废 默认1)',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231130002_risk_estimate.sql b/assess-admin/src/main/resources/db/migration/V20231130002_risk_estimate.sql
new file mode 100644
index 0000000..306f28f
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231130002_risk_estimate.sql
@@ -0,0 +1,33 @@
+
+-- ----------------------------
+-- 风险评估表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_risk_estimate`;
+CREATE TABLE `smart_assess`.`ass_risk_estimate`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`project_id` bigint NOT NULL COMMENT '项目id',
+`introduction` varchar(500) NOT NULL COMMENT '基本概况(500字以内)',
+`risk_character` varchar(500) NOT NULL COMMENT '行业风险特性(500字以内)',
+`surroundings` varchar(500) NOT NULL COMMENT '周边环境(500字以内)',
+`equipment` varchar(500) NULL COMMENT '主要生产装置(500字以内)',
+`technology` varchar(500) NULL COMMENT '生产工艺概况(500字以内)',
+`is_accept_chargess` tinyint(1) NOT NULL COMMENT '评价费用是否在本机构所接受的范围内(0否,1是)',
+`is_feasibility` tinyint(1) NOT NULL COMMENT '项目的可行性(0否,1是)',
+`is_finish_report` tinyint(1) NOT NULL COMMENT '是否能在约定的时间内完成评价报告(0否,1是)',
+`is_in_business` tinyint(1) NOT NULL COMMENT '评价项目是否在本机构资质业务范围内(0否,1是)',
+`is_need_expert` tinyint(1) NOT NULL COMMENT '是否需要聘请相关专业的技术专家(0否,1是)',
+`is_satisfy_need` tinyint(1) NOT NULL COMMENT '评价人员专业构成是否满足评价项目需要(0否,1是)',
+`estimate_date` datetime NOT NULL COMMENT '评估时间',
+`tech_opinion` varchar(30) NOT NULL COMMENT '技术负责人意见(30字以内)',
+`risk_opinion` varchar(30) NOT NULL COMMENT '风险评估人意见(30字以内)',
+`agency_opinon` varchar(30) NOT NULL COMMENT '机构评价负责人意见(30字以内)',
+`state` tinyint(2) NULL DEFAULT 1 COMMENT '审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废 默认1)',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '风险评估表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231130003_contract.sql b/assess-admin/src/main/resources/db/migration/V20231130003_contract.sql
new file mode 100644
index 0000000..ad2d82b
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231130003_contract.sql
@@ -0,0 +1,22 @@
+
+-- ----------------------------
+-- 合同管理表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_contract`;
+CREATE TABLE `smart_assess`.`ass_contract`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`contract_money` decimal NOT NULL COMMENT '合同价格/万',
+`actual_contract_money` decimal NOT NULL COMMENT '实际合同价格/万',
+`contract_sign_date` datetime NOT NULL COMMENT '合同签订时间',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`contract_introduction` varchar(100) NULL COMMENT '合同额外说明(100字以内)',
+`actual_contract_introduction` varchar(100) NULL COMMENT '实际合同额外说明(100字以内)',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '合同管理表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231130004_estimate_task.sql b/assess-admin/src/main/resources/db/migration/V20231130004_estimate_task.sql
new file mode 100644
index 0000000..fce085f
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231130004_estimate_task.sql
@@ -0,0 +1,23 @@
+
+-- ----------------------------
+-- 评价认为通知表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_estimate_task`;
+CREATE TABLE `smart_assess`.`ass_estimate_task`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`leader_id` bigint NOT NULL COMMENT '项目负责人id',
+`link_man` varchar(10) NOT NULL COMMENT '联系人(10个字符)',
+`link_phone` varchar(11) NOT NULL COMMENT '联系电话(11个字符)',
+`fax` varchar(20) NULL COMMENT '传真',
+`transmit_date` datetime NOT NULL  COMMENT '任务下达时间',
+`transmit_person` varchar(20) NULL COMMENT '任务下达人',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评价认为通知表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231204001_device.sql b/assess-admin/src/main/resources/db/migration/V20231204001_device.sql
new file mode 100644
index 0000000..c5c7a6f
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231204001_device.sql
@@ -0,0 +1,38 @@
+
+-- ----------------------------
+-- 设备表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_device`;
+CREATE TABLE `smart_assess`.`ass_device`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`device_name` varchar(20) NOT NULL COMMENT '设备名称',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备表' ROW_FORMAT = DYNAMIC;
+
+
+-- ----------------------------
+-- 项目需要的设备清单表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_project_device`;
+CREATE TABLE `smart_assess`.`ass_project_device`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`project_id` bigint NOT NULL COMMENT '项目id',
+`device_id` bigint NOT NULL COMMENT '设备id',
+`start_date` datetime NOT NULL COMMENT '开始时间',
+`end_date` datetime NOT NULL COMMENT '结束时间',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目需要的设备清单表' ROW_FORMAT = DYNAMIC;
+
diff --git a/assess-admin/src/main/resources/db/migration/V20231204002_estimate_plan.sql b/assess-admin/src/main/resources/db/migration/V20231204002_estimate_plan.sql
new file mode 100644
index 0000000..daaa103
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231204002_estimate_plan.sql
@@ -0,0 +1,21 @@
+
+-- ----------------------------
+-- 评价项目计划表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_estimate_plan`;
+CREATE TABLE `smart_assess`.`ass_estimate_plan`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`auser_id` bigint NOT NULL COMMENT '评价机构负责人id',
+`technical_id` bigint NOT NULL COMMENT '技术负责人负责人id',
+`start_date` datetime NOT NULL COMMENT '评价开始时间',
+`end_date` datetime NOT NULL COMMENT '评价结束时间',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评价项目计划表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231204003_estimate_schedule.sql b/assess-admin/src/main/resources/db/migration/V20231204003_estimate_schedule.sql
new file mode 100644
index 0000000..0dff831
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231204003_estimate_schedule.sql
@@ -0,0 +1,21 @@
+
+-- ----------------------------
+-- 评价日程安排表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_estimate_schedule`;
+CREATE TABLE `smart_assess`.`ass_estimate_schedule`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`name` varchar(20) NOT NULL COMMENT '日程名称',
+`schedule_type` tinyint(2) NOT NULL COMMENT '日程类型:1勘验准备,2现场勘验,3材料分析整理,4评价报告编写,5整改情况现场确认,6整理评价报告,7报告审核,8报告修改',
+`start_date` datetime NOT NULL COMMENT '开始时间',
+`end_date` datetime NOT NULL COMMENT '结束时间',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评价日程安排表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231204004_plan_person.sql b/assess-admin/src/main/resources/db/migration/V20231204004_plan_person.sql
new file mode 100644
index 0000000..34ec067
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231204004_plan_person.sql
@@ -0,0 +1,30 @@
+
+-- ----------------------------
+-- 评价项目组成员表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_plan_person`;
+CREATE TABLE `smart_assess`.`ass_plan_person`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`person_id` bigint NOT NULL COMMENT '成员id',
+`certificate_number` varchar(30) NOT NULL COMMENT '资格证书编号',
+`ability` varchar(10) NOT NULL COMMENT '能力',
+`business_ability_id` bigint  NULL COMMENT '能力id(字典id)',
+`identification_number` varchar(10) NOT NULL COMMENT '识别码',
+`job_type` tinyint(2) NOT NULL DEFAULT 1 COMMENT '工作类型:1普通人员,2组长',
+`later_promise` tinyint(1) NOT NULL COMMENT '承诺后期前往现场勘验(0否,1是)',
+`professional_ability` varchar(50) NOT NULL COMMENT '专业能力',
+`work` varchar(50) NOT NULL COMMENT '承担工作',
+`scene_statue` tinyint(2) NOT NULL DEFAULT 1 COMMENT '场景状态1 2',
+`reason` varchar(30) NULL COMMENT '未到现场勘验原因(30字)',
+`sort` int NULL DEFAULT 0 COMMENT '排序',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`work_notification_id` bigint NULL COMMENT '从业告知id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评价项目组成员表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231204005_plan_expert.sql b/assess-admin/src/main/resources/db/migration/V20231204005_plan_expert.sql
new file mode 100644
index 0000000..515c1c7
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231204005_plan_expert.sql
@@ -0,0 +1,25 @@
+
+-- ----------------------------
+-- 评价项目组专家表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_plan_expert`;
+CREATE TABLE `smart_assess`.`ass_plan_expert`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`expert_id` bigint NOT NULL COMMENT '专家id',
+`ability` varchar(10) NOT NULL COMMENT '能力',
+`business_ability_id` bigint  NULL COMMENT '能力id(字典id)',
+`later_promise` tinyint(1) NOT NULL COMMENT '承诺后期前往现场勘验(0否,1是)',
+`professional_ability` varchar(50) NOT NULL COMMENT '专业能力',
+`work` varchar(50) NOT NULL COMMENT '工作任务',
+`sort` int NULL DEFAULT 0 COMMENT '排序',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`work_notification_id` bigint NULL COMMENT '从业告知id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评价项目组专家表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205001_work_notification.sql b/assess-admin/src/main/resources/db/migration/V20231205001_work_notification.sql
new file mode 100644
index 0000000..e89f339
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205001_work_notification.sql
@@ -0,0 +1,22 @@
+
+-- ----------------------------
+-- 从业告知表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_work_notification`;
+CREATE TABLE `smart_assess`.`ass_work_notification`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`service_start_date` datetime NOT NULL COMMENT '服务开始时间',
+`service_end_date` datetime NOT NULL COMMENT '服务结束时间',
+`investigation_plan_date` datetime NOT NULL COMMENT '计划现场勘验时间',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`state` tinyint(2) NULL DEFAULT 1 COMMENT '审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废 默认1)',
+`audit_id` bigint NULL COMMENT '审核人员id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '从业告知表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205002_investigation.sql b/assess-admin/src/main/resources/db/migration/V20231205002_investigation.sql
new file mode 100644
index 0000000..5963af0
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205002_investigation.sql
@@ -0,0 +1,21 @@
+
+-- ----------------------------
+-- 现场勘验记录表
+-- ----------------------------
+drop table if exists `smart_assess`.`ass_investigation`;
+CREATE TABLE `smart_assess`.`ass_investigation`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`investigation_date` datetime NOT NULL COMMENT '现场勘验时间',
+`is_first` tinyint(1) NULL DEFAULT 0 COMMENT '是否第一次(0是,1否)',
+`is_safety_check` tinyint(1) NULL DEFAULT 0 COMMENT '编制现场安全检查表',
+`record_data` varchar(200) NULL COMMENT '现场勘验记录(200字)',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(20) NULL COMMENT '创建人',
+`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+`update_by` varchar(20) NULL COMMENT '更新人',
+`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+`remark` varchar(100) NULL COMMENT '备注',
+PRIMARY KEY (`id`)
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '现场勘验记录表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205003_accessory_file.sql b/assess-admin/src/main/resources/db/migration/V20231205003_accessory_file.sql
new file mode 100644
index 0000000..34492ad
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205003_accessory_file.sql
@@ -0,0 +1,21 @@
+
+-- ----------------------------
+-- 评估文件上传记录表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_accessory_file`;
+CREATE TABLE `smart_assess`.`sys_accessory_file`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`file_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件名称',
+`path` varchar(70) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '文件存放路径',
+`module_type` tinyint NOT NULL COMMENT '模块code',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '文件描述',
+PRIMARY KEY (`id`) USING BTREE,
+UNIQUE INDEX `index_name`(`file_name`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '评估文件上传记录表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205004_face_record.sql b/assess-admin/src/main/resources/db/migration/V20231205004_face_record.sql
new file mode 100644
index 0000000..cf246a4
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205004_face_record.sql
@@ -0,0 +1,19 @@
+
+-- ----------------------------
+-- 现场勘验人员人脸识别记录表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_face_record`;
+CREATE TABLE `smart_assess`.`sys_face_record`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`person_id` bigint NOT NULL COMMENT '用户id',
+`file_id` bigint NOT NULL COMMENT '评估文件id(图片id)',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '备注',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '现场勘验人员人脸识别记录表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205005_audit.sql b/assess-admin/src/main/resources/db/migration/V20231205005_audit.sql
new file mode 100644
index 0000000..9c5aba2
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205005_audit.sql
@@ -0,0 +1,41 @@
+
+-- ----------------------------
+-- 审核表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_audit`;
+CREATE TABLE `smart_assess`.`sys_audit`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`audit_date` datetime NOT NULL COMMENT '审核日期',
+`affirm_date` datetime NOT NULL COMMENT '内部审核确定日期',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`audit_type` tinyint(2) NOT NULL COMMENT '审核类型(1内部审核2技术审核)',
+`assessor_id` bigint NOT NULL COMMENT '审核人id',
+`is_amend_finish` tinyint(1) NOT NULL DEFAULT 1 COMMENT '已按要求修改完成(0否 1是)',
+`is_basis` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价依据是否充分、准确、有效(0否 1是)',
+`is_conclusion` tinyint(1) NOT NULL DEFAULT 1 COMMENT '结论是否正确(0否 1是)',
+`is_danger_overall` tinyint(1) NOT NULL DEFAULT 1 COMMENT '危险有害因素识别是否全面(0否 1是)',
+`is_file` tinyint(1) NOT NULL DEFAULT 1 COMMENT '附件与附图是否有效及规范(0否 1是)',
+`is_format` tinyint(1) NOT NULL DEFAULT 1 COMMENT '格式是否符合要求(0否 1是)',
+`is_measure` tinyint(1) NOT NULL DEFAULT 1 COMMENT '对策措施与建议是否可行(0否 1是)',
+`is_method_selection` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价方法选择是否适当(0否 1是)',
+`is_report_audit` tinyint(1) NOT NULL DEFAULT 1 COMMENT '可报技术负责人审核(0否 1是)',
+`is_scope` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价范围是否与合同一致(0否 1是)',
+`is_text` tinyint(1) NOT NULL DEFAULT 1 COMMENT '文字、数据是否准确(0否 1是)',
+`is_unit_division` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价单元划分是否合理(0否 1是)',
+`is_basis_quote` tinyint(1) NOT NULL DEFAULT 1 COMMENT '报告中所列评价依据是否得到引用和验证(0否 1是)',
+`is_conclusion_right` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价结论及格式是否正确(0否 1是)',
+`is_danger_full` tinyint(1) NOT NULL DEFAULT 1 COMMENT '危险有害因素识别是否充分(0否 1是)',
+`is_data` tinyint(1) NOT NULL DEFAULT 1 COMMENT '现场收集的有关资料是否齐全、有效(0否 1是)',
+`is_omission` tinyint(1) NOT NULL DEFAULT 1 COMMENT '报告中是否有重大遗漏(0否 1是)',
+`is_measure_equitable` tinyint(1) NOT NULL DEFAULT 1 COMMENT '对策措施及建议是否有针对性、合理性(0否 1是)',
+`is_method_rational` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价方法选用是否合理(0否 1是)',
+`suggestions` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '存在问题及建议(500字符)',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '备注',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '审核表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231205006_conclusion.sql b/assess-admin/src/main/resources/db/migration/V20231205006_conclusion.sql
new file mode 100644
index 0000000..96d9010
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231205006_conclusion.sql
@@ -0,0 +1,19 @@
+
+-- ----------------------------
+-- 项目结论表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_conclusion`;
+CREATE TABLE `smart_assess`.`sys_conclusion`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`conclusion` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '评价结论',
+`is_revise_manual` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否有评价报告修改说明(0否 1是)',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '备注',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目结论表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231206001_process_audit.sql b/assess-admin/src/main/resources/db/migration/V20231206001_process_audit.sql
new file mode 100644
index 0000000..f755394
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231206001_process_audit.sql
@@ -0,0 +1,48 @@
+
+-- ----------------------------
+-- 过程控制负责人审核表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_process_audit`;
+CREATE TABLE `smart_assess`.`sys_process_audit`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`audit_date` datetime NOT NULL COMMENT '审核日期',
+`process_leader_id` bigint NOT NULL COMMENT '过程控制负责人id',
+`suggestions` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '存在问题及建议(500字符)',
+`is_estimate_plan` tinyint(1) NOT NULL DEFAULT 1 COMMENT '编制安全评价项目计划书(0否 1是)',
+`is_estimate_task` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价任务通知书(0否 1是)',
+`is_sign_contract` tinyint(1) NOT NULL DEFAULT 1 COMMENT '签订合同(0否 1是)',
+`is_exterior_audit` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价报告外审意见0否 1是)',
+`is_full_materials` tinyint(1) NOT NULL DEFAULT 1 COMMENT '报告归档材料完整性(0否 1是)',
+`is_interior_audit` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价报告内部审核(0否 1是)',
+`is_investigation_site` tinyint(1) NOT NULL DEFAULT 1 COMMENT '现场勘验记录及影像资料(0否 1是)',
+`is_open_information` tinyint(1) NOT NULL DEFAULT 1 COMMENT '评价项目网上信息公开(0否 1是)',
+`is_provide_materials` tinyint(1) NOT NULL DEFAULT 1 COMMENT '被评价单位提供材料清单(0否 1是)',
+`is_risk_analyse` tinyint(1) NOT NULL DEFAULT 1 COMMENT '风险分析(0否 1是)',
+`is_technolgy_audit` tinyint(1) NOT NULL DEFAULT 1 COMMENT '技术负责人审核(0否 1是)',
+`is_use_qrcode` tinyint(1) NOT NULL DEFAULT 1 COMMENT '二维码的使用(0否 1是)',
+`is_work_notification` tinyint(1) NOT NULL DEFAULT 1 COMMENT '从业告知(0否 1是)',
+`estimate_plan_des` varchar(20) NULL COMMENT '编制安全评价项目计划书-不符合描述(20字符)',
+`estimate_task_des` varchar(20) NULL COMMENT '评价任务通知书-不符合描述(20字符)',
+`sign_contract_des` varchar(20) NULL COMMENT '签订合同-不符合描述(20字符)',
+`exterior_audit_des` varchar(20) NULL COMMENT '评价报告外审意见-不符合描述(20字符)',
+`full_materials_des` varchar(20) NULL COMMENT '报告归档材料完整性-不符合描述(20字符)',
+`interior_audit_des` varchar(20) NULL COMMENT '评价报告内部审核-不符合描述(20字符)',
+`investigation_site_des` varchar(20) NULL COMMENT '现场勘验记录及影像资料-不符合描述(20字符)',
+`open_information_des` varchar(20) NULL COMMENT '评价项目网上信息公开-不符合描述(20字符)',
+`provide_materials_des` varchar(20) NULL COMMENT '被评价单位提供材料清单-不符合描述(20字符)',
+`risk_analyse_des` varchar(20) NULL COMMENT '风险分析-不符合描述(20字符)',
+`technolgy_audit_des` varchar(20) NULL COMMENT '技术负责人审核-不符合描述(20字符)',
+`use_qrcode_des` varchar(20) NULL COMMENT '二维码的使用-不符合描述(20字符)',
+`work_notification_des` varchar(20) NULL COMMENT '从业告知-不符合描述(20字符)',
+
+`is_full_process` tinyint(1) NOT NULL DEFAULT 1 COMMENT '审核结论是否满足过程控制要求(0否 1是)',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '备注',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '过程控制负责人审核表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/db/migration/V20231206002_project_material.sql b/assess-admin/src/main/resources/db/migration/V20231206002_project_material.sql
new file mode 100644
index 0000000..7dff537
--- /dev/null
+++ b/assess-admin/src/main/resources/db/migration/V20231206002_project_material.sql
@@ -0,0 +1,20 @@
+
+-- ----------------------------
+-- 项目归档文件表
+-- ----------------------------
+drop table if exists `smart_assess`.`sys_project_material`;
+CREATE TABLE `smart_assess`.`sys_project_material`  (
+`id` bigint NOT NULL AUTO_INCREMENT,
+`name` varchar(50) NOT NULL COMMENT '名称',
+`type` tinyint NOT NULL COMMENT '类型',
+`project_id` bigint NOT NULL COMMENT '项目id',
+`file_id` bigint  NULL COMMENT '评估文件id',
+`version` int NULL DEFAULT 0 COMMENT '乐观锁',
+`del_flag` tinyint NULL DEFAULT 0 COMMENT '删除标志(0正常,1删除,默认0)',
+`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '创建人',
+`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '更新人',
+`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+`remark` varchar(50) NULL COMMENT '原因说明',
+PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '项目归档文件表' ROW_FORMAT = DYNAMIC;
\ No newline at end of file
diff --git a/assess-admin/src/main/resources/region.json b/assess-admin/src/main/resources/region.json
new file mode 100644
index 0000000..39b3229
--- /dev/null
+++ b/assess-admin/src/main/resources/region.json
@@ -0,0 +1,8528 @@
+[
+    {
+      "province": "北京市",
+      "citys": [
+        {
+          "city": "北京市",
+          "areas": [
+            {
+              "area": "北京市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "天津市",
+      "citys": [
+        {
+          "city": "天津市",
+          "areas": [
+            {
+              "area": "天津市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "河北省",
+      "citys": [
+        {
+          "city": "石家庄市",
+          "areas": [
+            {
+              "area": "井陉县"
+            },
+            {
+              "area": "正定县"
+            },
+            {
+              "area": "行唐县"
+            },
+            {
+              "area": "灵寿县"
+            },
+            {
+              "area": "高邑县"
+            },
+            {
+              "area": "深泽县"
+            },
+            {
+              "area": "赞皇县"
+            },
+            {
+              "area": "无极县"
+            },
+            {
+              "area": "平山县"
+            },
+            {
+              "area": "元氏县"
+            },
+            {
+              "area": "赵县"
+            },
+            {
+              "area": "辛集市"
+            },
+            {
+              "area": "晋州市"
+            },
+            {
+              "area": "新乐市"
+            },
+            {
+              "area": "石家庄市"
+            }
+          ]
+        },
+        {
+          "city": "唐山市",
+          "areas": [
+            {
+              "area": "滦南县"
+            },
+            {
+              "area": "乐亭县"
+            },
+            {
+              "area": "迁西县"
+            },
+            {
+              "area": "玉田县"
+            },
+            {
+              "area": "遵化市"
+            },
+            {
+              "area": "迁安市"
+            },
+            {
+              "area": "滦州市"
+            },
+            {
+              "area": "唐山市"
+            }
+          ]
+        },
+        {
+          "city": "秦皇岛市",
+          "areas": [
+            {
+              "area": "青龙满族自治县"
+            },
+            {
+              "area": "昌黎县"
+            },
+            {
+              "area": "卢龙县"
+            },
+            {
+              "area": "秦皇岛市"
+            }
+          ]
+        },
+        {
+          "city": "邯郸市",
+          "areas": [
+            {
+              "area": "临漳县"
+            },
+            {
+              "area": "成安县"
+            },
+            {
+              "area": "大名县"
+            },
+            {
+              "area": "涉县"
+            },
+            {
+              "area": "磁县"
+            },
+            {
+              "area": "邱县"
+            },
+            {
+              "area": "鸡泽县"
+            },
+            {
+              "area": "广平县"
+            },
+            {
+              "area": "馆陶县"
+            },
+            {
+              "area": "魏县"
+            },
+            {
+              "area": "曲周县"
+            },
+            {
+              "area": "武安市"
+            },
+            {
+              "area": "邯郸市"
+            }
+          ]
+        },
+        {
+          "city": "邢台市",
+          "areas": [
+            {
+              "area": "临城县"
+            },
+            {
+              "area": "内丘县"
+            },
+            {
+              "area": "柏乡县"
+            },
+            {
+              "area": "隆尧县"
+            },
+            {
+              "area": "宁晋县"
+            },
+            {
+              "area": "巨鹿县"
+            },
+            {
+              "area": "新河县"
+            },
+            {
+              "area": "广宗县"
+            },
+            {
+              "area": "平乡县"
+            },
+            {
+              "area": "威县"
+            },
+            {
+              "area": "清河县"
+            },
+            {
+              "area": "临西县"
+            },
+            {
+              "area": "南宫市"
+            },
+            {
+              "area": "沙河市"
+            },
+            {
+              "area": "邢台市"
+            }
+          ]
+        },
+        {
+          "city": "保定市",
+          "areas": [
+            {
+              "area": "涞水县"
+            },
+            {
+              "area": "阜平县"
+            },
+            {
+              "area": "定兴县"
+            },
+            {
+              "area": "唐县"
+            },
+            {
+              "area": "高阳县"
+            },
+            {
+              "area": "容城县"
+            },
+            {
+              "area": "涞源县"
+            },
+            {
+              "area": "望都县"
+            },
+            {
+              "area": "安新县"
+            },
+            {
+              "area": "易县"
+            },
+            {
+              "area": "曲阳县"
+            },
+            {
+              "area": "蠡县"
+            },
+            {
+              "area": "顺平县"
+            },
+            {
+              "area": "博野县"
+            },
+            {
+              "area": "雄县"
+            },
+            {
+              "area": "涿州市"
+            },
+            {
+              "area": "定州市"
+            },
+            {
+              "area": "安国市"
+            },
+            {
+              "area": "高碑店市"
+            },
+            {
+              "area": "保定市"
+            }
+          ]
+        },
+        {
+          "city": "张家口市",
+          "areas": [
+            {
+              "area": "张北县"
+            },
+            {
+              "area": "康保县"
+            },
+            {
+              "area": "沽源县"
+            },
+            {
+              "area": "尚义县"
+            },
+            {
+              "area": "蔚县"
+            },
+            {
+              "area": "阳原县"
+            },
+            {
+              "area": "怀安县"
+            },
+            {
+              "area": "怀来县"
+            },
+            {
+              "area": "涿鹿县"
+            },
+            {
+              "area": "赤城县"
+            },
+            {
+              "area": "张家口市"
+            }
+          ]
+        },
+        {
+          "city": "承德市",
+          "areas": [
+            {
+              "area": "承德县"
+            },
+            {
+              "area": "兴隆县"
+            },
+            {
+              "area": "滦平县"
+            },
+            {
+              "area": "隆化县"
+            },
+            {
+              "area": "丰宁满族自治县"
+            },
+            {
+              "area": "宽城满族自治县"
+            },
+            {
+              "area": "围场满族蒙古族自治县"
+            },
+            {
+              "area": "平泉市"
+            },
+            {
+              "area": "承德市"
+            }
+          ]
+        },
+        {
+          "city": "沧州市",
+          "areas": [
+            {
+              "area": "沧县"
+            },
+            {
+              "area": "青县"
+            },
+            {
+              "area": "东光县"
+            },
+            {
+              "area": "海兴县"
+            },
+            {
+              "area": "盐山县"
+            },
+            {
+              "area": "肃宁县"
+            },
+            {
+              "area": "南皮县"
+            },
+            {
+              "area": "吴桥县"
+            },
+            {
+              "area": "献县"
+            },
+            {
+              "area": "孟村回族自治县"
+            },
+            {
+              "area": "泊头市"
+            },
+            {
+              "area": "任丘市"
+            },
+            {
+              "area": "黄骅市"
+            },
+            {
+              "area": "河间市"
+            },
+            {
+              "area": "沧州市"
+            }
+          ]
+        },
+        {
+          "city": "廊坊市",
+          "areas": [
+            {
+              "area": "固安县"
+            },
+            {
+              "area": "永清县"
+            },
+            {
+              "area": "香河县"
+            },
+            {
+              "area": "大城县"
+            },
+            {
+              "area": "文安县"
+            },
+            {
+              "area": "大厂回族自治县"
+            },
+            {
+              "area": "霸州市"
+            },
+            {
+              "area": "三河市"
+            },
+            {
+              "area": "廊坊市"
+            }
+          ]
+        },
+        {
+          "city": "衡水市",
+          "areas": [
+            {
+              "area": "枣强县"
+            },
+            {
+              "area": "武邑县"
+            },
+            {
+              "area": "武强县"
+            },
+            {
+              "area": "饶阳县"
+            },
+            {
+              "area": "安平县"
+            },
+            {
+              "area": "故城县"
+            },
+            {
+              "area": "景县"
+            },
+            {
+              "area": "阜城县"
+            },
+            {
+              "area": "深州市"
+            },
+            {
+              "area": "衡水市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "山西省",
+      "citys": [
+        {
+          "city": "太原市",
+          "areas": [
+            {
+              "area": "清徐县"
+            },
+            {
+              "area": "阳曲县"
+            },
+            {
+              "area": "娄烦县"
+            },
+            {
+              "area": "古交市"
+            },
+            {
+              "area": "太原市"
+            }
+          ]
+        },
+        {
+          "city": "大同市",
+          "areas": [
+            {
+              "area": "阳高县"
+            },
+            {
+              "area": "天镇县"
+            },
+            {
+              "area": "广灵县"
+            },
+            {
+              "area": "灵丘县"
+            },
+            {
+              "area": "浑源县"
+            },
+            {
+              "area": "左云县"
+            },
+            {
+              "area": "大同市"
+            }
+          ]
+        },
+        {
+          "city": "阳泉市",
+          "areas": [
+            {
+              "area": "平定县"
+            },
+            {
+              "area": "盂县"
+            },
+            {
+              "area": "阳泉市"
+            }
+          ]
+        },
+        {
+          "city": "长治市",
+          "areas": [
+            {
+              "area": "襄垣县"
+            },
+            {
+              "area": "平顺县"
+            },
+            {
+              "area": "黎城县"
+            },
+            {
+              "area": "壶关县"
+            },
+            {
+              "area": "长子县"
+            },
+            {
+              "area": "武乡县"
+            },
+            {
+              "area": "沁县"
+            },
+            {
+              "area": "沁源县"
+            },
+            {
+              "area": "长治市"
+            }
+          ]
+        },
+        {
+          "city": "晋城市",
+          "areas": [
+            {
+              "area": "沁水县"
+            },
+            {
+              "area": "阳城县"
+            },
+            {
+              "area": "陵川县"
+            },
+            {
+              "area": "泽州县"
+            },
+            {
+              "area": "高平市"
+            },
+            {
+              "area": "晋城市"
+            }
+          ]
+        },
+        {
+          "city": "朔州市",
+          "areas": [
+            {
+              "area": "山阴县"
+            },
+            {
+              "area": "应县"
+            },
+            {
+              "area": "右玉县"
+            },
+            {
+              "area": "怀仁市"
+            },
+            {
+              "area": "朔州市"
+            }
+          ]
+        },
+        {
+          "city": "晋中市",
+          "areas": [
+            {
+              "area": "榆社县"
+            },
+            {
+              "area": "左权县"
+            },
+            {
+              "area": "和顺县"
+            },
+            {
+              "area": "昔阳县"
+            },
+            {
+              "area": "寿阳县"
+            },
+            {
+              "area": "祁县"
+            },
+            {
+              "area": "平遥县"
+            },
+            {
+              "area": "灵石县"
+            },
+            {
+              "area": "介休市"
+            },
+            {
+              "area": "晋中市"
+            }
+          ]
+        },
+        {
+          "city": "运城市",
+          "areas": [
+            {
+              "area": "临猗县"
+            },
+            {
+              "area": "万荣县"
+            },
+            {
+              "area": "闻喜县"
+            },
+            {
+              "area": "稷山县"
+            },
+            {
+              "area": "新绛县"
+            },
+            {
+              "area": "绛县"
+            },
+            {
+              "area": "垣曲县"
+            },
+            {
+              "area": "夏县"
+            },
+            {
+              "area": "平陆县"
+            },
+            {
+              "area": "芮城县"
+            },
+            {
+              "area": "永济市"
+            },
+            {
+              "area": "河津市"
+            },
+            {
+              "area": "运城市"
+            }
+          ]
+        },
+        {
+          "city": "忻州市",
+          "areas": [
+            {
+              "area": "定襄县"
+            },
+            {
+              "area": "五台县"
+            },
+            {
+              "area": "代县"
+            },
+            {
+              "area": "繁峙县"
+            },
+            {
+              "area": "宁武县"
+            },
+            {
+              "area": "静乐县"
+            },
+            {
+              "area": "神池县"
+            },
+            {
+              "area": "五寨县"
+            },
+            {
+              "area": "岢岚县"
+            },
+            {
+              "area": "河曲县"
+            },
+            {
+              "area": "保德县"
+            },
+            {
+              "area": "偏关县"
+            },
+            {
+              "area": "原平市"
+            },
+            {
+              "area": "忻州市"
+            }
+          ]
+        },
+        {
+          "city": "临汾市",
+          "areas": [
+            {
+              "area": "曲沃县"
+            },
+            {
+              "area": "翼城县"
+            },
+            {
+              "area": "襄汾县"
+            },
+            {
+              "area": "洪洞县"
+            },
+            {
+              "area": "古县"
+            },
+            {
+              "area": "安泽县"
+            },
+            {
+              "area": "浮山县"
+            },
+            {
+              "area": "吉县"
+            },
+            {
+              "area": "乡宁县"
+            },
+            {
+              "area": "大宁县"
+            },
+            {
+              "area": "隰县"
+            },
+            {
+              "area": "永和县"
+            },
+            {
+              "area": "蒲县"
+            },
+            {
+              "area": "汾西县"
+            },
+            {
+              "area": "侯马市"
+            },
+            {
+              "area": "霍州市"
+            },
+            {
+              "area": "临汾市"
+            }
+          ]
+        },
+        {
+          "city": "吕梁市",
+          "areas": [
+            {
+              "area": "文水县"
+            },
+            {
+              "area": "交城县"
+            },
+            {
+              "area": "兴县"
+            },
+            {
+              "area": "临县"
+            },
+            {
+              "area": "柳林县"
+            },
+            {
+              "area": "石楼县"
+            },
+            {
+              "area": "岚县"
+            },
+            {
+              "area": "方山县"
+            },
+            {
+              "area": "中阳县"
+            },
+            {
+              "area": "交口县"
+            },
+            {
+              "area": "孝义市"
+            },
+            {
+              "area": "汾阳市"
+            },
+            {
+              "area": "吕梁市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "内蒙古自治区",
+      "citys": [
+        {
+          "city": "呼和浩特市",
+          "areas": [
+            {
+              "area": "土默特左旗"
+            },
+            {
+              "area": "托克托县"
+            },
+            {
+              "area": "和林格尔县"
+            },
+            {
+              "area": "清水河县"
+            },
+            {
+              "area": "武川县"
+            },
+            {
+              "area": "呼和浩特市"
+            }
+          ]
+        },
+        {
+          "city": "包头市",
+          "areas": [
+            {
+              "area": "土默特右旗"
+            },
+            {
+              "area": "固阳县"
+            },
+            {
+              "area": "达尔罕茂明安联合旗"
+            },
+            {
+              "area": "包头市"
+            }
+          ]
+        },
+        {
+          "city": "乌海市",
+          "areas": [
+            {
+              "area": "乌海市"
+            }
+          ]
+        },
+        {
+          "city": "赤峰市",
+          "areas": [
+            {
+              "area": "阿鲁科尔沁旗"
+            },
+            {
+              "area": "巴林左旗"
+            },
+            {
+              "area": "巴林右旗"
+            },
+            {
+              "area": "林西县"
+            },
+            {
+              "area": "克什克腾旗"
+            },
+            {
+              "area": "翁牛特旗"
+            },
+            {
+              "area": "喀喇沁旗"
+            },
+            {
+              "area": "宁城县"
+            },
+            {
+              "area": "敖汉旗"
+            },
+            {
+              "area": "赤峰市"
+            }
+          ]
+        },
+        {
+          "city": "通辽市",
+          "areas": [
+            {
+              "area": "科尔沁左翼中旗"
+            },
+            {
+              "area": "科尔沁左翼后旗"
+            },
+            {
+              "area": "开鲁县"
+            },
+            {
+              "area": "库伦旗"
+            },
+            {
+              "area": "奈曼旗"
+            },
+            {
+              "area": "扎鲁特旗"
+            },
+            {
+              "area": "霍林郭勒市"
+            },
+            {
+              "area": "通辽市"
+            }
+          ]
+        },
+        {
+          "city": "鄂尔多斯市",
+          "areas": [
+            {
+              "area": "达拉特旗"
+            },
+            {
+              "area": "准格尔旗"
+            },
+            {
+              "area": "鄂托克前旗"
+            },
+            {
+              "area": "鄂托克旗"
+            },
+            {
+              "area": "杭锦旗"
+            },
+            {
+              "area": "乌审旗"
+            },
+            {
+              "area": "伊金霍洛旗"
+            },
+            {
+              "area": "鄂尔多斯市"
+            }
+          ]
+        },
+        {
+          "city": "呼伦贝尔市",
+          "areas": [
+            {
+              "area": "阿荣旗"
+            },
+            {
+              "area": "莫力达瓦达斡尔族自治旗"
+            },
+            {
+              "area": "鄂伦春自治旗"
+            },
+            {
+              "area": "鄂温克族自治旗"
+            },
+            {
+              "area": "陈巴尔虎旗"
+            },
+            {
+              "area": "新巴尔虎左旗"
+            },
+            {
+              "area": "新巴尔虎右旗"
+            },
+            {
+              "area": "满洲里市"
+            },
+            {
+              "area": "牙克石市"
+            },
+            {
+              "area": "扎兰屯市"
+            },
+            {
+              "area": "额尔古纳市"
+            },
+            {
+              "area": "根河市"
+            },
+            {
+              "area": "呼伦贝尔市"
+            }
+          ]
+        },
+        {
+          "city": "巴彦淖尔市",
+          "areas": [
+            {
+              "area": "五原县"
+            },
+            {
+              "area": "磴口县"
+            },
+            {
+              "area": "乌拉特前旗"
+            },
+            {
+              "area": "乌拉特中旗"
+            },
+            {
+              "area": "乌拉特后旗"
+            },
+            {
+              "area": "杭锦后旗"
+            },
+            {
+              "area": "巴彦淖尔市"
+            }
+          ]
+        },
+        {
+          "city": "乌兰察布市",
+          "areas": [
+            {
+              "area": "卓资县"
+            },
+            {
+              "area": "化德县"
+            },
+            {
+              "area": "商都县"
+            },
+            {
+              "area": "兴和县"
+            },
+            {
+              "area": "凉城县"
+            },
+            {
+              "area": "察哈尔右翼前旗"
+            },
+            {
+              "area": "察哈尔右翼中旗"
+            },
+            {
+              "area": "察哈尔右翼后旗"
+            },
+            {
+              "area": "四子王旗"
+            },
+            {
+              "area": "丰镇市"
+            },
+            {
+              "area": "乌兰察布市"
+            }
+          ]
+        },
+        {
+          "city": "兴安盟",
+          "areas": [
+            {
+              "area": "乌兰浩特市"
+            },
+            {
+              "area": "阿尔山市"
+            },
+            {
+              "area": "科尔沁右翼前旗"
+            },
+            {
+              "area": "科尔沁右翼中旗"
+            },
+            {
+              "area": "扎赉特旗"
+            },
+            {
+              "area": "突泉县"
+            }
+          ]
+        },
+        {
+          "city": "锡林郭勒盟",
+          "areas": [
+            {
+              "area": "二连浩特市"
+            },
+            {
+              "area": "锡林浩特市"
+            },
+            {
+              "area": "阿巴嘎旗"
+            },
+            {
+              "area": "苏尼特左旗"
+            },
+            {
+              "area": "苏尼特右旗"
+            },
+            {
+              "area": "东乌珠穆沁旗"
+            },
+            {
+              "area": "西乌珠穆沁旗"
+            },
+            {
+              "area": "太仆寺旗"
+            },
+            {
+              "area": "镶黄旗"
+            },
+            {
+              "area": "正镶白旗"
+            },
+            {
+              "area": "正蓝旗"
+            },
+            {
+              "area": "多伦县"
+            }
+          ]
+        },
+        {
+          "city": "阿拉善盟",
+          "areas": [
+            {
+              "area": "阿拉善左旗"
+            },
+            {
+              "area": "阿拉善右旗"
+            },
+            {
+              "area": "额济纳旗"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "辽宁省",
+      "citys": [
+        {
+          "city": "沈阳市",
+          "areas": [
+            {
+              "area": "康平县"
+            },
+            {
+              "area": "法库县"
+            },
+            {
+              "area": "新民市"
+            },
+            {
+              "area": "沈阳市"
+            }
+          ]
+        },
+        {
+          "city": "大连市",
+          "areas": [
+            {
+              "area": "长海县"
+            },
+            {
+              "area": "瓦房店市"
+            },
+            {
+              "area": "庄河市"
+            },
+            {
+              "area": "大连市"
+            }
+          ]
+        },
+        {
+          "city": "鞍山市",
+          "areas": [
+            {
+              "area": "台安县"
+            },
+            {
+              "area": "岫岩满族自治县"
+            },
+            {
+              "area": "海城市"
+            },
+            {
+              "area": "鞍山市"
+            }
+          ]
+        },
+        {
+          "city": "抚顺市",
+          "areas": [
+            {
+              "area": "抚顺县"
+            },
+            {
+              "area": "新宾满族自治县"
+            },
+            {
+              "area": "清原满族自治县"
+            },
+            {
+              "area": "抚顺市"
+            }
+          ]
+        },
+        {
+          "city": "本溪市",
+          "areas": [
+            {
+              "area": "本溪满族自治县"
+            },
+            {
+              "area": "桓仁满族自治县"
+            },
+            {
+              "area": "本溪市"
+            }
+          ]
+        },
+        {
+          "city": "丹东市",
+          "areas": [
+            {
+              "area": "宽甸满族自治县"
+            },
+            {
+              "area": "东港市"
+            },
+            {
+              "area": "凤城市"
+            },
+            {
+              "area": "丹东市"
+            }
+          ]
+        },
+        {
+          "city": "锦州市",
+          "areas": [
+            {
+              "area": "黑山县"
+            },
+            {
+              "area": "义县"
+            },
+            {
+              "area": "凌海市"
+            },
+            {
+              "area": "北镇市"
+            },
+            {
+              "area": "锦州市"
+            }
+          ]
+        },
+        {
+          "city": "营口市",
+          "areas": [
+            {
+              "area": "盖州市"
+            },
+            {
+              "area": "大石桥市"
+            },
+            {
+              "area": "营口市"
+            }
+          ]
+        },
+        {
+          "city": "阜新市",
+          "areas": [
+            {
+              "area": "阜新蒙古族自治县"
+            },
+            {
+              "area": "彰武县"
+            },
+            {
+              "area": "阜新市"
+            }
+          ]
+        },
+        {
+          "city": "辽阳市",
+          "areas": [
+            {
+              "area": "辽阳县"
+            },
+            {
+              "area": "灯塔市"
+            },
+            {
+              "area": "辽阳市"
+            }
+          ]
+        },
+        {
+          "city": "盘锦市",
+          "areas": [
+            {
+              "area": "盘山县"
+            },
+            {
+              "area": "盘锦市"
+            }
+          ]
+        },
+        {
+          "city": "铁岭市",
+          "areas": [
+            {
+              "area": "铁岭县"
+            },
+            {
+              "area": "西丰县"
+            },
+            {
+              "area": "昌图县"
+            },
+            {
+              "area": "调兵山市"
+            },
+            {
+              "area": "开原市"
+            },
+            {
+              "area": "铁岭市"
+            }
+          ]
+        },
+        {
+          "city": "朝阳市",
+          "areas": [
+            {
+              "area": "朝阳县"
+            },
+            {
+              "area": "建平县"
+            },
+            {
+              "area": "喀喇沁左翼蒙古族自治县"
+            },
+            {
+              "area": "北票市"
+            },
+            {
+              "area": "凌源市"
+            },
+            {
+              "area": "朝阳市"
+            }
+          ]
+        },
+        {
+          "city": "葫芦岛市",
+          "areas": [
+            {
+              "area": "绥中县"
+            },
+            {
+              "area": "建昌县"
+            },
+            {
+              "area": "兴城市"
+            },
+            {
+              "area": "葫芦岛市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "吉林省",
+      "citys": [
+        {
+          "city": "长春市",
+          "areas": [
+            {
+              "area": "农安县"
+            },
+            {
+              "area": "榆树市"
+            },
+            {
+              "area": "德惠市"
+            },
+            {
+              "area": "公主岭市"
+            },
+            {
+              "area": "长春市"
+            }
+          ]
+        },
+        {
+          "city": "吉林市",
+          "areas": [
+            {
+              "area": "永吉县"
+            },
+            {
+              "area": "蛟河市"
+            },
+            {
+              "area": "桦甸市"
+            },
+            {
+              "area": "舒兰市"
+            },
+            {
+              "area": "磐石市"
+            },
+            {
+              "area": "吉林市"
+            }
+          ]
+        },
+        {
+          "city": "四平市",
+          "areas": [
+            {
+              "area": "梨树县"
+            },
+            {
+              "area": "伊通满族自治县"
+            },
+            {
+              "area": "双辽市"
+            },
+            {
+              "area": "四平市"
+            }
+          ]
+        },
+        {
+          "city": "辽源市",
+          "areas": [
+            {
+              "area": "东丰县"
+            },
+            {
+              "area": "东辽县"
+            },
+            {
+              "area": "辽源市"
+            }
+          ]
+        },
+        {
+          "city": "通化市",
+          "areas": [
+            {
+              "area": "通化县"
+            },
+            {
+              "area": "辉南县"
+            },
+            {
+              "area": "柳河县"
+            },
+            {
+              "area": "梅河口市"
+            },
+            {
+              "area": "集安市"
+            },
+            {
+              "area": "通化市"
+            }
+          ]
+        },
+        {
+          "city": "白山市",
+          "areas": [
+            {
+              "area": "抚松县"
+            },
+            {
+              "area": "靖宇县"
+            },
+            {
+              "area": "长白朝鲜族自治县"
+            },
+            {
+              "area": "临江市"
+            },
+            {
+              "area": "白山市"
+            }
+          ]
+        },
+        {
+          "city": "松原市",
+          "areas": [
+            {
+              "area": "前郭尔罗斯蒙古族自治县"
+            },
+            {
+              "area": "长岭县"
+            },
+            {
+              "area": "乾安县"
+            },
+            {
+              "area": "扶余市"
+            },
+            {
+              "area": "松原市"
+            }
+          ]
+        },
+        {
+          "city": "白城市",
+          "areas": [
+            {
+              "area": "镇赉县"
+            },
+            {
+              "area": "通榆县"
+            },
+            {
+              "area": "洮南市"
+            },
+            {
+              "area": "大安市"
+            },
+            {
+              "area": "白城市"
+            }
+          ]
+        },
+        {
+          "city": "延边朝鲜族自治州",
+          "areas": [
+            {
+              "area": "延吉市"
+            },
+            {
+              "area": "图们市"
+            },
+            {
+              "area": "敦化市"
+            },
+            {
+              "area": "珲春市"
+            },
+            {
+              "area": "龙井市"
+            },
+            {
+              "area": "和龙市"
+            },
+            {
+              "area": "汪清县"
+            },
+            {
+              "area": "安图县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "黑龙江省",
+      "citys": [
+        {
+          "city": "哈尔滨市",
+          "areas": [
+            {
+              "area": "依兰县"
+            },
+            {
+              "area": "方正县"
+            },
+            {
+              "area": "宾县"
+            },
+            {
+              "area": "巴彦县"
+            },
+            {
+              "area": "木兰县"
+            },
+            {
+              "area": "通河县"
+            },
+            {
+              "area": "延寿县"
+            },
+            {
+              "area": "尚志市"
+            },
+            {
+              "area": "五常市"
+            },
+            {
+              "area": "哈尔滨市"
+            }
+          ]
+        },
+        {
+          "city": "齐齐哈尔市",
+          "areas": [
+            {
+              "area": "龙江县"
+            },
+            {
+              "area": "依安县"
+            },
+            {
+              "area": "泰来县"
+            },
+            {
+              "area": "甘南县"
+            },
+            {
+              "area": "富裕县"
+            },
+            {
+              "area": "克山县"
+            },
+            {
+              "area": "克东县"
+            },
+            {
+              "area": "拜泉县"
+            },
+            {
+              "area": "讷河市"
+            },
+            {
+              "area": "齐齐哈尔市"
+            }
+          ]
+        },
+        {
+          "city": "鸡西市",
+          "areas": [
+            {
+              "area": "鸡东县"
+            },
+            {
+              "area": "虎林市"
+            },
+            {
+              "area": "密山市"
+            },
+            {
+              "area": "鸡西市"
+            }
+          ]
+        },
+        {
+          "city": "鹤岗市",
+          "areas": [
+            {
+              "area": "萝北县"
+            },
+            {
+              "area": "绥滨县"
+            },
+            {
+              "area": "鹤岗市"
+            }
+          ]
+        },
+        {
+          "city": "双鸭山市",
+          "areas": [
+            {
+              "area": "集贤县"
+            },
+            {
+              "area": "友谊县"
+            },
+            {
+              "area": "宝清县"
+            },
+            {
+              "area": "饶河县"
+            },
+            {
+              "area": "双鸭山市"
+            }
+          ]
+        },
+        {
+          "city": "大庆市",
+          "areas": [
+            {
+              "area": "肇州县"
+            },
+            {
+              "area": "肇源县"
+            },
+            {
+              "area": "林甸县"
+            },
+            {
+              "area": "杜尔伯特蒙古族自治县"
+            },
+            {
+              "area": "大庆市"
+            }
+          ]
+        },
+        {
+          "city": "伊春市",
+          "areas": [
+            {
+              "area": "嘉荫县"
+            },
+            {
+              "area": "汤旺县"
+            },
+            {
+              "area": "丰林县"
+            },
+            {
+              "area": "大箐山县"
+            },
+            {
+              "area": "南岔县"
+            },
+            {
+              "area": "铁力市"
+            },
+            {
+              "area": "伊春市"
+            }
+          ]
+        },
+        {
+          "city": "佳木斯市",
+          "areas": [
+            {
+              "area": "桦南县"
+            },
+            {
+              "area": "桦川县"
+            },
+            {
+              "area": "汤原县"
+            },
+            {
+              "area": "同江市"
+            },
+            {
+              "area": "富锦市"
+            },
+            {
+              "area": "抚远市"
+            },
+            {
+              "area": "佳木斯市"
+            }
+          ]
+        },
+        {
+          "city": "七台河市",
+          "areas": [
+            {
+              "area": "勃利县"
+            },
+            {
+              "area": "七台河市"
+            }
+          ]
+        },
+        {
+          "city": "牡丹江市",
+          "areas": [
+            {
+              "area": "林口县"
+            },
+            {
+              "area": "绥芬河市"
+            },
+            {
+              "area": "海林市"
+            },
+            {
+              "area": "宁安市"
+            },
+            {
+              "area": "穆棱市"
+            },
+            {
+              "area": "东宁市"
+            },
+            {
+              "area": "牡丹江市"
+            }
+          ]
+        },
+        {
+          "city": "黑河市",
+          "areas": [
+            {
+              "area": "逊克县"
+            },
+            {
+              "area": "孙吴县"
+            },
+            {
+              "area": "北安市"
+            },
+            {
+              "area": "五大连池市"
+            },
+            {
+              "area": "嫩江市"
+            },
+            {
+              "area": "黑河市"
+            }
+          ]
+        },
+        {
+          "city": "绥化市",
+          "areas": [
+            {
+              "area": "望奎县"
+            },
+            {
+              "area": "兰西县"
+            },
+            {
+              "area": "青冈县"
+            },
+            {
+              "area": "庆安县"
+            },
+            {
+              "area": "明水县"
+            },
+            {
+              "area": "绥棱县"
+            },
+            {
+              "area": "安达市"
+            },
+            {
+              "area": "肇东市"
+            },
+            {
+              "area": "海伦市"
+            },
+            {
+              "area": "绥化市"
+            }
+          ]
+        },
+        {
+          "city": "大兴安岭地区",
+          "areas": [
+            {
+              "area": "漠河市"
+            },
+            {
+              "area": "呼玛县"
+            },
+            {
+              "area": "塔河县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "上海市",
+      "citys": [
+        {
+          "city": "上海市",
+          "areas": [
+            {
+              "area": "上海市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "江苏省",
+      "citys": [
+        {
+          "city": "南京市",
+          "areas": [
+            {
+              "area": "南京市"
+            }
+          ]
+        },
+        {
+          "city": "无锡市",
+          "areas": [
+            {
+              "area": "江阴市"
+            },
+            {
+              "area": "宜兴市"
+            },
+            {
+              "area": "无锡市"
+            }
+          ]
+        },
+        {
+          "city": "徐州市",
+          "areas": [
+            {
+              "area": "丰县"
+            },
+            {
+              "area": "沛县"
+            },
+            {
+              "area": "睢宁县"
+            },
+            {
+              "area": "新沂市"
+            },
+            {
+              "area": "邳州市"
+            },
+            {
+              "area": "徐州市"
+            }
+          ]
+        },
+        {
+          "city": "常州市",
+          "areas": [
+            {
+              "area": "溧阳市"
+            },
+            {
+              "area": "常州市"
+            }
+          ]
+        },
+        {
+          "city": "苏州市",
+          "areas": [
+            {
+              "area": "常熟市"
+            },
+            {
+              "area": "张家港市"
+            },
+            {
+              "area": "昆山市"
+            },
+            {
+              "area": "太仓市"
+            },
+            {
+              "area": "苏州市"
+            }
+          ]
+        },
+        {
+          "city": "南通市",
+          "areas": [
+            {
+              "area": "如东县"
+            },
+            {
+              "area": "启东市"
+            },
+            {
+              "area": "如皋市"
+            },
+            {
+              "area": "海安市"
+            },
+            {
+              "area": "南通市"
+            }
+          ]
+        },
+        {
+          "city": "连云港市",
+          "areas": [
+            {
+              "area": "东海县"
+            },
+            {
+              "area": "灌云县"
+            },
+            {
+              "area": "灌南县"
+            },
+            {
+              "area": "连云港市"
+            }
+          ]
+        },
+        {
+          "city": "淮安市",
+          "areas": [
+            {
+              "area": "涟水县"
+            },
+            {
+              "area": "盱眙县"
+            },
+            {
+              "area": "金湖县"
+            },
+            {
+              "area": "淮安市"
+            }
+          ]
+        },
+        {
+          "city": "盐城市",
+          "areas": [
+            {
+              "area": "响水县"
+            },
+            {
+              "area": "滨海县"
+            },
+            {
+              "area": "阜宁县"
+            },
+            {
+              "area": "射阳县"
+            },
+            {
+              "area": "建湖县"
+            },
+            {
+              "area": "东台市"
+            },
+            {
+              "area": "盐城市"
+            }
+          ]
+        },
+        {
+          "city": "扬州市",
+          "areas": [
+            {
+              "area": "宝应县"
+            },
+            {
+              "area": "仪征市"
+            },
+            {
+              "area": "高邮市"
+            },
+            {
+              "area": "扬州市"
+            }
+          ]
+        },
+        {
+          "city": "镇江市",
+          "areas": [
+            {
+              "area": "丹阳市"
+            },
+            {
+              "area": "扬中市"
+            },
+            {
+              "area": "句容市"
+            },
+            {
+              "area": "镇江市"
+            }
+          ]
+        },
+        {
+          "city": "泰州市",
+          "areas": [
+            {
+              "area": "兴化市"
+            },
+            {
+              "area": "靖江市"
+            },
+            {
+              "area": "泰兴市"
+            },
+            {
+              "area": "泰州市"
+            }
+          ]
+        },
+        {
+          "city": "宿迁市",
+          "areas": [
+            {
+              "area": "沭阳县"
+            },
+            {
+              "area": "泗阳县"
+            },
+            {
+              "area": "泗洪县"
+            },
+            {
+              "area": "宿迁市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "浙江省",
+      "citys": [
+        {
+          "city": "杭州市",
+          "areas": [
+            {
+              "area": "桐庐县"
+            },
+            {
+              "area": "淳安县"
+            },
+            {
+              "area": "建德市"
+            },
+            {
+              "area": "杭州市"
+            }
+          ]
+        },
+        {
+          "city": "宁波市",
+          "areas": [
+            {
+              "area": "象山县"
+            },
+            {
+              "area": "宁海县"
+            },
+            {
+              "area": "余姚市"
+            },
+            {
+              "area": "慈溪市"
+            },
+            {
+              "area": "宁波市"
+            }
+          ]
+        },
+        {
+          "city": "温州市",
+          "areas": [
+            {
+              "area": "永嘉县"
+            },
+            {
+              "area": "平阳县"
+            },
+            {
+              "area": "苍南县"
+            },
+            {
+              "area": "文成县"
+            },
+            {
+              "area": "泰顺县"
+            },
+            {
+              "area": "瑞安市"
+            },
+            {
+              "area": "乐清市"
+            },
+            {
+              "area": "龙港市"
+            },
+            {
+              "area": "温州市"
+            }
+          ]
+        },
+        {
+          "city": "嘉兴市",
+          "areas": [
+            {
+              "area": "嘉善县"
+            },
+            {
+              "area": "海盐县"
+            },
+            {
+              "area": "海宁市"
+            },
+            {
+              "area": "平湖市"
+            },
+            {
+              "area": "桐乡市"
+            },
+            {
+              "area": "嘉兴市"
+            }
+          ]
+        },
+        {
+          "city": "湖州市",
+          "areas": [
+            {
+              "area": "德清县"
+            },
+            {
+              "area": "长兴县"
+            },
+            {
+              "area": "安吉县"
+            },
+            {
+              "area": "湖州市"
+            }
+          ]
+        },
+        {
+          "city": "绍兴市",
+          "areas": [
+            {
+              "area": "新昌县"
+            },
+            {
+              "area": "诸暨市"
+            },
+            {
+              "area": "嵊州市"
+            },
+            {
+              "area": "绍兴市"
+            }
+          ]
+        },
+        {
+          "city": "金华市",
+          "areas": [
+            {
+              "area": "武义县"
+            },
+            {
+              "area": "浦江县"
+            },
+            {
+              "area": "磐安县"
+            },
+            {
+              "area": "兰溪市"
+            },
+            {
+              "area": "义乌市"
+            },
+            {
+              "area": "东阳市"
+            },
+            {
+              "area": "永康市"
+            },
+            {
+              "area": "金华市"
+            }
+          ]
+        },
+        {
+          "city": "衢州市",
+          "areas": [
+            {
+              "area": "常山县"
+            },
+            {
+              "area": "开化县"
+            },
+            {
+              "area": "龙游县"
+            },
+            {
+              "area": "江山市"
+            },
+            {
+              "area": "衢州市"
+            }
+          ]
+        },
+        {
+          "city": "舟山市",
+          "areas": [
+            {
+              "area": "岱山县"
+            },
+            {
+              "area": "嵊泗县"
+            },
+            {
+              "area": "舟山市"
+            }
+          ]
+        },
+        {
+          "city": "台州市",
+          "areas": [
+            {
+              "area": "三门县"
+            },
+            {
+              "area": "天台县"
+            },
+            {
+              "area": "仙居县"
+            },
+            {
+              "area": "温岭市"
+            },
+            {
+              "area": "临海市"
+            },
+            {
+              "area": "玉环市"
+            },
+            {
+              "area": "台州市"
+            }
+          ]
+        },
+        {
+          "city": "丽水市",
+          "areas": [
+            {
+              "area": "青田县"
+            },
+            {
+              "area": "缙云县"
+            },
+            {
+              "area": "遂昌县"
+            },
+            {
+              "area": "松阳县"
+            },
+            {
+              "area": "云和县"
+            },
+            {
+              "area": "庆元县"
+            },
+            {
+              "area": "景宁畲族自治县"
+            },
+            {
+              "area": "龙泉市"
+            },
+            {
+              "area": "丽水市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "安徽省",
+      "citys": [
+        {
+          "city": "合肥市",
+          "areas": [
+            {
+              "area": "长丰县"
+            },
+            {
+              "area": "肥东县"
+            },
+            {
+              "area": "肥西县"
+            },
+            {
+              "area": "庐江县"
+            },
+            {
+              "area": "巢湖市"
+            },
+            {
+              "area": "合肥市"
+            }
+          ]
+        },
+        {
+          "city": "芜湖市",
+          "areas": [
+            {
+              "area": "南陵县"
+            },
+            {
+              "area": "无为市"
+            },
+            {
+              "area": "芜湖市"
+            }
+          ]
+        },
+        {
+          "city": "蚌埠市",
+          "areas": [
+            {
+              "area": "怀远县"
+            },
+            {
+              "area": "五河县"
+            },
+            {
+              "area": "固镇县"
+            },
+            {
+              "area": "蚌埠市"
+            }
+          ]
+        },
+        {
+          "city": "淮南市",
+          "areas": [
+            {
+              "area": "凤台县"
+            },
+            {
+              "area": "寿县"
+            },
+            {
+              "area": "淮南市"
+            }
+          ]
+        },
+        {
+          "city": "马鞍山市",
+          "areas": [
+            {
+              "area": "当涂县"
+            },
+            {
+              "area": "含山县"
+            },
+            {
+              "area": "和县"
+            },
+            {
+              "area": "马鞍山市"
+            }
+          ]
+        },
+        {
+          "city": "淮北市",
+          "areas": [
+            {
+              "area": "濉溪县"
+            },
+            {
+              "area": "淮北市"
+            }
+          ]
+        },
+        {
+          "city": "铜陵市",
+          "areas": [
+            {
+              "area": "枞阳县"
+            },
+            {
+              "area": "铜陵市"
+            }
+          ]
+        },
+        {
+          "city": "安庆市",
+          "areas": [
+            {
+              "area": "怀宁县"
+            },
+            {
+              "area": "太湖县"
+            },
+            {
+              "area": "宿松县"
+            },
+            {
+              "area": "望江县"
+            },
+            {
+              "area": "岳西县"
+            },
+            {
+              "area": "桐城市"
+            },
+            {
+              "area": "潜山市"
+            },
+            {
+              "area": "安庆市"
+            }
+          ]
+        },
+        {
+          "city": "黄山市",
+          "areas": [
+            {
+              "area": "歙县"
+            },
+            {
+              "area": "休宁县"
+            },
+            {
+              "area": "黟县"
+            },
+            {
+              "area": "祁门县"
+            },
+            {
+              "area": "黄山市"
+            }
+          ]
+        },
+        {
+          "city": "滁州市",
+          "areas": [
+            {
+              "area": "来安县"
+            },
+            {
+              "area": "全椒县"
+            },
+            {
+              "area": "定远县"
+            },
+            {
+              "area": "凤阳县"
+            },
+            {
+              "area": "天长市"
+            },
+            {
+              "area": "明光市"
+            },
+            {
+              "area": "滁州市"
+            }
+          ]
+        },
+        {
+          "city": "阜阳市",
+          "areas": [
+            {
+              "area": "临泉县"
+            },
+            {
+              "area": "太和县"
+            },
+            {
+              "area": "阜南县"
+            },
+            {
+              "area": "颍上县"
+            },
+            {
+              "area": "界首市"
+            },
+            {
+              "area": "阜阳市"
+            }
+          ]
+        },
+        {
+          "city": "宿州市",
+          "areas": [
+            {
+              "area": "砀山县"
+            },
+            {
+              "area": "萧县"
+            },
+            {
+              "area": "灵璧县"
+            },
+            {
+              "area": "泗县"
+            },
+            {
+              "area": "宿州市"
+            }
+          ]
+        },
+        {
+          "city": "六安市",
+          "areas": [
+            {
+              "area": "霍邱县"
+            },
+            {
+              "area": "舒城县"
+            },
+            {
+              "area": "金寨县"
+            },
+            {
+              "area": "霍山县"
+            },
+            {
+              "area": "六安市"
+            }
+          ]
+        },
+        {
+          "city": "亳州市",
+          "areas": [
+            {
+              "area": "涡阳县"
+            },
+            {
+              "area": "蒙城县"
+            },
+            {
+              "area": "利辛县"
+            },
+            {
+              "area": "亳州市"
+            }
+          ]
+        },
+        {
+          "city": "池州市",
+          "areas": [
+            {
+              "area": "东至县"
+            },
+            {
+              "area": "石台县"
+            },
+            {
+              "area": "青阳县"
+            },
+            {
+              "area": "池州市"
+            }
+          ]
+        },
+        {
+          "city": "宣城市",
+          "areas": [
+            {
+              "area": "郎溪县"
+            },
+            {
+              "area": "泾县"
+            },
+            {
+              "area": "绩溪县"
+            },
+            {
+              "area": "旌德县"
+            },
+            {
+              "area": "宁国市"
+            },
+            {
+              "area": "广德市"
+            },
+            {
+              "area": "宣城市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "福建省",
+      "citys": [
+        {
+          "city": "福州市",
+          "areas": [
+            {
+              "area": "闽侯县"
+            },
+            {
+              "area": "连江县"
+            },
+            {
+              "area": "罗源县"
+            },
+            {
+              "area": "闽清县"
+            },
+            {
+              "area": "永泰县"
+            },
+            {
+              "area": "平潭县"
+            },
+            {
+              "area": "福清市"
+            },
+            {
+              "area": "福州市"
+            }
+          ]
+        },
+        {
+          "city": "厦门市",
+          "areas": [
+            {
+              "area": "厦门市"
+            }
+          ]
+        },
+        {
+          "city": "莆田市",
+          "areas": [
+            {
+              "area": "仙游县"
+            },
+            {
+              "area": "莆田市"
+            }
+          ]
+        },
+        {
+          "city": "三明市",
+          "areas": [
+            {
+              "area": "明溪县"
+            },
+            {
+              "area": "清流县"
+            },
+            {
+              "area": "宁化县"
+            },
+            {
+              "area": "大田县"
+            },
+            {
+              "area": "尤溪县"
+            },
+            {
+              "area": "将乐县"
+            },
+            {
+              "area": "泰宁县"
+            },
+            {
+              "area": "建宁县"
+            },
+            {
+              "area": "永安市"
+            },
+            {
+              "area": "三明市"
+            }
+          ]
+        },
+        {
+          "city": "泉州市",
+          "areas": [
+            {
+              "area": "惠安县"
+            },
+            {
+              "area": "安溪县"
+            },
+            {
+              "area": "永春县"
+            },
+            {
+              "area": "德化县"
+            },
+            {
+              "area": "金门县"
+            },
+            {
+              "area": "石狮市"
+            },
+            {
+              "area": "晋江市"
+            },
+            {
+              "area": "南安市"
+            },
+            {
+              "area": "泉州市"
+            }
+          ]
+        },
+        {
+          "city": "漳州市",
+          "areas": [
+            {
+              "area": "云霄县"
+            },
+            {
+              "area": "漳浦县"
+            },
+            {
+              "area": "诏安县"
+            },
+            {
+              "area": "东山县"
+            },
+            {
+              "area": "南靖县"
+            },
+            {
+              "area": "平和县"
+            },
+            {
+              "area": "华安县"
+            },
+            {
+              "area": "漳州市"
+            }
+          ]
+        },
+        {
+          "city": "南平市",
+          "areas": [
+            {
+              "area": "顺昌县"
+            },
+            {
+              "area": "浦城县"
+            },
+            {
+              "area": "光泽县"
+            },
+            {
+              "area": "松溪县"
+            },
+            {
+              "area": "政和县"
+            },
+            {
+              "area": "邵武市"
+            },
+            {
+              "area": "武夷山市"
+            },
+            {
+              "area": "建瓯市"
+            },
+            {
+              "area": "南平市"
+            }
+          ]
+        },
+        {
+          "city": "龙岩市",
+          "areas": [
+            {
+              "area": "长汀县"
+            },
+            {
+              "area": "上杭县"
+            },
+            {
+              "area": "武平县"
+            },
+            {
+              "area": "连城县"
+            },
+            {
+              "area": "漳平市"
+            },
+            {
+              "area": "龙岩市"
+            }
+          ]
+        },
+        {
+          "city": "宁德市",
+          "areas": [
+            {
+              "area": "霞浦县"
+            },
+            {
+              "area": "古田县"
+            },
+            {
+              "area": "屏南县"
+            },
+            {
+              "area": "寿宁县"
+            },
+            {
+              "area": "周宁县"
+            },
+            {
+              "area": "柘荣县"
+            },
+            {
+              "area": "福安市"
+            },
+            {
+              "area": "福鼎市"
+            },
+            {
+              "area": "宁德市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "江西省",
+      "citys": [
+        {
+          "city": "南昌市",
+          "areas": [
+            {
+              "area": "南昌县"
+            },
+            {
+              "area": "安义县"
+            },
+            {
+              "area": "进贤县"
+            },
+            {
+              "area": "南昌市"
+            }
+          ]
+        },
+        {
+          "city": "景德镇市",
+          "areas": [
+            {
+              "area": "浮梁县"
+            },
+            {
+              "area": "乐平市"
+            },
+            {
+              "area": "景德镇市"
+            }
+          ]
+        },
+        {
+          "city": "萍乡市",
+          "areas": [
+            {
+              "area": "莲花县"
+            },
+            {
+              "area": "上栗县"
+            },
+            {
+              "area": "芦溪县"
+            },
+            {
+              "area": "萍乡市"
+            }
+          ]
+        },
+        {
+          "city": "九江市",
+          "areas": [
+            {
+              "area": "武宁县"
+            },
+            {
+              "area": "修水县"
+            },
+            {
+              "area": "永修县"
+            },
+            {
+              "area": "德安县"
+            },
+            {
+              "area": "都昌县"
+            },
+            {
+              "area": "湖口县"
+            },
+            {
+              "area": "彭泽县"
+            },
+            {
+              "area": "瑞昌市"
+            },
+            {
+              "area": "共青城市"
+            },
+            {
+              "area": "庐山市"
+            },
+            {
+              "area": "九江市"
+            }
+          ]
+        },
+        {
+          "city": "新余市",
+          "areas": [
+            {
+              "area": "分宜县"
+            },
+            {
+              "area": "新余市"
+            }
+          ]
+        },
+        {
+          "city": "鹰潭市",
+          "areas": [
+            {
+              "area": "贵溪市"
+            },
+            {
+              "area": "鹰潭市"
+            }
+          ]
+        },
+        {
+          "city": "赣州市",
+          "areas": [
+            {
+              "area": "信丰县"
+            },
+            {
+              "area": "大余县"
+            },
+            {
+              "area": "上犹县"
+            },
+            {
+              "area": "崇义县"
+            },
+            {
+              "area": "安远县"
+            },
+            {
+              "area": "定南县"
+            },
+            {
+              "area": "全南县"
+            },
+            {
+              "area": "宁都县"
+            },
+            {
+              "area": "于都县"
+            },
+            {
+              "area": "兴国县"
+            },
+            {
+              "area": "会昌县"
+            },
+            {
+              "area": "寻乌县"
+            },
+            {
+              "area": "石城县"
+            },
+            {
+              "area": "瑞金市"
+            },
+            {
+              "area": "龙南市"
+            },
+            {
+              "area": "赣州市"
+            }
+          ]
+        },
+        {
+          "city": "吉安市",
+          "areas": [
+            {
+              "area": "吉安县"
+            },
+            {
+              "area": "吉水县"
+            },
+            {
+              "area": "峡江县"
+            },
+            {
+              "area": "新干县"
+            },
+            {
+              "area": "永丰县"
+            },
+            {
+              "area": "泰和县"
+            },
+            {
+              "area": "遂川县"
+            },
+            {
+              "area": "万安县"
+            },
+            {
+              "area": "安福县"
+            },
+            {
+              "area": "永新县"
+            },
+            {
+              "area": "井冈山市"
+            },
+            {
+              "area": "吉安市"
+            }
+          ]
+        },
+        {
+          "city": "宜春市",
+          "areas": [
+            {
+              "area": "奉新县"
+            },
+            {
+              "area": "万载县"
+            },
+            {
+              "area": "上高县"
+            },
+            {
+              "area": "宜丰县"
+            },
+            {
+              "area": "靖安县"
+            },
+            {
+              "area": "铜鼓县"
+            },
+            {
+              "area": "丰城市"
+            },
+            {
+              "area": "樟树市"
+            },
+            {
+              "area": "高安市"
+            },
+            {
+              "area": "宜春市"
+            }
+          ]
+        },
+        {
+          "city": "抚州市",
+          "areas": [
+            {
+              "area": "南城县"
+            },
+            {
+              "area": "黎川县"
+            },
+            {
+              "area": "南丰县"
+            },
+            {
+              "area": "崇仁县"
+            },
+            {
+              "area": "乐安县"
+            },
+            {
+              "area": "宜黄县"
+            },
+            {
+              "area": "金溪县"
+            },
+            {
+              "area": "资溪县"
+            },
+            {
+              "area": "广昌县"
+            },
+            {
+              "area": "抚州市"
+            }
+          ]
+        },
+        {
+          "city": "上饶市",
+          "areas": [
+            {
+              "area": "玉山县"
+            },
+            {
+              "area": "铅山县"
+            },
+            {
+              "area": "横峰县"
+            },
+            {
+              "area": "弋阳县"
+            },
+            {
+              "area": "余干县"
+            },
+            {
+              "area": "鄱阳县"
+            },
+            {
+              "area": "万年县"
+            },
+            {
+              "area": "婺源县"
+            },
+            {
+              "area": "德兴市"
+            },
+            {
+              "area": "上饶市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "山东省",
+      "citys": [
+        {
+          "city": "济南市",
+          "areas": [
+            {
+              "area": "平阴县"
+            },
+            {
+              "area": "商河县"
+            },
+            {
+              "area": "济南市"
+            }
+          ]
+        },
+        {
+          "city": "青岛市",
+          "areas": [
+            {
+              "area": "胶州市"
+            },
+            {
+              "area": "平度市"
+            },
+            {
+              "area": "莱西市"
+            },
+            {
+              "area": "青岛市"
+            }
+          ]
+        },
+        {
+          "city": "淄博市",
+          "areas": [
+            {
+              "area": "桓台县"
+            },
+            {
+              "area": "高青县"
+            },
+            {
+              "area": "沂源县"
+            },
+            {
+              "area": "淄博市"
+            }
+          ]
+        },
+        {
+          "city": "枣庄市",
+          "areas": [
+            {
+              "area": "滕州市"
+            },
+            {
+              "area": "枣庄市"
+            }
+          ]
+        },
+        {
+          "city": "东营市",
+          "areas": [
+            {
+              "area": "利津县"
+            },
+            {
+              "area": "广饶县"
+            },
+            {
+              "area": "东营市"
+            }
+          ]
+        },
+        {
+          "city": "烟台市",
+          "areas": [
+            {
+              "area": "龙口市"
+            },
+            {
+              "area": "莱阳市"
+            },
+            {
+              "area": "莱州市"
+            },
+            {
+              "area": "招远市"
+            },
+            {
+              "area": "栖霞市"
+            },
+            {
+              "area": "海阳市"
+            },
+            {
+              "area": "烟台市"
+            }
+          ]
+        },
+        {
+          "city": "潍坊市",
+          "areas": [
+            {
+              "area": "临朐县"
+            },
+            {
+              "area": "昌乐县"
+            },
+            {
+              "area": "青州市"
+            },
+            {
+              "area": "诸城市"
+            },
+            {
+              "area": "寿光市"
+            },
+            {
+              "area": "安丘市"
+            },
+            {
+              "area": "高密市"
+            },
+            {
+              "area": "昌邑市"
+            },
+            {
+              "area": "潍坊市"
+            }
+          ]
+        },
+        {
+          "city": "济宁市",
+          "areas": [
+            {
+              "area": "微山县"
+            },
+            {
+              "area": "鱼台县"
+            },
+            {
+              "area": "金乡县"
+            },
+            {
+              "area": "嘉祥县"
+            },
+            {
+              "area": "汶上县"
+            },
+            {
+              "area": "泗水县"
+            },
+            {
+              "area": "梁山县"
+            },
+            {
+              "area": "曲阜市"
+            },
+            {
+              "area": "邹城市"
+            },
+            {
+              "area": "济宁市"
+            }
+          ]
+        },
+        {
+          "city": "泰安市",
+          "areas": [
+            {
+              "area": "宁阳县"
+            },
+            {
+              "area": "东平县"
+            },
+            {
+              "area": "新泰市"
+            },
+            {
+              "area": "肥城市"
+            },
+            {
+              "area": "泰安市"
+            }
+          ]
+        },
+        {
+          "city": "威海市",
+          "areas": [
+            {
+              "area": "荣成市"
+            },
+            {
+              "area": "乳山市"
+            },
+            {
+              "area": "威海市"
+            }
+          ]
+        },
+        {
+          "city": "日照市",
+          "areas": [
+            {
+              "area": "五莲县"
+            },
+            {
+              "area": "莒县"
+            },
+            {
+              "area": "日照市"
+            }
+          ]
+        },
+        {
+          "city": "临沂市",
+          "areas": [
+            {
+              "area": "沂南县"
+            },
+            {
+              "area": "郯城县"
+            },
+            {
+              "area": "沂水县"
+            },
+            {
+              "area": "兰陵县"
+            },
+            {
+              "area": "费县"
+            },
+            {
+              "area": "平邑县"
+            },
+            {
+              "area": "莒南县"
+            },
+            {
+              "area": "蒙阴县"
+            },
+            {
+              "area": "临沭县"
+            },
+            {
+              "area": "临沂市"
+            }
+          ]
+        },
+        {
+          "city": "德州市",
+          "areas": [
+            {
+              "area": "宁津县"
+            },
+            {
+              "area": "庆云县"
+            },
+            {
+              "area": "临邑县"
+            },
+            {
+              "area": "齐河县"
+            },
+            {
+              "area": "平原县"
+            },
+            {
+              "area": "夏津县"
+            },
+            {
+              "area": "武城县"
+            },
+            {
+              "area": "乐陵市"
+            },
+            {
+              "area": "禹城市"
+            },
+            {
+              "area": "德州市"
+            }
+          ]
+        },
+        {
+          "city": "聊城市",
+          "areas": [
+            {
+              "area": "阳谷县"
+            },
+            {
+              "area": "莘县"
+            },
+            {
+              "area": "东阿县"
+            },
+            {
+              "area": "冠县"
+            },
+            {
+              "area": "高唐县"
+            },
+            {
+              "area": "临清市"
+            },
+            {
+              "area": "聊城市"
+            }
+          ]
+        },
+        {
+          "city": "滨州市",
+          "areas": [
+            {
+              "area": "惠民县"
+            },
+            {
+              "area": "阳信县"
+            },
+            {
+              "area": "无棣县"
+            },
+            {
+              "area": "博兴县"
+            },
+            {
+              "area": "邹平市"
+            },
+            {
+              "area": "滨州市"
+            }
+          ]
+        },
+        {
+          "city": "菏泽市",
+          "areas": [
+            {
+              "area": "曹县"
+            },
+            {
+              "area": "单县"
+            },
+            {
+              "area": "成武县"
+            },
+            {
+              "area": "巨野县"
+            },
+            {
+              "area": "郓城县"
+            },
+            {
+              "area": "鄄城县"
+            },
+            {
+              "area": "东明县"
+            },
+            {
+              "area": "菏泽市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "河南省",
+      "citys": [
+        {
+          "city": "郑州市",
+          "areas": [
+            {
+              "area": "中牟县"
+            },
+            {
+              "area": "巩义市"
+            },
+            {
+              "area": "荥阳市"
+            },
+            {
+              "area": "新密市"
+            },
+            {
+              "area": "新郑市"
+            },
+            {
+              "area": "登封市"
+            },
+            {
+              "area": "郑州市"
+            }
+          ]
+        },
+        {
+          "city": "开封市",
+          "areas": [
+            {
+              "area": "杞县"
+            },
+            {
+              "area": "通许县"
+            },
+            {
+              "area": "尉氏县"
+            },
+            {
+              "area": "兰考县"
+            },
+            {
+              "area": "开封市"
+            }
+          ]
+        },
+        {
+          "city": "洛阳市",
+          "areas": [
+            {
+              "area": "新安县"
+            },
+            {
+              "area": "栾川县"
+            },
+            {
+              "area": "嵩县"
+            },
+            {
+              "area": "汝阳县"
+            },
+            {
+              "area": "宜阳县"
+            },
+            {
+              "area": "洛宁县"
+            },
+            {
+              "area": "伊川县"
+            },
+            {
+              "area": "洛阳市"
+            }
+          ]
+        },
+        {
+          "city": "平顶山市",
+          "areas": [
+            {
+              "area": "宝丰县"
+            },
+            {
+              "area": "叶县"
+            },
+            {
+              "area": "鲁山县"
+            },
+            {
+              "area": "郏县"
+            },
+            {
+              "area": "舞钢市"
+            },
+            {
+              "area": "汝州市"
+            },
+            {
+              "area": "平顶山市"
+            }
+          ]
+        },
+        {
+          "city": "安阳市",
+          "areas": [
+            {
+              "area": "安阳县"
+            },
+            {
+              "area": "汤阴县"
+            },
+            {
+              "area": "滑县"
+            },
+            {
+              "area": "内黄县"
+            },
+            {
+              "area": "林州市"
+            },
+            {
+              "area": "安阳市"
+            }
+          ]
+        },
+        {
+          "city": "鹤壁市",
+          "areas": [
+            {
+              "area": "浚县"
+            },
+            {
+              "area": "淇县"
+            },
+            {
+              "area": "鹤壁市"
+            }
+          ]
+        },
+        {
+          "city": "新乡市",
+          "areas": [
+            {
+              "area": "新乡县"
+            },
+            {
+              "area": "获嘉县"
+            },
+            {
+              "area": "原阳县"
+            },
+            {
+              "area": "延津县"
+            },
+            {
+              "area": "封丘县"
+            },
+            {
+              "area": "卫辉市"
+            },
+            {
+              "area": "辉县市"
+            },
+            {
+              "area": "长垣市"
+            },
+            {
+              "area": "新乡市"
+            }
+          ]
+        },
+        {
+          "city": "焦作市",
+          "areas": [
+            {
+              "area": "修武县"
+            },
+            {
+              "area": "博爱县"
+            },
+            {
+              "area": "武陟县"
+            },
+            {
+              "area": "温县"
+            },
+            {
+              "area": "沁阳市"
+            },
+            {
+              "area": "孟州市"
+            },
+            {
+              "area": "焦作市"
+            }
+          ]
+        },
+        {
+          "city": "濮阳市",
+          "areas": [
+            {
+              "area": "清丰县"
+            },
+            {
+              "area": "南乐县"
+            },
+            {
+              "area": "范县"
+            },
+            {
+              "area": "台前县"
+            },
+            {
+              "area": "濮阳县"
+            },
+            {
+              "area": "濮阳市"
+            }
+          ]
+        },
+        {
+          "city": "许昌市",
+          "areas": [
+            {
+              "area": "鄢陵县"
+            },
+            {
+              "area": "襄城县"
+            },
+            {
+              "area": "禹州市"
+            },
+            {
+              "area": "长葛市"
+            },
+            {
+              "area": "许昌市"
+            }
+          ]
+        },
+        {
+          "city": "漯河市",
+          "areas": [
+            {
+              "area": "舞阳县"
+            },
+            {
+              "area": "临颍县"
+            },
+            {
+              "area": "漯河市"
+            }
+          ]
+        },
+        {
+          "city": "三门峡市",
+          "areas": [
+            {
+              "area": "渑池县"
+            },
+            {
+              "area": "卢氏县"
+            },
+            {
+              "area": "义马市"
+            },
+            {
+              "area": "灵宝市"
+            },
+            {
+              "area": "三门峡市"
+            }
+          ]
+        },
+        {
+          "city": "南阳市",
+          "areas": [
+            {
+              "area": "南召县"
+            },
+            {
+              "area": "方城县"
+            },
+            {
+              "area": "西峡县"
+            },
+            {
+              "area": "镇平县"
+            },
+            {
+              "area": "内乡县"
+            },
+            {
+              "area": "淅川县"
+            },
+            {
+              "area": "社旗县"
+            },
+            {
+              "area": "唐河县"
+            },
+            {
+              "area": "新野县"
+            },
+            {
+              "area": "桐柏县"
+            },
+            {
+              "area": "邓州市"
+            },
+            {
+              "area": "南阳市"
+            }
+          ]
+        },
+        {
+          "city": "商丘市",
+          "areas": [
+            {
+              "area": "民权县"
+            },
+            {
+              "area": "睢县"
+            },
+            {
+              "area": "宁陵县"
+            },
+            {
+              "area": "柘城县"
+            },
+            {
+              "area": "虞城县"
+            },
+            {
+              "area": "夏邑县"
+            },
+            {
+              "area": "永城市"
+            },
+            {
+              "area": "商丘市"
+            }
+          ]
+        },
+        {
+          "city": "信阳市",
+          "areas": [
+            {
+              "area": "罗山县"
+            },
+            {
+              "area": "光山县"
+            },
+            {
+              "area": "新县"
+            },
+            {
+              "area": "商城县"
+            },
+            {
+              "area": "固始县"
+            },
+            {
+              "area": "潢川县"
+            },
+            {
+              "area": "淮滨县"
+            },
+            {
+              "area": "息县"
+            },
+            {
+              "area": "信阳市"
+            }
+          ]
+        },
+        {
+          "city": "周口市",
+          "areas": [
+            {
+              "area": "扶沟县"
+            },
+            {
+              "area": "西华县"
+            },
+            {
+              "area": "商水县"
+            },
+            {
+              "area": "沈丘县"
+            },
+            {
+              "area": "郸城县"
+            },
+            {
+              "area": "太康县"
+            },
+            {
+              "area": "鹿邑县"
+            },
+            {
+              "area": "项城市"
+            },
+            {
+              "area": "周口市"
+            }
+          ]
+        },
+        {
+          "city": "驻马店市",
+          "areas": [
+            {
+              "area": "西平县"
+            },
+            {
+              "area": "上蔡县"
+            },
+            {
+              "area": "平舆县"
+            },
+            {
+              "area": "正阳县"
+            },
+            {
+              "area": "确山县"
+            },
+            {
+              "area": "泌阳县"
+            },
+            {
+              "area": "汝南县"
+            },
+            {
+              "area": "遂平县"
+            },
+            {
+              "area": "新蔡县"
+            },
+            {
+              "area": "济源市"
+            },
+            {
+              "area": "驻马店市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "湖北省",
+      "citys": [
+        {
+          "city": "武汉市",
+          "areas": [
+            {
+              "area": "武汉市"
+            }
+          ]
+        },
+        {
+          "city": "黄石市",
+          "areas": [
+            {
+              "area": "阳新县"
+            },
+            {
+              "area": "大冶市"
+            },
+            {
+              "area": "黄石市"
+            }
+          ]
+        },
+        {
+          "city": "十堰市",
+          "areas": [
+            {
+              "area": "郧西县"
+            },
+            {
+              "area": "竹山县"
+            },
+            {
+              "area": "竹溪县"
+            },
+            {
+              "area": "房县"
+            },
+            {
+              "area": "丹江口市"
+            },
+            {
+              "area": "十堰市"
+            }
+          ]
+        },
+        {
+          "city": "宜昌市",
+          "areas": [
+            {
+              "area": "远安县"
+            },
+            {
+              "area": "兴山县"
+            },
+            {
+              "area": "秭归县"
+            },
+            {
+              "area": "长阳土家族自治县"
+            },
+            {
+              "area": "五峰土家族自治县"
+            },
+            {
+              "area": "宜都市"
+            },
+            {
+              "area": "当阳市"
+            },
+            {
+              "area": "枝江市"
+            },
+            {
+              "area": "宜昌市"
+            }
+          ]
+        },
+        {
+          "city": "襄阳市",
+          "areas": [
+            {
+              "area": "南漳县"
+            },
+            {
+              "area": "谷城县"
+            },
+            {
+              "area": "保康县"
+            },
+            {
+              "area": "老河口市"
+            },
+            {
+              "area": "枣阳市"
+            },
+            {
+              "area": "宜城市"
+            },
+            {
+              "area": "襄阳市"
+            }
+          ]
+        },
+        {
+          "city": "鄂州市",
+          "areas": [
+            {
+              "area": "鄂州市"
+            }
+          ]
+        },
+        {
+          "city": "荆门市",
+          "areas": [
+            {
+              "area": "沙洋县"
+            },
+            {
+              "area": "钟祥市"
+            },
+            {
+              "area": "京山市"
+            },
+            {
+              "area": "荆门市"
+            }
+          ]
+        },
+        {
+          "city": "孝感市",
+          "areas": [
+            {
+              "area": "孝昌县"
+            },
+            {
+              "area": "大悟县"
+            },
+            {
+              "area": "云梦县"
+            },
+            {
+              "area": "应城市"
+            },
+            {
+              "area": "安陆市"
+            },
+            {
+              "area": "汉川市"
+            },
+            {
+              "area": "孝感市"
+            }
+          ]
+        },
+        {
+          "city": "荆州市",
+          "areas": [
+            {
+              "area": "公安县"
+            },
+            {
+              "area": "江陵县"
+            },
+            {
+              "area": "石首市"
+            },
+            {
+              "area": "洪湖市"
+            },
+            {
+              "area": "松滋市"
+            },
+            {
+              "area": "监利市"
+            },
+            {
+              "area": "荆州市"
+            }
+          ]
+        },
+        {
+          "city": "黄冈市",
+          "areas": [
+            {
+              "area": "团风县"
+            },
+            {
+              "area": "红安县"
+            },
+            {
+              "area": "罗田县"
+            },
+            {
+              "area": "英山县"
+            },
+            {
+              "area": "浠水县"
+            },
+            {
+              "area": "蕲春县"
+            },
+            {
+              "area": "黄梅县"
+            },
+            {
+              "area": "麻城市"
+            },
+            {
+              "area": "武穴市"
+            },
+            {
+              "area": "黄冈市"
+            }
+          ]
+        },
+        {
+          "city": "咸宁市",
+          "areas": [
+            {
+              "area": "嘉鱼县"
+            },
+            {
+              "area": "通城县"
+            },
+            {
+              "area": "崇阳县"
+            },
+            {
+              "area": "通山县"
+            },
+            {
+              "area": "赤壁市"
+            },
+            {
+              "area": "咸宁市"
+            }
+          ]
+        },
+        {
+          "city": "随州市",
+          "areas": [
+            {
+              "area": "随县"
+            },
+            {
+              "area": "广水市"
+            },
+            {
+              "area": "随州市"
+            }
+          ]
+        },
+        {
+          "city": "恩施土家族苗族自治州",
+          "areas": [
+            {
+              "area": "恩施市"
+            },
+            {
+              "area": "利川市"
+            },
+            {
+              "area": "建始县"
+            },
+            {
+              "area": "巴东县"
+            },
+            {
+              "area": "宣恩县"
+            },
+            {
+              "area": "咸丰县"
+            },
+            {
+              "area": "来凤县"
+            },
+            {
+              "area": "鹤峰县"
+            },
+            {
+              "area": "仙桃市"
+            },
+            {
+              "area": "潜江市"
+            },
+            {
+              "area": "天门市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "湖南省",
+      "citys": [
+        {
+          "city": "长沙市",
+          "areas": [
+            {
+              "area": "长沙县"
+            },
+            {
+              "area": "浏阳市"
+            },
+            {
+              "area": "宁乡市"
+            },
+            {
+              "area": "长沙市"
+            }
+          ]
+        },
+        {
+          "city": "株洲市",
+          "areas": [
+            {
+              "area": "攸县"
+            },
+            {
+              "area": "茶陵县"
+            },
+            {
+              "area": "炎陵县"
+            },
+            {
+              "area": "醴陵市"
+            },
+            {
+              "area": "株洲市"
+            }
+          ]
+        },
+        {
+          "city": "湘潭市",
+          "areas": [
+            {
+              "area": "湘潭县"
+            },
+            {
+              "area": "湘乡市"
+            },
+            {
+              "area": "韶山市"
+            },
+            {
+              "area": "湘潭市"
+            }
+          ]
+        },
+        {
+          "city": "衡阳市",
+          "areas": [
+            {
+              "area": "衡阳县"
+            },
+            {
+              "area": "衡南县"
+            },
+            {
+              "area": "衡山县"
+            },
+            {
+              "area": "衡东县"
+            },
+            {
+              "area": "祁东县"
+            },
+            {
+              "area": "耒阳市"
+            },
+            {
+              "area": "常宁市"
+            },
+            {
+              "area": "衡阳市"
+            }
+          ]
+        },
+        {
+          "city": "邵阳市",
+          "areas": [
+            {
+              "area": "新邵县"
+            },
+            {
+              "area": "邵阳县"
+            },
+            {
+              "area": "隆回县"
+            },
+            {
+              "area": "洞口县"
+            },
+            {
+              "area": "绥宁县"
+            },
+            {
+              "area": "新宁县"
+            },
+            {
+              "area": "城步苗族自治县"
+            },
+            {
+              "area": "武冈市"
+            },
+            {
+              "area": "邵东市"
+            },
+            {
+              "area": "邵阳市"
+            }
+          ]
+        },
+        {
+          "city": "岳阳市",
+          "areas": [
+            {
+              "area": "岳阳县"
+            },
+            {
+              "area": "华容县"
+            },
+            {
+              "area": "湘阴县"
+            },
+            {
+              "area": "平江县"
+            },
+            {
+              "area": "汨罗市"
+            },
+            {
+              "area": "临湘市"
+            },
+            {
+              "area": "岳阳市"
+            }
+          ]
+        },
+        {
+          "city": "常德市",
+          "areas": [
+            {
+              "area": "安乡县"
+            },
+            {
+              "area": "汉寿县"
+            },
+            {
+              "area": "澧县"
+            },
+            {
+              "area": "临澧县"
+            },
+            {
+              "area": "桃源县"
+            },
+            {
+              "area": "石门县"
+            },
+            {
+              "area": "津市市"
+            },
+            {
+              "area": "常德市"
+            }
+          ]
+        },
+        {
+          "city": "张家界市",
+          "areas": [
+            {
+              "area": "慈利县"
+            },
+            {
+              "area": "桑植县"
+            },
+            {
+              "area": "张家界市"
+            }
+          ]
+        },
+        {
+          "city": "益阳市",
+          "areas": [
+            {
+              "area": "南县"
+            },
+            {
+              "area": "桃江县"
+            },
+            {
+              "area": "安化县"
+            },
+            {
+              "area": "沅江市"
+            },
+            {
+              "area": "益阳市"
+            }
+          ]
+        },
+        {
+          "city": "郴州市",
+          "areas": [
+            {
+              "area": "桂阳县"
+            },
+            {
+              "area": "宜章县"
+            },
+            {
+              "area": "永兴县"
+            },
+            {
+              "area": "嘉禾县"
+            },
+            {
+              "area": "临武县"
+            },
+            {
+              "area": "汝城县"
+            },
+            {
+              "area": "桂东县"
+            },
+            {
+              "area": "安仁县"
+            },
+            {
+              "area": "资兴市"
+            },
+            {
+              "area": "郴州市"
+            }
+          ]
+        },
+        {
+          "city": "永州市",
+          "areas": [
+            {
+              "area": "东安县"
+            },
+            {
+              "area": "双牌县"
+            },
+            {
+              "area": "道县"
+            },
+            {
+              "area": "江永县"
+            },
+            {
+              "area": "宁远县"
+            },
+            {
+              "area": "蓝山县"
+            },
+            {
+              "area": "新田县"
+            },
+            {
+              "area": "江华瑶族自治县"
+            },
+            {
+              "area": "祁阳市"
+            },
+            {
+              "area": "永州市"
+            }
+          ]
+        },
+        {
+          "city": "怀化市",
+          "areas": [
+            {
+              "area": "中方县"
+            },
+            {
+              "area": "沅陵县"
+            },
+            {
+              "area": "辰溪县"
+            },
+            {
+              "area": "溆浦县"
+            },
+            {
+              "area": "会同县"
+            },
+            {
+              "area": "麻阳苗族自治县"
+            },
+            {
+              "area": "新晃侗族自治县"
+            },
+            {
+              "area": "芷江侗族自治县"
+            },
+            {
+              "area": "靖州苗族侗族自治县"
+            },
+            {
+              "area": "通道侗族自治县"
+            },
+            {
+              "area": "洪江市"
+            },
+            {
+              "area": "怀化市"
+            }
+          ]
+        },
+        {
+          "city": "娄底市",
+          "areas": [
+            {
+              "area": "双峰县"
+            },
+            {
+              "area": "新化县"
+            },
+            {
+              "area": "冷水江市"
+            },
+            {
+              "area": "涟源市"
+            },
+            {
+              "area": "娄底市"
+            }
+          ]
+        },
+        {
+          "city": "湘西土家族苗族自治州",
+          "areas": [
+            {
+              "area": "吉首市"
+            },
+            {
+              "area": "泸溪县"
+            },
+            {
+              "area": "凤凰县"
+            },
+            {
+              "area": "花垣县"
+            },
+            {
+              "area": "保靖县"
+            },
+            {
+              "area": "古丈县"
+            },
+            {
+              "area": "永顺县"
+            },
+            {
+              "area": "龙山县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "广东省",
+      "citys": [
+        {
+          "city": "广州市",
+          "areas": [
+            {
+              "area": "广州市"
+            }
+          ]
+        },
+        {
+          "city": "韶关市",
+          "areas": [
+            {
+              "area": "始兴县"
+            },
+            {
+              "area": "仁化县"
+            },
+            {
+              "area": "翁源县"
+            },
+            {
+              "area": "乳源瑶族自治县"
+            },
+            {
+              "area": "新丰县"
+            },
+            {
+              "area": "乐昌市"
+            },
+            {
+              "area": "南雄市"
+            },
+            {
+              "area": "韶关市"
+            }
+          ]
+        },
+        {
+          "city": "深圳市",
+          "areas": [
+            {
+              "area": "深圳市"
+            }
+          ]
+        },
+        {
+          "city": "珠海市",
+          "areas": [
+            {
+              "area": "珠海市"
+            }
+          ]
+        },
+        {
+          "city": "汕头市",
+          "areas": [
+            {
+              "area": "南澳县"
+            },
+            {
+              "area": "汕头市"
+            }
+          ]
+        },
+        {
+          "city": "佛山市",
+          "areas": [
+            {
+              "area": "佛山市"
+            }
+          ]
+        },
+        {
+          "city": "江门市",
+          "areas": [
+            {
+              "area": "台山市"
+            },
+            {
+              "area": "开平市"
+            },
+            {
+              "area": "鹤山市"
+            },
+            {
+              "area": "恩平市"
+            },
+            {
+              "area": "江门市"
+            }
+          ]
+        },
+        {
+          "city": "湛江市",
+          "areas": [
+            {
+              "area": "遂溪县"
+            },
+            {
+              "area": "徐闻县"
+            },
+            {
+              "area": "廉江市"
+            },
+            {
+              "area": "雷州市"
+            },
+            {
+              "area": "吴川市"
+            },
+            {
+              "area": "湛江市"
+            }
+          ]
+        },
+        {
+          "city": "茂名市",
+          "areas": [
+            {
+              "area": "高州市"
+            },
+            {
+              "area": "化州市"
+            },
+            {
+              "area": "信宜市"
+            },
+            {
+              "area": "茂名市"
+            }
+          ]
+        },
+        {
+          "city": "肇庆市",
+          "areas": [
+            {
+              "area": "广宁县"
+            },
+            {
+              "area": "怀集县"
+            },
+            {
+              "area": "封开县"
+            },
+            {
+              "area": "德庆县"
+            },
+            {
+              "area": "四会市"
+            },
+            {
+              "area": "肇庆市"
+            }
+          ]
+        },
+        {
+          "city": "惠州市",
+          "areas": [
+            {
+              "area": "博罗县"
+            },
+            {
+              "area": "惠东县"
+            },
+            {
+              "area": "龙门县"
+            },
+            {
+              "area": "惠州市"
+            }
+          ]
+        },
+        {
+          "city": "梅州市",
+          "areas": [
+            {
+              "area": "大埔县"
+            },
+            {
+              "area": "丰顺县"
+            },
+            {
+              "area": "五华县"
+            },
+            {
+              "area": "平远县"
+            },
+            {
+              "area": "蕉岭县"
+            },
+            {
+              "area": "兴宁市"
+            },
+            {
+              "area": "梅州市"
+            }
+          ]
+        },
+        {
+          "city": "汕尾市",
+          "areas": [
+            {
+              "area": "海丰县"
+            },
+            {
+              "area": "陆河县"
+            },
+            {
+              "area": "陆丰市"
+            },
+            {
+              "area": "汕尾市"
+            }
+          ]
+        },
+        {
+          "city": "河源市",
+          "areas": [
+            {
+              "area": "紫金县"
+            },
+            {
+              "area": "龙川县"
+            },
+            {
+              "area": "连平县"
+            },
+            {
+              "area": "和平县"
+            },
+            {
+              "area": "东源县"
+            },
+            {
+              "area": "河源市"
+            }
+          ]
+        },
+        {
+          "city": "阳江市",
+          "areas": [
+            {
+              "area": "阳西县"
+            },
+            {
+              "area": "阳春市"
+            },
+            {
+              "area": "阳江市"
+            }
+          ]
+        },
+        {
+          "city": "清远市",
+          "areas": [
+            {
+              "area": "佛冈县"
+            },
+            {
+              "area": "阳山县"
+            },
+            {
+              "area": "连山壮族瑶族自治县"
+            },
+            {
+              "area": "连南瑶族自治县"
+            },
+            {
+              "area": "英德市"
+            },
+            {
+              "area": "连州市"
+            },
+            {
+              "area": "清远市"
+            }
+          ]
+        },
+        {
+          "city": "潮州市",
+          "areas": [
+            {
+              "area": "饶平县"
+            },
+            {
+              "area": "潮州市"
+            }
+          ]
+        },
+        {
+          "city": "揭阳市",
+          "areas": [
+            {
+              "area": "揭西县"
+            },
+            {
+              "area": "惠来县"
+            },
+            {
+              "area": "普宁市"
+            },
+            {
+              "area": "揭阳市"
+            }
+          ]
+        },
+        {
+          "city": "云浮市",
+          "areas": [
+            {
+              "area": "新兴县"
+            },
+            {
+              "area": "郁南县"
+            },
+            {
+              "area": "罗定市"
+            },
+            {
+              "area": "云浮市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "广西壮族自治区",
+      "citys": [
+        {
+          "city": "南宁市",
+          "areas": [
+            {
+              "area": "隆安县"
+            },
+            {
+              "area": "马山县"
+            },
+            {
+              "area": "上林县"
+            },
+            {
+              "area": "宾阳县"
+            },
+            {
+              "area": "横州市"
+            },
+            {
+              "area": "南宁市"
+            }
+          ]
+        },
+        {
+          "city": "柳州市",
+          "areas": [
+            {
+              "area": "柳城县"
+            },
+            {
+              "area": "鹿寨县"
+            },
+            {
+              "area": "融安县"
+            },
+            {
+              "area": "融水苗族自治县"
+            },
+            {
+              "area": "三江侗族自治县"
+            },
+            {
+              "area": "柳州市"
+            }
+          ]
+        },
+        {
+          "city": "桂林市",
+          "areas": [
+            {
+              "area": "阳朔县"
+            },
+            {
+              "area": "灵川县"
+            },
+            {
+              "area": "全州县"
+            },
+            {
+              "area": "兴安县"
+            },
+            {
+              "area": "永福县"
+            },
+            {
+              "area": "灌阳县"
+            },
+            {
+              "area": "龙胜各族自治县"
+            },
+            {
+              "area": "资源县"
+            },
+            {
+              "area": "平乐县"
+            },
+            {
+              "area": "恭城瑶族自治县"
+            },
+            {
+              "area": "荔浦市"
+            },
+            {
+              "area": "桂林市"
+            }
+          ]
+        },
+        {
+          "city": "梧州市",
+          "areas": [
+            {
+              "area": "苍梧县"
+            },
+            {
+              "area": "藤县"
+            },
+            {
+              "area": "蒙山县"
+            },
+            {
+              "area": "岑溪市"
+            },
+            {
+              "area": "梧州市"
+            }
+          ]
+        },
+        {
+          "city": "北海市",
+          "areas": [
+            {
+              "area": "合浦县"
+            },
+            {
+              "area": "北海市"
+            }
+          ]
+        },
+        {
+          "city": "防城港市",
+          "areas": [
+            {
+              "area": "上思县"
+            },
+            {
+              "area": "东兴市"
+            },
+            {
+              "area": "防城港市"
+            }
+          ]
+        },
+        {
+          "city": "钦州市",
+          "areas": [
+            {
+              "area": "灵山县"
+            },
+            {
+              "area": "浦北县"
+            },
+            {
+              "area": "钦州市"
+            }
+          ]
+        },
+        {
+          "city": "贵港市",
+          "areas": [
+            {
+              "area": "平南县"
+            },
+            {
+              "area": "桂平市"
+            },
+            {
+              "area": "贵港市"
+            }
+          ]
+        },
+        {
+          "city": "玉林市",
+          "areas": [
+            {
+              "area": "容县"
+            },
+            {
+              "area": "陆川县"
+            },
+            {
+              "area": "博白县"
+            },
+            {
+              "area": "兴业县"
+            },
+            {
+              "area": "北流市"
+            },
+            {
+              "area": "玉林市"
+            }
+          ]
+        },
+        {
+          "city": "百色市",
+          "areas": [
+            {
+              "area": "田东县"
+            },
+            {
+              "area": "德保县"
+            },
+            {
+              "area": "那坡县"
+            },
+            {
+              "area": "凌云县"
+            },
+            {
+              "area": "乐业县"
+            },
+            {
+              "area": "田林县"
+            },
+            {
+              "area": "西林县"
+            },
+            {
+              "area": "隆林各族自治县"
+            },
+            {
+              "area": "靖西市"
+            },
+            {
+              "area": "平果市"
+            },
+            {
+              "area": "百色市"
+            }
+          ]
+        },
+        {
+          "city": "贺州市",
+          "areas": [
+            {
+              "area": "昭平县"
+            },
+            {
+              "area": "钟山县"
+            },
+            {
+              "area": "富川瑶族自治县"
+            },
+            {
+              "area": "贺州市"
+            }
+          ]
+        },
+        {
+          "city": "河池市",
+          "areas": [
+            {
+              "area": "南丹县"
+            },
+            {
+              "area": "天峨县"
+            },
+            {
+              "area": "凤山县"
+            },
+            {
+              "area": "东兰县"
+            },
+            {
+              "area": "罗城仫佬族自治县"
+            },
+            {
+              "area": "环江毛南族自治县"
+            },
+            {
+              "area": "巴马瑶族自治县"
+            },
+            {
+              "area": "都安瑶族自治县"
+            },
+            {
+              "area": "大化瑶族自治县"
+            },
+            {
+              "area": "河池市"
+            }
+          ]
+        },
+        {
+          "city": "来宾市",
+          "areas": [
+            {
+              "area": "忻城县"
+            },
+            {
+              "area": "象州县"
+            },
+            {
+              "area": "武宣县"
+            },
+            {
+              "area": "金秀瑶族自治县"
+            },
+            {
+              "area": "合山市"
+            },
+            {
+              "area": "来宾市"
+            }
+          ]
+        },
+        {
+          "city": "崇左市",
+          "areas": [
+            {
+              "area": "扶绥县"
+            },
+            {
+              "area": "宁明县"
+            },
+            {
+              "area": "龙州县"
+            },
+            {
+              "area": "大新县"
+            },
+            {
+              "area": "天等县"
+            },
+            {
+              "area": "凭祥市"
+            },
+            {
+              "area": "崇左市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "海南省",
+      "citys": [
+        {
+          "city": "海口市",
+          "areas": [
+            {
+              "area": "海口市"
+            }
+          ]
+        },
+        {
+          "city": "三亚市",
+          "areas": [
+            {
+              "area": "三亚市"
+            }
+          ]
+        },
+        {
+          "city": "儋州市",
+          "areas": [
+            {
+              "area": "五指山市"
+            },
+            {
+              "area": "琼海市"
+            },
+            {
+              "area": "文昌市"
+            },
+            {
+              "area": "万宁市"
+            },
+            {
+              "area": "东方市"
+            },
+            {
+              "area": "定安县"
+            },
+            {
+              "area": "屯昌县"
+            },
+            {
+              "area": "澄迈县"
+            },
+            {
+              "area": "临高县"
+            },
+            {
+              "area": "白沙黎族自治县"
+            },
+            {
+              "area": "昌江黎族自治县"
+            },
+            {
+              "area": "乐东黎族自治县"
+            },
+            {
+              "area": "陵水黎族自治县"
+            },
+            {
+              "area": "保亭黎族苗族自治县"
+            },
+            {
+              "area": "琼中黎族苗族自治县"
+            },
+            {
+              "area": "儋州市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "重庆市",
+      "citys": [
+        {
+          "city": "重庆市",
+          "areas": [
+            {
+              "area": "城口县"
+            },
+            {
+              "area": "丰都县"
+            },
+            {
+              "area": "垫江县"
+            },
+            {
+              "area": "忠县"
+            },
+            {
+              "area": "云阳县"
+            },
+            {
+              "area": "奉节县"
+            },
+            {
+              "area": "巫山县"
+            },
+            {
+              "area": "巫溪县"
+            },
+            {
+              "area": "石柱土家族自治县"
+            },
+            {
+              "area": "秀山土家族苗族自治县"
+            },
+            {
+              "area": "酉阳土家族苗族自治县"
+            },
+            {
+              "area": "彭水苗族土家族自治县"
+            },
+            {
+              "area": "重庆市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "四川省",
+      "citys": [
+        {
+          "city": "成都市",
+          "areas": [
+            {
+              "area": "金堂县"
+            },
+            {
+              "area": "大邑县"
+            },
+            {
+              "area": "蒲江县"
+            },
+            {
+              "area": "都江堰市"
+            },
+            {
+              "area": "彭州市"
+            },
+            {
+              "area": "邛崃市"
+            },
+            {
+              "area": "崇州市"
+            },
+            {
+              "area": "简阳市"
+            },
+            {
+              "area": "成都市"
+            }
+          ]
+        },
+        {
+          "city": "自贡市",
+          "areas": [
+            {
+              "area": "荣县"
+            },
+            {
+              "area": "富顺县"
+            },
+            {
+              "area": "自贡市"
+            }
+          ]
+        },
+        {
+          "city": "攀枝花市",
+          "areas": [
+            {
+              "area": "米易县"
+            },
+            {
+              "area": "盐边县"
+            },
+            {
+              "area": "攀枝花市"
+            }
+          ]
+        },
+        {
+          "city": "泸州市",
+          "areas": [
+            {
+              "area": "泸县"
+            },
+            {
+              "area": "合江县"
+            },
+            {
+              "area": "叙永县"
+            },
+            {
+              "area": "古蔺县"
+            },
+            {
+              "area": "泸州市"
+            }
+          ]
+        },
+        {
+          "city": "德阳市",
+          "areas": [
+            {
+              "area": "中江县"
+            },
+            {
+              "area": "广汉市"
+            },
+            {
+              "area": "什邡市"
+            },
+            {
+              "area": "绵竹市"
+            },
+            {
+              "area": "德阳市"
+            }
+          ]
+        },
+        {
+          "city": "绵阳市",
+          "areas": [
+            {
+              "area": "三台县"
+            },
+            {
+              "area": "盐亭县"
+            },
+            {
+              "area": "梓潼县"
+            },
+            {
+              "area": "北川羌族自治县"
+            },
+            {
+              "area": "平武县"
+            },
+            {
+              "area": "江油市"
+            },
+            {
+              "area": "绵阳市"
+            }
+          ]
+        },
+        {
+          "city": "广元市",
+          "areas": [
+            {
+              "area": "旺苍县"
+            },
+            {
+              "area": "青川县"
+            },
+            {
+              "area": "剑阁县"
+            },
+            {
+              "area": "苍溪县"
+            },
+            {
+              "area": "广元市"
+            }
+          ]
+        },
+        {
+          "city": "遂宁市",
+          "areas": [
+            {
+              "area": "蓬溪县"
+            },
+            {
+              "area": "大英县"
+            },
+            {
+              "area": "射洪市"
+            },
+            {
+              "area": "遂宁市"
+            }
+          ]
+        },
+        {
+          "city": "内江市",
+          "areas": [
+            {
+              "area": "威远县"
+            },
+            {
+              "area": "资中县"
+            },
+            {
+              "area": "隆昌市"
+            },
+            {
+              "area": "内江市"
+            }
+          ]
+        },
+        {
+          "city": "乐山市",
+          "areas": [
+            {
+              "area": "犍为县"
+            },
+            {
+              "area": "井研县"
+            },
+            {
+              "area": "夹江县"
+            },
+            {
+              "area": "沐川县"
+            },
+            {
+              "area": "峨边彝族自治县"
+            },
+            {
+              "area": "马边彝族自治县"
+            },
+            {
+              "area": "峨眉山市"
+            },
+            {
+              "area": "乐山市"
+            }
+          ]
+        },
+        {
+          "city": "南充市",
+          "areas": [
+            {
+              "area": "南部县"
+            },
+            {
+              "area": "营山县"
+            },
+            {
+              "area": "蓬安县"
+            },
+            {
+              "area": "仪陇县"
+            },
+            {
+              "area": "西充县"
+            },
+            {
+              "area": "阆中市"
+            },
+            {
+              "area": "南充市"
+            }
+          ]
+        },
+        {
+          "city": "眉山市",
+          "areas": [
+            {
+              "area": "仁寿县"
+            },
+            {
+              "area": "洪雅县"
+            },
+            {
+              "area": "丹棱县"
+            },
+            {
+              "area": "青神县"
+            },
+            {
+              "area": "眉山市"
+            }
+          ]
+        },
+        {
+          "city": "宜宾市",
+          "areas": [
+            {
+              "area": "江安县"
+            },
+            {
+              "area": "长宁县"
+            },
+            {
+              "area": "高县"
+            },
+            {
+              "area": "珙县"
+            },
+            {
+              "area": "筠连县"
+            },
+            {
+              "area": "兴文县"
+            },
+            {
+              "area": "屏山县"
+            },
+            {
+              "area": "宜宾市"
+            }
+          ]
+        },
+        {
+          "city": "广安市",
+          "areas": [
+            {
+              "area": "岳池县"
+            },
+            {
+              "area": "武胜县"
+            },
+            {
+              "area": "邻水县"
+            },
+            {
+              "area": "华蓥市"
+            },
+            {
+              "area": "广安市"
+            }
+          ]
+        },
+        {
+          "city": "达州市",
+          "areas": [
+            {
+              "area": "宣汉县"
+            },
+            {
+              "area": "开江县"
+            },
+            {
+              "area": "大竹县"
+            },
+            {
+              "area": "渠县"
+            },
+            {
+              "area": "万源市"
+            },
+            {
+              "area": "达州市"
+            }
+          ]
+        },
+        {
+          "city": "雅安市",
+          "areas": [
+            {
+              "area": "荥经县"
+            },
+            {
+              "area": "汉源县"
+            },
+            {
+              "area": "石棉县"
+            },
+            {
+              "area": "天全县"
+            },
+            {
+              "area": "芦山县"
+            },
+            {
+              "area": "宝兴县"
+            },
+            {
+              "area": "雅安市"
+            }
+          ]
+        },
+        {
+          "city": "巴中市",
+          "areas": [
+            {
+              "area": "通江县"
+            },
+            {
+              "area": "南江县"
+            },
+            {
+              "area": "平昌县"
+            },
+            {
+              "area": "巴中市"
+            }
+          ]
+        },
+        {
+          "city": "资阳市",
+          "areas": [
+            {
+              "area": "安岳县"
+            },
+            {
+              "area": "乐至县"
+            },
+            {
+              "area": "资阳市"
+            }
+          ]
+        },
+        {
+          "city": "阿坝藏族羌族自治州",
+          "areas": [
+            {
+              "area": "马尔康市"
+            },
+            {
+              "area": "汶川县"
+            },
+            {
+              "area": "理县"
+            },
+            {
+              "area": "茂县"
+            },
+            {
+              "area": "松潘县"
+            },
+            {
+              "area": "九寨沟县"
+            },
+            {
+              "area": "金川县"
+            },
+            {
+              "area": "小金县"
+            },
+            {
+              "area": "黑水县"
+            },
+            {
+              "area": "壤塘县"
+            },
+            {
+              "area": "阿坝县"
+            },
+            {
+              "area": "若尔盖县"
+            },
+            {
+              "area": "红原县"
+            }
+          ]
+        },
+        {
+          "city": "甘孜藏族自治州",
+          "areas": [
+            {
+              "area": "康定市"
+            },
+            {
+              "area": "泸定县"
+            },
+            {
+              "area": "丹巴县"
+            },
+            {
+              "area": "九龙县"
+            },
+            {
+              "area": "雅江县"
+            },
+            {
+              "area": "道孚县"
+            },
+            {
+              "area": "炉霍县"
+            },
+            {
+              "area": "甘孜县"
+            },
+            {
+              "area": "新龙县"
+            },
+            {
+              "area": "德格县"
+            },
+            {
+              "area": "白玉县"
+            },
+            {
+              "area": "石渠县"
+            },
+            {
+              "area": "色达县"
+            },
+            {
+              "area": "理塘县"
+            },
+            {
+              "area": "巴塘县"
+            },
+            {
+              "area": "乡城县"
+            },
+            {
+              "area": "稻城县"
+            },
+            {
+              "area": "得荣县"
+            }
+          ]
+        },
+        {
+          "city": "凉山彝族自治州",
+          "areas": [
+            {
+              "area": "西昌市"
+            },
+            {
+              "area": "会理市"
+            },
+            {
+              "area": "木里藏族自治县"
+            },
+            {
+              "area": "盐源县"
+            },
+            {
+              "area": "德昌县"
+            },
+            {
+              "area": "会东县"
+            },
+            {
+              "area": "宁南县"
+            },
+            {
+              "area": "普格县"
+            },
+            {
+              "area": "布拖县"
+            },
+            {
+              "area": "金阳县"
+            },
+            {
+              "area": "昭觉县"
+            },
+            {
+              "area": "喜德县"
+            },
+            {
+              "area": "冕宁县"
+            },
+            {
+              "area": "越西县"
+            },
+            {
+              "area": "甘洛县"
+            },
+            {
+              "area": "美姑县"
+            },
+            {
+              "area": "雷波县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "贵州省",
+      "citys": [
+        {
+          "city": "贵阳市",
+          "areas": [
+            {
+              "area": "开阳县"
+            },
+            {
+              "area": "息烽县"
+            },
+            {
+              "area": "修文县"
+            },
+            {
+              "area": "清镇市"
+            },
+            {
+              "area": "贵阳市"
+            }
+          ]
+        },
+        {
+          "city": "六盘水市",
+          "areas": [
+            {
+              "area": "盘州市"
+            },
+            {
+              "area": "六盘水市"
+            }
+          ]
+        },
+        {
+          "city": "遵义市",
+          "areas": [
+            {
+              "area": "桐梓县"
+            },
+            {
+              "area": "绥阳县"
+            },
+            {
+              "area": "正安县"
+            },
+            {
+              "area": "道真仡佬族苗族自治县"
+            },
+            {
+              "area": "务川仡佬族苗族自治县"
+            },
+            {
+              "area": "凤冈县"
+            },
+            {
+              "area": "湄潭县"
+            },
+            {
+              "area": "余庆县"
+            },
+            {
+              "area": "习水县"
+            },
+            {
+              "area": "赤水市"
+            },
+            {
+              "area": "仁怀市"
+            },
+            {
+              "area": "遵义市"
+            }
+          ]
+        },
+        {
+          "city": "安顺市",
+          "areas": [
+            {
+              "area": "普定县"
+            },
+            {
+              "area": "镇宁布依族苗族自治县"
+            },
+            {
+              "area": "关岭布依族苗族自治县"
+            },
+            {
+              "area": "紫云苗族布依族自治县"
+            },
+            {
+              "area": "安顺市"
+            }
+          ]
+        },
+        {
+          "city": "毕节市",
+          "areas": [
+            {
+              "area": "大方县"
+            },
+            {
+              "area": "金沙县"
+            },
+            {
+              "area": "织金县"
+            },
+            {
+              "area": "纳雍县"
+            },
+            {
+              "area": "威宁彝族回族苗族自治县"
+            },
+            {
+              "area": "赫章县"
+            },
+            {
+              "area": "黔西市"
+            },
+            {
+              "area": "毕节市"
+            }
+          ]
+        },
+        {
+          "city": "铜仁市",
+          "areas": [
+            {
+              "area": "江口县"
+            },
+            {
+              "area": "玉屏侗族自治县"
+            },
+            {
+              "area": "石阡县"
+            },
+            {
+              "area": "思南县"
+            },
+            {
+              "area": "印江土家族苗族自治县"
+            },
+            {
+              "area": "德江县"
+            },
+            {
+              "area": "沿河土家族自治县"
+            },
+            {
+              "area": "松桃苗族自治县"
+            },
+            {
+              "area": "铜仁市"
+            }
+          ]
+        },
+        {
+          "city": "黔西南布依族苗族自治州",
+          "areas": [
+            {
+              "area": "兴义市"
+            },
+            {
+              "area": "兴仁市"
+            },
+            {
+              "area": "普安县"
+            },
+            {
+              "area": "晴隆县"
+            },
+            {
+              "area": "贞丰县"
+            },
+            {
+              "area": "望谟县"
+            },
+            {
+              "area": "册亨县"
+            },
+            {
+              "area": "安龙县"
+            }
+          ]
+        },
+        {
+          "city": "黔东南苗族侗族自治州",
+          "areas": [
+            {
+              "area": "凯里市"
+            },
+            {
+              "area": "黄平县"
+            },
+            {
+              "area": "施秉县"
+            },
+            {
+              "area": "三穗县"
+            },
+            {
+              "area": "镇远县"
+            },
+            {
+              "area": "岑巩县"
+            },
+            {
+              "area": "天柱县"
+            },
+            {
+              "area": "锦屏县"
+            },
+            {
+              "area": "剑河县"
+            },
+            {
+              "area": "台江县"
+            },
+            {
+              "area": "黎平县"
+            },
+            {
+              "area": "榕江县"
+            },
+            {
+              "area": "从江县"
+            },
+            {
+              "area": "雷山县"
+            },
+            {
+              "area": "麻江县"
+            },
+            {
+              "area": "丹寨县"
+            }
+          ]
+        },
+        {
+          "city": "黔南布依族苗族自治州",
+          "areas": [
+            {
+              "area": "都匀市"
+            },
+            {
+              "area": "福泉市"
+            },
+            {
+              "area": "荔波县"
+            },
+            {
+              "area": "贵定县"
+            },
+            {
+              "area": "瓮安县"
+            },
+            {
+              "area": "独山县"
+            },
+            {
+              "area": "平塘县"
+            },
+            {
+              "area": "罗甸县"
+            },
+            {
+              "area": "长顺县"
+            },
+            {
+              "area": "龙里县"
+            },
+            {
+              "area": "惠水县"
+            },
+            {
+              "area": "三都水族自治县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "云南省",
+      "citys": [
+        {
+          "city": "昆明市",
+          "areas": [
+            {
+              "area": "富民县"
+            },
+            {
+              "area": "宜良县"
+            },
+            {
+              "area": "石林彝族自治县"
+            },
+            {
+              "area": "嵩明县"
+            },
+            {
+              "area": "禄劝彝族苗族自治县"
+            },
+            {
+              "area": "寻甸回族彝族自治县"
+            },
+            {
+              "area": "安宁市"
+            },
+            {
+              "area": "昆明市"
+            }
+          ]
+        },
+        {
+          "city": "曲靖市",
+          "areas": [
+            {
+              "area": "陆良县"
+            },
+            {
+              "area": "师宗县"
+            },
+            {
+              "area": "罗平县"
+            },
+            {
+              "area": "富源县"
+            },
+            {
+              "area": "会泽县"
+            },
+            {
+              "area": "宣威市"
+            },
+            {
+              "area": "曲靖市"
+            }
+          ]
+        },
+        {
+          "city": "玉溪市",
+          "areas": [
+            {
+              "area": "通海县"
+            },
+            {
+              "area": "华宁县"
+            },
+            {
+              "area": "易门县"
+            },
+            {
+              "area": "峨山彝族自治县"
+            },
+            {
+              "area": "新平彝族傣族自治县"
+            },
+            {
+              "area": "元江哈尼族彝族傣族自治县"
+            },
+            {
+              "area": "澄江市"
+            },
+            {
+              "area": "玉溪市"
+            }
+          ]
+        },
+        {
+          "city": "保山市",
+          "areas": [
+            {
+              "area": "施甸县"
+            },
+            {
+              "area": "龙陵县"
+            },
+            {
+              "area": "昌宁县"
+            },
+            {
+              "area": "腾冲市"
+            },
+            {
+              "area": "保山市"
+            }
+          ]
+        },
+        {
+          "city": "昭通市",
+          "areas": [
+            {
+              "area": "鲁甸县"
+            },
+            {
+              "area": "巧家县"
+            },
+            {
+              "area": "盐津县"
+            },
+            {
+              "area": "大关县"
+            },
+            {
+              "area": "永善县"
+            },
+            {
+              "area": "绥江县"
+            },
+            {
+              "area": "镇雄县"
+            },
+            {
+              "area": "彝良县"
+            },
+            {
+              "area": "威信县"
+            },
+            {
+              "area": "水富市"
+            },
+            {
+              "area": "昭通市"
+            }
+          ]
+        },
+        {
+          "city": "丽江市",
+          "areas": [
+            {
+              "area": "玉龙纳西族自治县"
+            },
+            {
+              "area": "永胜县"
+            },
+            {
+              "area": "华坪县"
+            },
+            {
+              "area": "宁蒗彝族自治县"
+            },
+            {
+              "area": "丽江市"
+            }
+          ]
+        },
+        {
+          "city": "普洱市",
+          "areas": [
+            {
+              "area": "宁洱哈尼族彝族自治县"
+            },
+            {
+              "area": "墨江哈尼族自治县"
+            },
+            {
+              "area": "景东彝族自治县"
+            },
+            {
+              "area": "景谷傣族彝族自治县"
+            },
+            {
+              "area": "镇沅彝族哈尼族拉祜族自治县"
+            },
+            {
+              "area": "江城哈尼族彝族自治县"
+            },
+            {
+              "area": "孟连傣族拉祜族佤族自治县"
+            },
+            {
+              "area": "澜沧拉祜族自治县"
+            },
+            {
+              "area": "西盟佤族自治县"
+            },
+            {
+              "area": "普洱市"
+            }
+          ]
+        },
+        {
+          "city": "临沧市",
+          "areas": [
+            {
+              "area": "凤庆县"
+            },
+            {
+              "area": "云县"
+            },
+            {
+              "area": "永德县"
+            },
+            {
+              "area": "镇康县"
+            },
+            {
+              "area": "双江拉祜族佤族布朗族傣族自治县"
+            },
+            {
+              "area": "耿马傣族佤族自治县"
+            },
+            {
+              "area": "沧源佤族自治县"
+            },
+            {
+              "area": "临沧市"
+            }
+          ]
+        },
+        {
+          "city": "楚雄彝族自治州",
+          "areas": [
+            {
+              "area": "楚雄市"
+            },
+            {
+              "area": "禄丰市"
+            },
+            {
+              "area": "双柏县"
+            },
+            {
+              "area": "牟定县"
+            },
+            {
+              "area": "南华县"
+            },
+            {
+              "area": "姚安县"
+            },
+            {
+              "area": "大姚县"
+            },
+            {
+              "area": "永仁县"
+            },
+            {
+              "area": "元谋县"
+            },
+            {
+              "area": "武定县"
+            }
+          ]
+        },
+        {
+          "city": "红河哈尼族彝族自治州",
+          "areas": [
+            {
+              "area": "个旧市"
+            },
+            {
+              "area": "开远市"
+            },
+            {
+              "area": "蒙自市"
+            },
+            {
+              "area": "弥勒市"
+            },
+            {
+              "area": "屏边苗族自治县"
+            },
+            {
+              "area": "建水县"
+            },
+            {
+              "area": "石屏县"
+            },
+            {
+              "area": "泸西县"
+            },
+            {
+              "area": "元阳县"
+            },
+            {
+              "area": "红河县"
+            },
+            {
+              "area": "金平苗族瑶族傣族自治县"
+            },
+            {
+              "area": "绿春县"
+            },
+            {
+              "area": "河口瑶族自治县"
+            }
+          ]
+        },
+        {
+          "city": "文山壮族苗族自治州",
+          "areas": [
+            {
+              "area": "文山市"
+            },
+            {
+              "area": "砚山县"
+            },
+            {
+              "area": "西畴县"
+            },
+            {
+              "area": "麻栗坡县"
+            },
+            {
+              "area": "马关县"
+            },
+            {
+              "area": "丘北县"
+            },
+            {
+              "area": "广南县"
+            },
+            {
+              "area": "富宁县"
+            }
+          ]
+        },
+        {
+          "city": "西双版纳傣族自治州",
+          "areas": [
+            {
+              "area": "景洪市"
+            },
+            {
+              "area": "勐海县"
+            },
+            {
+              "area": "勐腊县"
+            }
+          ]
+        },
+        {
+          "city": "大理白族自治州",
+          "areas": [
+            {
+              "area": "大理市"
+            },
+            {
+              "area": "漾濞彝族自治县"
+            },
+            {
+              "area": "祥云县"
+            },
+            {
+              "area": "宾川县"
+            },
+            {
+              "area": "弥渡县"
+            },
+            {
+              "area": "南涧彝族自治县"
+            },
+            {
+              "area": "巍山彝族回族自治县"
+            },
+            {
+              "area": "永平县"
+            },
+            {
+              "area": "云龙县"
+            },
+            {
+              "area": "洱源县"
+            },
+            {
+              "area": "剑川县"
+            },
+            {
+              "area": "鹤庆县"
+            }
+          ]
+        },
+        {
+          "city": "德宏傣族景颇族自治州",
+          "areas": [
+            {
+              "area": "瑞丽市"
+            },
+            {
+              "area": "芒市"
+            },
+            {
+              "area": "梁河县"
+            },
+            {
+              "area": "盈江县"
+            },
+            {
+              "area": "陇川县"
+            }
+          ]
+        },
+        {
+          "city": "怒江傈僳族自治州",
+          "areas": [
+            {
+              "area": "泸水市"
+            },
+            {
+              "area": "福贡县"
+            },
+            {
+              "area": "贡山独龙族怒族自治县"
+            },
+            {
+              "area": "兰坪白族普米族自治县"
+            }
+          ]
+        },
+        {
+          "city": "迪庆藏族自治州",
+          "areas": [
+            {
+              "area": "香格里拉市"
+            },
+            {
+              "area": "德钦县"
+            },
+            {
+              "area": "维西傈僳族自治县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "西藏自治区",
+      "citys": [
+        {
+          "city": "拉萨市",
+          "areas": [
+            {
+              "area": "林周县"
+            },
+            {
+              "area": "当雄县"
+            },
+            {
+              "area": "尼木县"
+            },
+            {
+              "area": "曲水县"
+            },
+            {
+              "area": "墨竹工卡县"
+            },
+            {
+              "area": "拉萨市"
+            }
+          ]
+        },
+        {
+          "city": "日喀则市",
+          "areas": [
+            {
+              "area": "南木林县"
+            },
+            {
+              "area": "江孜县"
+            },
+            {
+              "area": "定日县"
+            },
+            {
+              "area": "萨迦县"
+            },
+            {
+              "area": "拉孜县"
+            },
+            {
+              "area": "昂仁县"
+            },
+            {
+              "area": "谢通门县"
+            },
+            {
+              "area": "白朗县"
+            },
+            {
+              "area": "仁布县"
+            },
+            {
+              "area": "康马县"
+            },
+            {
+              "area": "定结县"
+            },
+            {
+              "area": "仲巴县"
+            },
+            {
+              "area": "亚东县"
+            },
+            {
+              "area": "吉隆县"
+            },
+            {
+              "area": "聂拉木县"
+            },
+            {
+              "area": "萨嘎县"
+            },
+            {
+              "area": "岗巴县"
+            },
+            {
+              "area": "日喀则市"
+            }
+          ]
+        },
+        {
+          "city": "昌都市",
+          "areas": [
+            {
+              "area": "江达县"
+            },
+            {
+              "area": "贡觉县"
+            },
+            {
+              "area": "类乌齐县"
+            },
+            {
+              "area": "丁青县"
+            },
+            {
+              "area": "察雅县"
+            },
+            {
+              "area": "八宿县"
+            },
+            {
+              "area": "左贡县"
+            },
+            {
+              "area": "芒康县"
+            },
+            {
+              "area": "洛隆县"
+            },
+            {
+              "area": "边坝县"
+            },
+            {
+              "area": "昌都市"
+            }
+          ]
+        },
+        {
+          "city": "林芝市",
+          "areas": [
+            {
+              "area": "工布江达县"
+            },
+            {
+              "area": "米林县"
+            },
+            {
+              "area": "墨脱县"
+            },
+            {
+              "area": "波密县"
+            },
+            {
+              "area": "察隅县"
+            },
+            {
+              "area": "朗县"
+            },
+            {
+              "area": "林芝市"
+            }
+          ]
+        },
+        {
+          "city": "山南市",
+          "areas": [
+            {
+              "area": "扎囊县"
+            },
+            {
+              "area": "贡嘎县"
+            },
+            {
+              "area": "桑日县"
+            },
+            {
+              "area": "琼结县"
+            },
+            {
+              "area": "曲松县"
+            },
+            {
+              "area": "措美县"
+            },
+            {
+              "area": "洛扎县"
+            },
+            {
+              "area": "加查县"
+            },
+            {
+              "area": "隆子县"
+            },
+            {
+              "area": "错那县"
+            },
+            {
+              "area": "浪卡子县"
+            },
+            {
+              "area": "山南市"
+            }
+          ]
+        },
+        {
+          "city": "那曲市",
+          "areas": [
+            {
+              "area": "嘉黎县"
+            },
+            {
+              "area": "比如县"
+            },
+            {
+              "area": "聂荣县"
+            },
+            {
+              "area": "安多县"
+            },
+            {
+              "area": "申扎县"
+            },
+            {
+              "area": "索县"
+            },
+            {
+              "area": "班戈县"
+            },
+            {
+              "area": "巴青县"
+            },
+            {
+              "area": "尼玛县"
+            },
+            {
+              "area": "双湖县"
+            },
+            {
+              "area": "那曲市"
+            }
+          ]
+        },
+        {
+          "city": "阿里地区",
+          "areas": [
+            {
+              "area": "普兰县"
+            },
+            {
+              "area": "札达县"
+            },
+            {
+              "area": "噶尔县"
+            },
+            {
+              "area": "日土县"
+            },
+            {
+              "area": "革吉县"
+            },
+            {
+              "area": "改则县"
+            },
+            {
+              "area": "措勤县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "陕西省",
+      "citys": [
+        {
+          "city": "西安市",
+          "areas": [
+            {
+              "area": "蓝田县"
+            },
+            {
+              "area": "周至县"
+            },
+            {
+              "area": "西安市"
+            }
+          ]
+        },
+        {
+          "city": "铜川市",
+          "areas": [
+            {
+              "area": "宜君县"
+            },
+            {
+              "area": "铜川市"
+            }
+          ]
+        },
+        {
+          "city": "宝鸡市",
+          "areas": [
+            {
+              "area": "岐山县"
+            },
+            {
+              "area": "扶风县"
+            },
+            {
+              "area": "眉县"
+            },
+            {
+              "area": "陇县"
+            },
+            {
+              "area": "千阳县"
+            },
+            {
+              "area": "麟游县"
+            },
+            {
+              "area": "凤县"
+            },
+            {
+              "area": "太白县"
+            },
+            {
+              "area": "宝鸡市"
+            }
+          ]
+        },
+        {
+          "city": "咸阳市",
+          "areas": [
+            {
+              "area": "三原县"
+            },
+            {
+              "area": "泾阳县"
+            },
+            {
+              "area": "乾县"
+            },
+            {
+              "area": "礼泉县"
+            },
+            {
+              "area": "永寿县"
+            },
+            {
+              "area": "长武县"
+            },
+            {
+              "area": "旬邑县"
+            },
+            {
+              "area": "淳化县"
+            },
+            {
+              "area": "武功县"
+            },
+            {
+              "area": "兴平市"
+            },
+            {
+              "area": "彬州市"
+            },
+            {
+              "area": "咸阳市"
+            }
+          ]
+        },
+        {
+          "city": "渭南市",
+          "areas": [
+            {
+              "area": "潼关县"
+            },
+            {
+              "area": "大荔县"
+            },
+            {
+              "area": "合阳县"
+            },
+            {
+              "area": "澄城县"
+            },
+            {
+              "area": "蒲城县"
+            },
+            {
+              "area": "白水县"
+            },
+            {
+              "area": "富平县"
+            },
+            {
+              "area": "韩城市"
+            },
+            {
+              "area": "华阴市"
+            },
+            {
+              "area": "渭南市"
+            }
+          ]
+        },
+        {
+          "city": "延安市",
+          "areas": [
+            {
+              "area": "延长县"
+            },
+            {
+              "area": "延川县"
+            },
+            {
+              "area": "志丹县"
+            },
+            {
+              "area": "吴起县"
+            },
+            {
+              "area": "甘泉县"
+            },
+            {
+              "area": "富县"
+            },
+            {
+              "area": "洛川县"
+            },
+            {
+              "area": "宜川县"
+            },
+            {
+              "area": "黄龙县"
+            },
+            {
+              "area": "黄陵县"
+            },
+            {
+              "area": "子长市"
+            },
+            {
+              "area": "延安市"
+            }
+          ]
+        },
+        {
+          "city": "汉中市",
+          "areas": [
+            {
+              "area": "城固县"
+            },
+            {
+              "area": "洋县"
+            },
+            {
+              "area": "西乡县"
+            },
+            {
+              "area": "勉县"
+            },
+            {
+              "area": "宁强县"
+            },
+            {
+              "area": "略阳县"
+            },
+            {
+              "area": "镇巴县"
+            },
+            {
+              "area": "留坝县"
+            },
+            {
+              "area": "佛坪县"
+            },
+            {
+              "area": "汉中市"
+            }
+          ]
+        },
+        {
+          "city": "榆林市",
+          "areas": [
+            {
+              "area": "府谷县"
+            },
+            {
+              "area": "靖边县"
+            },
+            {
+              "area": "定边县"
+            },
+            {
+              "area": "绥德县"
+            },
+            {
+              "area": "米脂县"
+            },
+            {
+              "area": "佳县"
+            },
+            {
+              "area": "吴堡县"
+            },
+            {
+              "area": "清涧县"
+            },
+            {
+              "area": "子洲县"
+            },
+            {
+              "area": "神木市"
+            },
+            {
+              "area": "榆林市"
+            }
+          ]
+        },
+        {
+          "city": "安康市",
+          "areas": [
+            {
+              "area": "汉阴县"
+            },
+            {
+              "area": "石泉县"
+            },
+            {
+              "area": "宁陕县"
+            },
+            {
+              "area": "紫阳县"
+            },
+            {
+              "area": "岚皋县"
+            },
+            {
+              "area": "平利县"
+            },
+            {
+              "area": "镇坪县"
+            },
+            {
+              "area": "白河县"
+            },
+            {
+              "area": "旬阳市"
+            },
+            {
+              "area": "安康市"
+            }
+          ]
+        },
+        {
+          "city": "商洛市",
+          "areas": [
+            {
+              "area": "洛南县"
+            },
+            {
+              "area": "丹凤县"
+            },
+            {
+              "area": "商南县"
+            },
+            {
+              "area": "山阳县"
+            },
+            {
+              "area": "镇安县"
+            },
+            {
+              "area": "柞水县"
+            },
+            {
+              "area": "商洛市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "甘肃省",
+      "citys": [
+        {
+          "city": "兰州市",
+          "areas": [
+            {
+              "area": "永登县"
+            },
+            {
+              "area": "皋兰县"
+            },
+            {
+              "area": "榆中县"
+            },
+            {
+              "area": "兰州市"
+            }
+          ]
+        },
+        {
+          "city": "金昌市",
+          "areas": [
+            {
+              "area": "永昌县"
+            },
+            {
+              "area": "金昌市"
+            }
+          ]
+        },
+        {
+          "city": "白银市",
+          "areas": [
+            {
+              "area": "靖远县"
+            },
+            {
+              "area": "会宁县"
+            },
+            {
+              "area": "景泰县"
+            },
+            {
+              "area": "白银市"
+            }
+          ]
+        },
+        {
+          "city": "天水市",
+          "areas": [
+            {
+              "area": "清水县"
+            },
+            {
+              "area": "秦安县"
+            },
+            {
+              "area": "甘谷县"
+            },
+            {
+              "area": "武山县"
+            },
+            {
+              "area": "张家川回族自治县"
+            },
+            {
+              "area": "天水市"
+            }
+          ]
+        },
+        {
+          "city": "武威市",
+          "areas": [
+            {
+              "area": "民勤县"
+            },
+            {
+              "area": "古浪县"
+            },
+            {
+              "area": "天祝藏族自治县"
+            },
+            {
+              "area": "武威市"
+            }
+          ]
+        },
+        {
+          "city": "张掖市",
+          "areas": [
+            {
+              "area": "肃南裕固族自治县"
+            },
+            {
+              "area": "民乐县"
+            },
+            {
+              "area": "临泽县"
+            },
+            {
+              "area": "高台县"
+            },
+            {
+              "area": "山丹县"
+            },
+            {
+              "area": "张掖市"
+            }
+          ]
+        },
+        {
+          "city": "平凉市",
+          "areas": [
+            {
+              "area": "泾川县"
+            },
+            {
+              "area": "灵台县"
+            },
+            {
+              "area": "崇信县"
+            },
+            {
+              "area": "庄浪县"
+            },
+            {
+              "area": "静宁县"
+            },
+            {
+              "area": "华亭市"
+            },
+            {
+              "area": "平凉市"
+            }
+          ]
+        },
+        {
+          "city": "酒泉市",
+          "areas": [
+            {
+              "area": "金塔县"
+            },
+            {
+              "area": "瓜州县"
+            },
+            {
+              "area": "肃北蒙古族自治县"
+            },
+            {
+              "area": "阿克塞哈萨克族自治县"
+            },
+            {
+              "area": "玉门市"
+            },
+            {
+              "area": "敦煌市"
+            },
+            {
+              "area": "酒泉市"
+            }
+          ]
+        },
+        {
+          "city": "庆阳市",
+          "areas": [
+            {
+              "area": "庆城县"
+            },
+            {
+              "area": "环县"
+            },
+            {
+              "area": "华池县"
+            },
+            {
+              "area": "合水县"
+            },
+            {
+              "area": "正宁县"
+            },
+            {
+              "area": "宁县"
+            },
+            {
+              "area": "镇原县"
+            },
+            {
+              "area": "庆阳市"
+            }
+          ]
+        },
+        {
+          "city": "定西市",
+          "areas": [
+            {
+              "area": "通渭县"
+            },
+            {
+              "area": "陇西县"
+            },
+            {
+              "area": "渭源县"
+            },
+            {
+              "area": "临洮县"
+            },
+            {
+              "area": "漳县"
+            },
+            {
+              "area": "岷县"
+            },
+            {
+              "area": "定西市"
+            }
+          ]
+        },
+        {
+          "city": "陇南市",
+          "areas": [
+            {
+              "area": "成县"
+            },
+            {
+              "area": "文县"
+            },
+            {
+              "area": "宕昌县"
+            },
+            {
+              "area": "康县"
+            },
+            {
+              "area": "西和县"
+            },
+            {
+              "area": "礼县"
+            },
+            {
+              "area": "徽县"
+            },
+            {
+              "area": "两当县"
+            },
+            {
+              "area": "陇南市"
+            }
+          ]
+        },
+        {
+          "city": "临夏回族自治州",
+          "areas": [
+            {
+              "area": "临夏市"
+            },
+            {
+              "area": "临夏县"
+            },
+            {
+              "area": "康乐县"
+            },
+            {
+              "area": "永靖县"
+            },
+            {
+              "area": "广河县"
+            },
+            {
+              "area": "和政县"
+            },
+            {
+              "area": "东乡族自治县"
+            },
+            {
+              "area": "积石山保安族东乡族撒拉族自治县"
+            }
+          ]
+        },
+        {
+          "city": "甘南藏族自治州",
+          "areas": [
+            {
+              "area": "合作市"
+            },
+            {
+              "area": "临潭县"
+            },
+            {
+              "area": "卓尼县"
+            },
+            {
+              "area": "舟曲县"
+            },
+            {
+              "area": "迭部县"
+            },
+            {
+              "area": "玛曲县"
+            },
+            {
+              "area": "碌曲县"
+            },
+            {
+              "area": "夏河县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "青海省",
+      "citys": [
+        {
+          "city": "西宁市",
+          "areas": [
+            {
+              "area": "大通回族土族自治县"
+            },
+            {
+              "area": "湟源县"
+            },
+            {
+              "area": "西宁市"
+            }
+          ]
+        },
+        {
+          "city": "海东市",
+          "areas": [
+            {
+              "area": "民和回族土族自治县"
+            },
+            {
+              "area": "互助土族自治县"
+            },
+            {
+              "area": "化隆回族自治县"
+            },
+            {
+              "area": "循化撒拉族自治县"
+            },
+            {
+              "area": "海东市"
+            }
+          ]
+        },
+        {
+          "city": "海北藏族自治州",
+          "areas": [
+            {
+              "area": "门源回族自治县"
+            },
+            {
+              "area": "祁连县"
+            },
+            {
+              "area": "海晏县"
+            },
+            {
+              "area": "刚察县"
+            }
+          ]
+        },
+        {
+          "city": "黄南藏族自治州",
+          "areas": [
+            {
+              "area": "同仁市"
+            },
+            {
+              "area": "尖扎县"
+            },
+            {
+              "area": "泽库县"
+            },
+            {
+              "area": "河南蒙古族自治县"
+            }
+          ]
+        },
+        {
+          "city": "海南藏族自治州",
+          "areas": [
+            {
+              "area": "共和县"
+            },
+            {
+              "area": "同德县"
+            },
+            {
+              "area": "贵德县"
+            },
+            {
+              "area": "兴海县"
+            },
+            {
+              "area": "贵南县"
+            }
+          ]
+        },
+        {
+          "city": "果洛藏族自治州",
+          "areas": [
+            {
+              "area": "玛沁县"
+            },
+            {
+              "area": "班玛县"
+            },
+            {
+              "area": "甘德县"
+            },
+            {
+              "area": "达日县"
+            },
+            {
+              "area": "久治县"
+            },
+            {
+              "area": "玛多县"
+            }
+          ]
+        },
+        {
+          "city": "玉树藏族自治州",
+          "areas": [
+            {
+              "area": "玉树市"
+            },
+            {
+              "area": "杂多县"
+            },
+            {
+              "area": "称多县"
+            },
+            {
+              "area": "治多县"
+            },
+            {
+              "area": "囊谦县"
+            },
+            {
+              "area": "曲麻莱县"
+            }
+          ]
+        },
+        {
+          "city": "海西蒙古族藏族自治州",
+          "areas": [
+            {
+              "area": "格尔木市"
+            },
+            {
+              "area": "德令哈市"
+            },
+            {
+              "area": "茫崖市"
+            },
+            {
+              "area": "乌兰县"
+            },
+            {
+              "area": "都兰县"
+            },
+            {
+              "area": "天峻县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "宁夏回族自治区",
+      "citys": [
+        {
+          "city": "银川市",
+          "areas": [
+            {
+              "area": "永宁县"
+            },
+            {
+              "area": "贺兰县"
+            },
+            {
+              "area": "灵武市"
+            },
+            {
+              "area": "银川市"
+            }
+          ]
+        },
+        {
+          "city": "石嘴山市",
+          "areas": [
+            {
+              "area": "平罗县"
+            },
+            {
+              "area": "石嘴山市"
+            }
+          ]
+        },
+        {
+          "city": "吴忠市",
+          "areas": [
+            {
+              "area": "盐池县"
+            },
+            {
+              "area": "同心县"
+            },
+            {
+              "area": "青铜峡市"
+            },
+            {
+              "area": "吴忠市"
+            }
+          ]
+        },
+        {
+          "city": "固原市",
+          "areas": [
+            {
+              "area": "西吉县"
+            },
+            {
+              "area": "隆德县"
+            },
+            {
+              "area": "泾源县"
+            },
+            {
+              "area": "彭阳县"
+            },
+            {
+              "area": "固原市"
+            }
+          ]
+        },
+        {
+          "city": "中卫市",
+          "areas": [
+            {
+              "area": "中宁县"
+            },
+            {
+              "area": "海原县"
+            },
+            {
+              "area": "中卫市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "新疆维吾尔自治区",
+      "citys": [
+        {
+          "city": "乌鲁木齐市",
+          "areas": [
+            {
+              "area": "天山区"
+            },
+            {
+              "area": "沙依巴克区"
+            },
+            {
+              "area": "新市区"
+            },
+            {
+              "area": "水磨沟区"
+            },
+            {
+              "area": "头屯河区"
+            },
+            {
+              "area": "达坂城区"
+            },
+            {
+              "area": "米东区"
+            },
+            {
+              "area": "乌鲁木齐县"
+            }
+          ]
+        },
+        {
+          "city": "克拉玛依市",
+          "areas": [
+            {
+              "area": "独山子区"
+            },
+            {
+              "area": "克拉玛依区"
+            },
+            {
+              "area": "白碱滩区"
+            },
+            {
+              "area": "乌尔禾区"
+            }
+          ]
+        },
+        {
+          "city": "吐鲁番市",
+          "areas": [
+            {
+              "area": "高昌区"
+            },
+            {
+              "area": "鄯善县"
+            },
+            {
+              "area": "托克逊县"
+            }
+
+          ]
+        },
+        {
+          "city": "哈密市",
+          "areas": [
+            {
+              "area": "伊州区"
+            },
+            {
+              "area": "巴里坤哈萨克自治县"
+            },
+            {
+              "area": "伊吾县"
+            }
+          ]
+        },
+        {
+          "city": "昌吉回族自治州",
+          "areas": [
+            {
+              "area": "昌吉市"
+            },
+            {
+              "area": "阜康市"
+            },
+            {
+              "area": "呼图壁县"
+            },
+            {
+              "area": "玛纳斯县"
+            },
+            {
+              "area": "奇台县"
+            },
+            {
+              "area": "吉木萨尔县"
+            },
+            {
+              "area": "木垒哈萨克自治县"
+            }
+          ]
+        },
+        {
+          "city": "博尔塔拉蒙古自治州",
+          "areas": [
+            {
+              "area": "博乐市"
+            },
+            {
+              "area": "阿拉山口市"
+            },
+            {
+              "area": "精河县"
+            },
+            {
+              "area": "温泉县"
+            }
+          ]
+        },
+        {
+          "city": "巴音郭楞蒙古自治州",
+          "areas": [
+            {
+              "area": "库尔勒市"
+            },
+            {
+              "area": "轮台县"
+            },
+            {
+              "area": "尉犁县"
+            },
+            {
+              "area": "若羌县"
+            },
+            {
+              "area": "且末县"
+            },
+            {
+              "area": "焉耆回族自治县"
+            },
+            {
+              "area": "和静县"
+            },
+            {
+              "area": "和硕县"
+            },
+            {
+              "area": "博湖县"
+            }
+          ]
+        },
+        {
+          "city": "阿克苏地区",
+          "areas": [
+            {
+              "area": "阿克苏市"
+            },
+            {
+              "area": "库车市"
+            },
+            {
+              "area": "温宿县"
+            },
+            {
+              "area": "沙雅县"
+            },
+            {
+              "area": "新和县"
+            },
+            {
+              "area": "拜城县"
+            },
+            {
+              "area": "乌什县"
+            },
+            {
+              "area": "阿瓦提县"
+            },
+            {
+              "area": "柯坪县"
+            }
+          ]
+        },
+        {
+          "city": "克孜勒苏柯尔克孜自治州",
+          "areas": [
+            {
+              "area": "阿图什市"
+            },
+            {
+              "area": "阿克陶县"
+            },
+            {
+              "area": "阿合奇县"
+            },
+            {
+              "area": "乌恰县"
+            }
+          ]
+        },
+        {
+          "city": "喀什地区",
+          "areas": [
+            {
+              "area": "喀什市"
+            },
+            {
+              "area": "疏附县"
+            },
+            {
+              "area": "疏勒县"
+            },
+            {
+              "area": "英吉沙县"
+            },
+            {
+              "area": "泽普县"
+            },
+            {
+              "area": "莎车县"
+            },
+            {
+              "area": "叶城县"
+            },
+            {
+              "area": "麦盖提县"
+            },
+            {
+              "area": "岳普湖县"
+            },
+            {
+              "area": "伽师县"
+            },
+            {
+              "area": "巴楚县"
+            },
+            {
+              "area": "塔什库尔干塔吉克自治县"
+            }
+          ]
+        },
+        {
+          "city": "和田地区",
+          "areas": [
+            {
+              "area": "和田市"
+            },
+            {
+              "area": "和田县"
+            },
+            {
+              "area": "墨玉县"
+            },
+            {
+              "area": "皮山县"
+            },
+            {
+              "area": "洛浦县"
+            },
+            {
+              "area": "策勒县"
+            },
+            {
+              "area": "于田县"
+            },
+            {
+              "area": "民丰县"
+            }
+          ]
+        },
+        {
+          "city": "伊犁哈萨克自治州",
+          "areas": [
+            {
+              "area": "伊宁市"
+            },
+            {
+              "area": "奎屯市"
+            },
+            {
+              "area": "霍尔果斯市"
+            },
+            {
+              "area": "伊宁县"
+            },
+            {
+              "area": "察布查尔锡伯自治县"
+            },
+            {
+              "area": "霍城县"
+            },
+            {
+              "area": "巩留县"
+            },
+            {
+              "area": "新源县"
+            },
+            {
+              "area": "昭苏县"
+            },
+            {
+              "area": "特克斯县"
+            },
+            {
+              "area": "尼勒克县"
+            }
+          ]
+        },
+        {
+          "city": "塔城地区",
+          "areas": [
+            {
+              "area": "塔城市"
+            },
+            {
+              "area": "乌苏市"
+            },
+            {
+              "area": "沙湾市"
+            },
+            {
+              "area": "额敏县"
+            },
+            {
+              "area": "托里县"
+            },
+            {
+              "area": "裕民县"
+            },
+            {
+              "area": "和布克赛尔蒙古自治县"
+            }
+          ]
+        },
+        {
+          "city": "阿勒泰地区",
+          "areas": [
+            {
+              "area": "阿勒泰市"
+            },
+            {
+              "area": "布尔津县"
+            },
+            {
+              "area": "富蕴县"
+            },
+            {
+              "area": "福海县"
+            },
+            {
+              "area": "哈巴河县"
+            },
+            {
+              "area": "青河县"
+            },
+            {
+              "area": "吉木乃县"
+            }
+          ]
+        },
+        {
+          "city": "自治区直辖县级行政区划",
+          "areas": [
+            {
+              "area": "石河子市"
+            },
+            {
+              "area": "阿拉尔市"
+            },
+            {
+              "area": "图木舒克市"
+            },
+            {
+              "area": "五家渠市"
+            },
+            {
+              "area": "北屯市"
+            },
+            {
+              "area": "铁门关市"
+            },
+            {
+              "area": "双河市"
+            },
+            {
+              "area": "可克达拉市"
+            },
+            {
+              "area": "昆玉市"
+            },
+            {
+              "area": "胡杨河市"
+            },
+            {
+              "area": "新星市"
+            },
+            {
+              "area": "白杨市"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "台湾省",
+      "citys": [
+        {
+          "city": "台北市",
+          "areas": [
+            {
+              "area": "台北市"
+            }
+          ]
+        },
+        {
+          "city": "新北市",
+          "areas": [
+            {
+              "area": "新北市"
+            }
+          ]
+        },
+        {
+          "city": "桃园市",
+          "areas": [
+            {
+              "area": "桃园市"
+            }
+          ]
+        },
+        {
+          "city": "台中市",
+          "areas": [
+            {
+              "area": "台中市"
+            }
+          ]
+        },
+        {
+          "city": "台南市",
+          "areas": [
+            {
+              "area": "台南市"
+            }
+          ]
+        },
+        {
+          "city": "高雄市",
+          "areas": [
+            {
+              "area": "高雄市"
+            }
+          ]
+        },
+        {
+          "city": "基隆市",
+          "areas": [
+            {
+              "area": "基隆市"
+            }
+          ]
+        },
+        {
+          "city": "新竹市",
+          "areas": [
+            {
+              "area": "新竹市"
+            }
+          ]
+        },
+        {
+          "city": "嘉义市",
+          "areas": [
+            {
+              "area": "嘉义市"
+            }
+          ]
+        },
+        {
+          "city": "新竹县",
+          "areas": [
+            {
+              "area": "新竹县"
+            }
+          ]
+        },
+        {
+          "city": "苗栗县",
+          "areas": [
+            {
+              "area": "苗栗县"
+            }
+          ]
+        },
+        {
+          "city": "彰化县",
+          "areas": [
+            {
+              "area": "彰化县"
+            }
+          ]
+        },
+        {
+          "city": "南投县",
+          "areas": [
+            {
+              "area": "南投县"
+            }
+          ]
+        },
+        {
+          "city": "云林县",
+          "areas": [
+            {
+              "area": "云林县"
+            }
+          ]
+        },
+        {
+          "city": "嘉义县",
+          "areas": [
+            {
+              "area": "嘉义县"
+            }
+          ]
+        },
+        {
+          "city": "屏东县",
+          "areas": [
+            {
+              "area": "屏东县"
+            }
+          ]
+        },
+        {
+          "city": "宜兰县",
+          "areas": [
+            {
+              "area": "宜兰县"
+            }
+          ]
+        },
+        {
+          "city": "花莲县",
+          "areas": [
+            {
+              "area": "花莲县"
+            }
+          ]
+        },
+        {
+          "city": "台东县",
+          "areas": [
+            {
+              "area": "台东县"
+            }
+          ]
+        },
+        {
+          "city": "澎湖县",
+          "areas": [
+            {
+              "area": "澎湖县"
+            }
+          ]
+        },
+        {
+          "city": "连江县",
+          "areas": [
+            {
+              "area": "连江县"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "香港特别行政区",
+      "citys": [
+        {
+          "city": "香港特别行政区",
+          "areas": [
+            {
+              "area": "香港特别行政区"
+            }
+          ]
+        }
+      ]
+    },
+    {
+      "province": "澳门特别行政区",
+      "citys": [
+        {
+          "city": "澳门特别行政区",
+          "areas": [
+            {
+              "area": "澳门特别行政区"
+            }
+          ]
+        }
+      ]
+    }
+  ]
\ No newline at end of file
diff --git a/assess-admin/src/test/java/com/gkhy/admin/RegionTest.java b/assess-admin/src/test/java/com/gkhy/admin/RegionTest.java
new file mode 100644
index 0000000..13a25d5
--- /dev/null
+++ b/assess-admin/src/test/java/com/gkhy/admin/RegionTest.java
@@ -0,0 +1,116 @@
+package com.gkhy.admin;
+
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.gkhy.assess.admin.GkhyAdminApplication;
+import com.gkhy.assess.system.domain.SysRegion;
+import com.gkhy.assess.system.service.SysRegionService;
+import com.gkhy.assess.system.service.impl.SysRegionServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.test.context.junit4.SpringRunner;
+import sun.swing.plaf.GTKKeybindings;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = GkhyAdminApplication.class)
+//@ActiveProfiles("dev")
+@Slf4j
+public class RegionTest {
+
+    @Autowired
+    private SysRegionService regionService;
+
+    //添加疆外数据
+    @Test
+    public void addRegion() throws IOException {
+        String path="F:\\kzy\\codes\\java\\smart_assess\\assess-admin\\src\\main\\resources\\region.json";
+        StringBuilder stringBuilder=new StringBuilder();
+        BufferedReader br=new BufferedReader(new FileReader(new File(path)));
+        String s=null;
+        while ((s=br.readLine())!=null){
+            stringBuilder.append(s);
+        }
+        br.close();
+        JSONArray jsonArray = JSONObject.parseArray(stringBuilder.toString());
+
+        for(Object obj : jsonArray){
+            JSONObject jsonObject= (JSONObject) obj;
+            String pro= (String) jsonObject.get("province");
+            SysRegion region=new SysRegion()
+                    .setName(pro)
+                    .setRegionType(1);
+            regionService.save(region);
+            List<JSONObject> citys= (List<JSONObject>) jsonObject.get("citys");
+            if(citys.size()==1){
+                continue;
+            }
+            List<SysRegion> childRegion=new ArrayList<>();
+            for(JSONObject cityObject:citys){
+                String cityName= (String) cityObject.get("city");
+                SysRegion region2=new SysRegion()
+                        .setName(cityName)
+                        .setRegionType(1)
+                        .setParentId(region.getId());
+                childRegion.add(region2);
+            }
+            regionService.saveBatch(childRegion);
+        }
+    }
+    //添加疆内数据
+    @Test
+    public void addRegion2() throws IOException {
+        String path="F:\\kzy\\codes\\java\\smart_assess\\assess-admin\\src\\main\\resources\\region.json";
+        StringBuilder stringBuilder=new StringBuilder();
+        BufferedReader br=new BufferedReader(new FileReader(new File(path)));
+        String s=null;
+        while ((s=br.readLine())!=null){
+            stringBuilder.append(s);
+        }
+        br.close();
+        JSONArray jsonArray = JSONObject.parseArray(stringBuilder.toString());
+
+        for(Object obj : jsonArray){
+            JSONObject jsonObject= (JSONObject) obj;
+            String pro= (String) jsonObject.get("province");
+            if(!pro.equalsIgnoreCase("新疆维吾尔自治区")){
+                continue;
+            }
+            List<JSONObject> citys= (List<JSONObject>) jsonObject.get("citys");
+            for(JSONObject cityObject:citys){
+                String cityName= (String) cityObject.get("city");
+                SysRegion region=new SysRegion()
+                        .setName(cityName)
+                        .setRegionType(0);
+                regionService.save(region);
+                List<JSONObject> areas= (List<JSONObject>) cityObject.get("areas");
+                List<SysRegion> childRegion=new ArrayList<>();
+                for(JSONObject areaObject:areas){
+                    String areaName= (String) areaObject.get("area");
+                    SysRegion region2=new SysRegion()
+                            .setName(areaName)
+                            .setRegionType(0)
+                            .setParentId(region.getId());
+                    childRegion.add(region2);
+                }
+                regionService.saveBatch(childRegion);
+            }
+
+        }
+
+
+
+    }
+}
diff --git a/assess-common/pom.xml b/assess-common/pom.xml
index 78cd94b..2e310ce 100644
--- a/assess-common/pom.xml
+++ b/assess-common/pom.xml
@@ -111,6 +111,11 @@
             <groupId>com.github.penggle</groupId>
             <artifactId>kaptcha</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/constant/CacheConstant.java b/assess-common/src/main/java/com/gkhy/assess/common/constant/CacheConstant.java
index 053462c..62cab57 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/constant/CacheConstant.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/constant/CacheConstant.java
@@ -13,6 +13,15 @@
 
     String CAPTCHA_CODE_KEY = "captcha_codes:";
 
+    String SYS_REGION_KEY ="sys_region";
+
+
+    /**
+     * 防重提交 redis key
+     */
+    String REPEAT_SUBMIT_KEY = "repeat_submit:";
+
+
 
 
 
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/domain/BaseEntity.java b/assess-common/src/main/java/com/gkhy/assess/common/domain/BaseEntity.java
index be277a8..ed74267 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/domain/BaseEntity.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/domain/BaseEntity.java
@@ -7,6 +7,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
@@ -15,6 +16,7 @@
 
 @Getter
 @Setter
+@Accessors(chain = true)
 @ApiModel(value = "baseEntity对象", description = "基础类")
 public class BaseEntity implements Serializable {
     private static final long serialVersionUID = 1L;
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/domain/PageDomain.java b/assess-common/src/main/java/com/gkhy/assess/common/domain/PageDomain.java
index e2c9f4d..f35ce52 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/domain/PageDomain.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/domain/PageDomain.java
@@ -1,7 +1,7 @@
 package com.gkhy.assess.common.domain;
 
-import cn.hutool.core.util.StrUtil;
-import org.apache.commons.lang3.StringUtils;
+
+import com.gkhy.assess.common.utils.StringUtils;
 
 public class PageDomain {
 
@@ -15,10 +15,10 @@
     private Boolean reasonable=true;
 
     public String getOrderBy(){
-        if(StrUtil.isEmpty(orderByColumn)){
+        if(StringUtils.isEmpty(orderByColumn)){
             return "";
         }
-        return StrUtil.toUnderlineCase(orderByColumn)+" "+isAsc;
+        return StringUtils.toUnderlineCase(orderByColumn)+" "+isAsc;
     }
 
     public Integer getPageNum() {
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/domain/vo/AccountVO.java b/assess-common/src/main/java/com/gkhy/assess/common/domain/vo/AccountVO.java
index 5ca29e7..f9ba2c5 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/domain/vo/AccountVO.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/domain/vo/AccountVO.java
@@ -1,5 +1,6 @@
 package com.gkhy.assess.common.domain.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -31,4 +32,8 @@
 
     @ApiModelProperty("生产的token,接口请求头字段: Authorization")
     private String token;
+
+    @ApiModelProperty("用户身份(0代表监管用户,1代表机构用户,2代表专家用户)")
+    private Integer identity;
+
 }
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/enums/AccessoryFileTypeEnum.java b/assess-common/src/main/java/com/gkhy/assess/common/enums/AccessoryFileTypeEnum.java
new file mode 100644
index 0000000..b413c40
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/enums/AccessoryFileTypeEnum.java
@@ -0,0 +1,38 @@
+package com.gkhy.assess.common.enums;
+
+/**
+ * 评估文件类型
+ *
+ */
+public enum AccessoryFileTypeEnum
+{
+    DEVICE_IMAGE(1, "评价机构项目现场勘验人员在主要装置前的合影照片"),
+    INVESTINGATION_IMAGE(2, "评价机构项目现场勘验照片"),
+    COMPANY_IMAGE(3, "评价机构项目现场勘验人员与企业陪同人员图片"),
+    INVESTINGATION_EAST_IMAGE(4, "预评价现场勘验照片-东"),
+    INVESTINGATION_SOUTH_IMAGE(5, "预评价现场勘验照片-南"),
+    INVESTINGATION_WEST_IMAGE(6, "预评价现场勘验照片-西"),
+    INVESTINGATION_NORTH_IMAGE(7, "预评价现场勘验照片-北"),
+    INVESTINGATION_VIDEO(8, "评价机构项目现场勘验视频"),
+    EXCODE(9, "二维码"),
+    PROARCHIVE_FILE(10, "安全评价过程控制记录文档附件");
+
+    private final Integer code;
+    private final String info;
+
+    AccessoryFileTypeEnum(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/enums/ApproveStatusEnum.java b/assess-common/src/main/java/com/gkhy/assess/common/enums/ApproveStatusEnum.java
index 8e1a4e3..36dcc40 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/enums/ApproveStatusEnum.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/enums/ApproveStatusEnum.java
@@ -6,7 +6,7 @@
  */
 public enum ApproveStatusEnum
 {
-    APPROVED(0, "审批通过"), APPROVING(1, "待审批"), FAIL(2, "未通过");
+    TEMPORARY(0, "暂存"),  APPROVING(1, "待审批"), APPROVED(2, "审批通过"),REJECT(3, "审批驳回"),DISCARD(4, "废弃");
 
     private final Integer code;
     private final String info;
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/enums/ExpertTypeEnum.java b/assess-common/src/main/java/com/gkhy/assess/common/enums/ExpertTypeEnum.java
new file mode 100644
index 0000000..3854482
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/enums/ExpertTypeEnum.java
@@ -0,0 +1,29 @@
+package com.gkhy.assess.common.enums;
+
+/**
+ * 专家类型
+ *
+ */
+public enum ExpertTypeEnum
+{
+    SAFETY_ASSESS(1, "安全评价"), INSPECTION(2, "检验检测");
+
+    private final Integer code;
+    private final String info;
+
+    ExpertTypeEnum(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/enums/RegionTypeEnum.java b/assess-common/src/main/java/com/gkhy/assess/common/enums/RegionTypeEnum.java
new file mode 100644
index 0000000..f790f53
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/enums/RegionTypeEnum.java
@@ -0,0 +1,29 @@
+package com.gkhy.assess.common.enums;
+
+/**
+ * 疆内疆外
+ *
+ */
+public enum RegionTypeEnum
+{
+    INSIDE(0, "疆内"), OUTSIDE(1, "疆外");
+
+    private final Integer code;
+    private final String info;
+
+    RegionTypeEnum(Integer code, String info)
+    {
+        this.code = code;
+        this.info = info;
+    }
+
+    public Integer getCode()
+    {
+        return code;
+    }
+
+    public String getInfo()
+    {
+        return info;
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatableFilter.java b/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatableFilter.java
new file mode 100644
index 0000000..c546e21
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatableFilter.java
@@ -0,0 +1,47 @@
+package com.gkhy.assess.common.filter;
+
+import com.gkhy.assess.common.utils.StringUtils;
+import org.springframework.http.MediaType;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * Repeatable 过滤器
+ *
+ */
+public class RepeatableFilter implements Filter
+{
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException
+    {
+
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException
+    {
+        ServletRequest requestWrapper = null;
+        if (request instanceof HttpServletRequest
+                && StringUtils.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE))
+        {
+            requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response);
+        }
+        if (null == requestWrapper)
+        {
+            chain.doFilter(request, response);
+        }
+        else
+        {
+            chain.doFilter(requestWrapper, response);
+        }
+    }
+
+    @Override
+    public void destroy()
+    {
+
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatedlyRequestWrapper.java b/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatedlyRequestWrapper.java
new file mode 100644
index 0000000..828e76c
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/filter/RepeatedlyRequestWrapper.java
@@ -0,0 +1,77 @@
+package com.gkhy.assess.common.filter;
+
+
+import com.gkhy.assess.common.utils.http.HttpHelper;
+
+import javax.servlet.ReadListener;
+import javax.servlet.ServletInputStream;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+/**
+ * 构建可重复读取inputStream的request
+ * 
+ * @author ruoyi
+ */
+public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
+{
+    private final byte[] body;
+
+    public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
+    {
+        super(request);
+        request.setCharacterEncoding("UTF-8");
+        response.setCharacterEncoding("UTF-8");
+
+        body = HttpHelper.getBodyString(request).getBytes("UTF-8");
+    }
+
+    @Override
+    public BufferedReader getReader() throws IOException
+    {
+        return new BufferedReader(new InputStreamReader(getInputStream()));
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        final ByteArrayInputStream bais = new ByteArrayInputStream(body);
+        return new ServletInputStream()
+        {
+            @Override
+            public int read() throws IOException
+            {
+                return bais.read();
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return body.length;
+            }
+
+            @Override
+            public boolean isFinished()
+            {
+                return false;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return false;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+
+            }
+        };
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/filter/XssFilter.java b/assess-common/src/main/java/com/gkhy/assess/common/filter/XssFilter.java
new file mode 100644
index 0000000..2318d32
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/filter/XssFilter.java
@@ -0,0 +1,70 @@
+package com.gkhy.assess.common.filter;
+
+import com.gkhy.assess.common.utils.StringUtils;
+import org.springframework.http.HttpMethod;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 防止XSS攻击的过滤器
+ *
+ */
+public class XssFilter implements Filter
+{
+    /**
+     * 排除链接
+     */
+    public List<String> excludes = new ArrayList<>();
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException
+    {
+        String tempExcludes = filterConfig.getInitParameter("excludes");
+        if (StringUtils.isNotBlank(tempExcludes))
+        {
+            String[] url = tempExcludes.split(",");
+            for (int i = 0; url != null && i < url.length; i++)
+            {
+                excludes.add(url[i]);
+            }
+        }
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException
+    {
+        HttpServletRequest req = (HttpServletRequest) request;
+        HttpServletResponse resp = (HttpServletResponse) response;
+        if (handleExcludeURL(req, resp))
+        {
+            chain.doFilter(request, response);
+            return;
+        }
+        XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request);
+        chain.doFilter(xssRequest, response);
+    }
+
+    private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response)
+    {
+        String url = request.getServletPath();
+        String method = request.getMethod();
+        // GET DELETE 不过滤
+        if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method))
+        {
+            return true;
+        }
+        return StringUtils.matches(url, excludes);
+    }
+
+    @Override
+    public void destroy()
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/filter/XssHttpServletRequestWrapper.java b/assess-common/src/main/java/com/gkhy/assess/common/filter/XssHttpServletRequestWrapper.java
new file mode 100644
index 0000000..4de0bb9
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/filter/XssHttpServletRequestWrapper.java
@@ -0,0 +1,111 @@
+package com.gkhy.assess.common.filter;
+
+import com.gkhy.assess.common.utils.StringUtils;
+import com.gkhy.assess.common.utils.html.EscapeUtil;
+import org.apache.commons.io.IOUtils;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+
+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;
+
+/**
+ * XSS过滤处理
+ *
+ */
+public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper
+{
+    /**
+     * @param request
+     */
+    public XssHttpServletRequestWrapper(HttpServletRequest request)
+    {
+        super(request);
+    }
+
+    @Override
+    public String[] getParameterValues(String name)
+    {
+        String[] values = super.getParameterValues(name);
+        if (values != null)
+        {
+            int length = values.length;
+            String[] escapesValues = new String[length];
+            for (int i = 0; i < length; i++)
+            {
+                // 防xss攻击和过滤前后空格
+                escapesValues[i] = EscapeUtil.clean(values[i]).trim();
+            }
+            return escapesValues;
+        }
+        return super.getParameterValues(name);
+    }
+
+    @Override
+    public ServletInputStream getInputStream() throws IOException
+    {
+        // 非json类型,直接返回
+        if (!isJsonRequest())
+        {
+            return super.getInputStream();
+        }
+
+        // 为空,直接返回
+        String json = IOUtils.toString(super.getInputStream(), "utf-8");
+        if (StringUtils.isBlank(json))
+        {
+            return super.getInputStream();
+        }
+
+        // xss过滤
+        json = EscapeUtil.clean(json).trim();
+        byte[] jsonBytes = json.getBytes("utf-8");
+        final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes);
+        return new ServletInputStream()
+        {
+            @Override
+            public boolean isFinished()
+            {
+                return true;
+            }
+
+            @Override
+            public boolean isReady()
+            {
+                return true;
+            }
+
+            @Override
+            public int available() throws IOException
+            {
+                return jsonBytes.length;
+            }
+
+            @Override
+            public void setReadListener(ReadListener readListener)
+            {
+            }
+
+            @Override
+            public int read() throws IOException
+            {
+                return bis.read();
+            }
+        };
+    }
+
+    /**
+     * 是否是Json请求
+     * 
+     * @param request
+     */
+    public boolean isJsonRequest()
+    {
+        String header = super.getHeader(HttpHeaders.CONTENT_TYPE);
+        return StringUtils.startWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE);
+    }
+}
\ No newline at end of file
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/ConvertUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/ConvertUtil.java
index 461c629..3e011ec 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/utils/ConvertUtil.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/ConvertUtil.java
@@ -1,6 +1,5 @@
 package com.gkhy.assess.common.utils;
 
-import cn.hutool.core.util.StrUtil;
 import org.apache.commons.lang3.ArrayUtils;
 
 import java.math.BigDecimal;
@@ -72,7 +71,7 @@
         }
 
         final String valueStr = toStr(value, null);
-        return StrUtil.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
+        return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
     }
 
     /**
@@ -112,7 +111,7 @@
             return ((Number) value).byteValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -163,7 +162,7 @@
             return ((Number) value).shortValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -210,7 +209,7 @@
             return (Number) value;
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -261,7 +260,7 @@
             return ((Number) value).intValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -319,7 +318,7 @@
      */
     public static Integer[] toIntArray(String split, String str)
     {
-        if (StrUtil.isEmpty(str))
+        if (StringUtils.isEmpty(str))
         {
             return new Integer[] {};
         }
@@ -342,7 +341,7 @@
      */
     public static Long[] toLongArray(String split, String str)
     {
-        if (StrUtil.isEmpty(str))
+        if (StringUtils.isEmpty(str))
         {
             return new Long[] {};
         }
@@ -403,7 +402,7 @@
             return ((Number) value).longValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -455,7 +454,7 @@
             return ((Number) value).doubleValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -507,7 +506,7 @@
             return ((Number) value).floatValue();
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -554,7 +553,7 @@
             return (Boolean) value;
         }
         String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -610,7 +609,7 @@
             return myE;
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -661,7 +660,7 @@
             return BigInteger.valueOf((Long) value);
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -720,7 +719,7 @@
             return new BigDecimal((Integer) value);
         }
         final String valueStr = toStr(value, null);
-        if (StrUtil.isEmpty(valueStr))
+        if (StringUtils.isEmpty(valueStr))
         {
             return defaultValue;
         }
@@ -806,7 +805,7 @@
      */
     public static String str(byte[] bytes, String charset)
     {
-        return str(bytes, StrUtil.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
+        return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
     }
 
     /**
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/JSONUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/JSONUtil.java
new file mode 100644
index 0000000..df809f3
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/JSONUtil.java
@@ -0,0 +1,182 @@
+package com.gkhy.assess.common.utils;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class JSONUtil {
+    public static final String DEFAULT_FAIL = "\"Parse failed\"";
+    private static final ObjectMapper objectMapper = new ObjectMapper();
+    private static final ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();
+
+    public static void marshal(File file, Object value) throws Exception
+    {
+        try
+        {
+            objectWriter.writeValue(file, value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static void marshal(OutputStream os, Object value) throws Exception
+    {
+        try
+        {
+            objectWriter.writeValue(os, value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static String marshal(Object value) throws Exception
+    {
+        try
+        {
+            return objectWriter.writeValueAsString(value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static byte[] marshalBytes(Object value) throws Exception
+    {
+        try
+        {
+            return objectWriter.writeValueAsBytes(value);
+        }
+        catch (JsonGenerationException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(File file, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(file, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(InputStream is, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(is, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(String str, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            return objectMapper.readValue(str, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+
+    public static <T> T unmarshal(byte[] bytes, Class<T> valueType) throws Exception
+    {
+        try
+        {
+            if (bytes == null)
+            {
+                bytes = new byte[0];
+            }
+            return objectMapper.readValue(bytes, 0, bytes.length, valueType);
+        }
+        catch (JsonParseException e)
+        {
+            throw new Exception(e);
+        }
+        catch (JsonMappingException e)
+        {
+            throw new Exception(e);
+        }
+        catch (IOException e)
+        {
+            throw new Exception(e);
+        }
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
index fec4f2d..cd30016 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
@@ -8,6 +8,7 @@
 import com.auth0.jwt.interfaces.DecodedJWT;
 import com.gkhy.assess.common.exception.ApiException;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.crypto.hash.Md5Hash;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -111,5 +112,19 @@
     }
 
 
+    /**
+     * 密码加密
+     * @param username
+     * @param password
+     * @param salt
+     * @return
+     */
+    public static String encryptPassword(String username,String password,String salt){
+        if(salt==null){
+            salt="";
+        }
+        return new Md5Hash(username+password+salt).toHex();
+    }
+
 
 }
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/SqlUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/SqlUtil.java
index 765af77..e23134d 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/utils/SqlUtil.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/SqlUtil.java
@@ -1,7 +1,5 @@
 package com.gkhy.assess.common.utils;
 
-
-import cn.hutool.core.util.StrUtil;
 import com.gkhy.assess.common.exception.UtilException;
 
 import java.util.List;
@@ -33,11 +31,11 @@
      */
     public static String escapeOrderBySql(String value)
     {
-        if (StrUtil.isNotEmpty(value) && !isValidOrderBySql(value))
+        if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value))
         {
             throw new UtilException("参数不符合规范,不能进行查询");
         }
-        if (StrUtil.length(value) > ORDER_BY_MAX_LENGTH)
+        if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH)
         {
             throw new UtilException("参数已超过最大限制,不能进行查询");
         }
@@ -57,14 +55,14 @@
      */
     public static void filterKeyword(String value)
     {
-        if (StrUtil.isEmpty(value))
+        if (StringUtils.isEmpty(value))
         {
             return;
         }
-        List<String> sqlKeywords = StrUtil.split(SQL_REGEX, "\\|");
+        List<String> sqlKeywords = StringUtils.split(SQL_REGEX, "\\|");
         for (String sqlKeyword : sqlKeywords)
         {
-            if (StrUtil.indexOfIgnoreCase(value, sqlKeyword) > -1)
+            if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1)
             {
                 throw new UtilException("参数存在SQL注入风险");
             }
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/StringUtils.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/StringUtils.java
new file mode 100644
index 0000000..fa2ea40
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/StringUtils.java
@@ -0,0 +1,49 @@
+package com.gkhy.assess.common.utils;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import org.springframework.util.AntPathMatcher;
+
+import java.util.List;
+
+public class StringUtils extends StrUtil {
+
+    /**
+     * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串
+     *
+     * @param str 指定字符串
+     * @param strs 需要检查的字符串数组
+     * @return 是否匹配
+     */
+    public static boolean matches(String str, List<String> strs)
+    {
+        if (isBlank(str) || ObjectUtil.isEmpty(strs))
+        {
+            return false;
+        }
+        for (String pattern : strs)
+        {
+            if (isMatch(pattern, str))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 判断url是否与规则配置:
+     * ? 表示单个字符;
+     * * 表示一层路径内的任意字符串,不可跨层级;
+     * ** 表示任意层路径;
+     *
+     * @param pattern 匹配规则
+     * @param url 需要匹配的url
+     * @return
+     */
+    public static boolean isMatch(String pattern, String url)
+    {
+        AntPathMatcher matcher = new AntPathMatcher();
+        return matcher.match(pattern, url);
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/html/EscapeUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/html/EscapeUtil.java
new file mode 100644
index 0000000..04df21b
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/html/EscapeUtil.java
@@ -0,0 +1,167 @@
+package com.gkhy.assess.common.utils.html;
+
+import com.gkhy.assess.common.utils.StringUtils;
+
+/**
+ * 转义和反转义工具类
+ * 
+ * @author ruoyi
+ */
+public class EscapeUtil
+{
+    public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)";
+
+    private static final char[][] TEXT = new char[64][];
+
+    static
+    {
+        for (int i = 0; i < 64; i++)
+        {
+            TEXT[i] = new char[] { (char) i };
+        }
+
+        // special HTML characters
+        TEXT['\''] = "&#039;".toCharArray(); // 单引号
+        TEXT['"'] = "&#34;".toCharArray(); // 双引号
+        TEXT['&'] = "&#38;".toCharArray(); // &符
+        TEXT['<'] = "&#60;".toCharArray(); // 小于号
+        TEXT['>'] = "&#62;".toCharArray(); // 大于号
+    }
+
+    /**
+     * 转义文本中的HTML字符为安全的字符
+     * 
+     * @param text 被转义的文本
+     * @return 转义后的文本
+     */
+    public static String escape(String text)
+    {
+        return encode(text);
+    }
+
+    /**
+     * 还原被转义的HTML特殊字符
+     * 
+     * @param content 包含转义符的HTML内容
+     * @return 转换后的字符串
+     */
+    public static String unescape(String content)
+    {
+        return decode(content);
+    }
+
+    /**
+     * 清除所有HTML标签,但是不删除标签内的内容
+     * 
+     * @param content 文本
+     * @return 清除标签后的文本
+     */
+    public static String clean(String content)
+    {
+        return new HTMLFilter().filter(content);
+    }
+
+    /**
+     * Escape编码
+     * 
+     * @param text 被编码的文本
+     * @return 编码后的字符
+     */
+    private static String encode(String text)
+    {
+        if (StringUtils.isEmpty(text))
+        {
+            return StringUtils.EMPTY;
+        }
+
+        final StringBuilder tmp = new StringBuilder(text.length() * 6);
+        char c;
+        for (int i = 0; i < text.length(); i++)
+        {
+            c = text.charAt(i);
+            if (c < 256)
+            {
+                tmp.append("%");
+                if (c < 16)
+                {
+                    tmp.append("0");
+                }
+                tmp.append(Integer.toString(c, 16));
+            }
+            else
+            {
+                tmp.append("%u");
+                if (c <= 0xfff)
+                {
+                    // issue#I49JU8@Gitee
+                    tmp.append("0");
+                }
+                tmp.append(Integer.toString(c, 16));
+            }
+        }
+        return tmp.toString();
+    }
+
+    /**
+     * Escape解码
+     * 
+     * @param content 被转义的内容
+     * @return 解码后的字符串
+     */
+    public static String decode(String content)
+    {
+        if (StringUtils.isEmpty(content))
+        {
+            return content;
+        }
+
+        StringBuilder tmp = new StringBuilder(content.length());
+        int lastPos = 0, pos = 0;
+        char ch;
+        while (lastPos < content.length())
+        {
+            pos = content.indexOf("%", lastPos);
+            if (pos == lastPos)
+            {
+                if (content.charAt(pos + 1) == 'u')
+                {
+                    ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16);
+                    tmp.append(ch);
+                    lastPos = pos + 6;
+                }
+                else
+                {
+                    ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16);
+                    tmp.append(ch);
+                    lastPos = pos + 3;
+                }
+            }
+            else
+            {
+                if (pos == -1)
+                {
+                    tmp.append(content.substring(lastPos));
+                    lastPos = content.length();
+                }
+                else
+                {
+                    tmp.append(content.substring(lastPos, pos));
+                    lastPos = pos;
+                }
+            }
+        }
+        return tmp.toString();
+    }
+
+    public static void main(String[] args)
+    {
+        String html = "<script>alert(1);</script>";
+        String escape = EscapeUtil.escape(html);
+        // String html = "<scr<script>ipt>alert(\"XSS\")</scr<script>ipt>";
+        // String html = "<123";
+        // String html = "123>";
+        System.out.println("clean: " + EscapeUtil.clean(html));
+        System.out.println("escape: " + escape);
+        System.out.println("unescape: " + EscapeUtil.unescape(escape));
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/html/HTMLFilter.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/html/HTMLFilter.java
new file mode 100644
index 0000000..e82e083
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/html/HTMLFilter.java
@@ -0,0 +1,566 @@
+package com.gkhy.assess.common.utils.html;
+
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * HTML过滤器,用于去除XSS漏洞隐患。
+ *
+ * @author ruoyi
+ */
+public final class HTMLFilter
+{
+    /**
+     * regex flag union representing /si modifiers in php
+     **/
+    private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL;
+    private static final Pattern P_COMMENTS = Pattern.compile("<!--(.*?)-->", Pattern.DOTALL);
+    private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI);
+    private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL);
+    private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI);
+    private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI);
+    private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI);
+    private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI);
+    private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI);
+    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("(>|^)([^<]+?)(<|$)", Pattern.DOTALL);
+    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("\"");
+    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("<>");
+
+    // @xxx could grow large... maybe use sesat's ReferenceMap
+    private static final ConcurrentMap<String, Pattern> P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>();
+    private static final ConcurrentMap<String, Pattern> P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>();
+
+    /**
+     * set of allowed html elements, along with allowed attributes for each element
+     **/
+    private final Map<String, List<String>> vAllowed;
+    /**
+     * counts of open tags for each (allowable) html element
+     **/
+    private final Map<String, Integer> vTagCounts = new HashMap<>();
+
+    /**
+     * html elements which must always be self-closing (e.g. "<img />")
+     **/
+    private final String[] vSelfClosingTags;
+    /**
+     * html elements which must always have separate opening and closing tags (e.g. "<b></b>")
+     **/
+    private final String[] vNeedClosingTags;
+    /**
+     * set of disallowed html elements
+     **/
+    private final String[] vDisallowed;
+    /**
+     * attributes which should be checked for valid protocols
+     **/
+    private final String[] vProtocolAtts;
+    /**
+     * allowed protocols
+     **/
+    private final String[] vAllowedProtocols;
+    /**
+     * tags which should be removed if they contain no content (e.g. "<b></b>" or "<b />")
+     **/
+    private final String[] vRemoveBlanks;
+    /**
+     * entities allowed within html markup
+     **/
+    private final String[] vAllowedEntities;
+    /**
+     * flag determining whether comments are allowed in input String.
+     */
+    private final boolean stripComment;
+    private final boolean encodeQuotes;
+    /**
+     * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "<b text </b>"
+     * becomes "<b> text </b>"). If set to false, unbalanced angle brackets will be html escaped.
+     */
+    private final boolean alwaysMakeTags;
+
+    /**
+     * Default constructor.
+     */
+    public HTMLFilter()
+    {
+        vAllowed = new HashMap<>();
+
+        final ArrayList<String> a_atts = new ArrayList<>();
+        a_atts.add("href");
+        a_atts.add("target");
+        vAllowed.put("a", a_atts);
+
+        final ArrayList<String> img_atts = new ArrayList<>();
+        img_atts.add("src");
+        img_atts.add("width");
+        img_atts.add("height");
+        img_atts.add("alt");
+        vAllowed.put("img", img_atts);
+
+        final ArrayList<String> no_atts = new ArrayList<>();
+        vAllowed.put("b", no_atts);
+        vAllowed.put("strong", no_atts);
+        vAllowed.put("i", no_atts);
+        vAllowed.put("em", no_atts);
+
+        vSelfClosingTags = new String[] { "img" };
+        vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" };
+        vDisallowed = new String[] {};
+        vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp.
+        vProtocolAtts = new String[] { "src", "href" };
+        vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" };
+        vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" };
+        stripComment = true;
+        encodeQuotes = true;
+        alwaysMakeTags = false;
+    }
+
+    /**
+     * Map-parameter configurable constructor.
+     *
+     * @param conf map containing configuration. keys match field names.
+     */
+    @SuppressWarnings("unchecked")
+    public HTMLFilter(final Map<String, Object> conf)
+    {
+
+        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";
+
+        vAllowed = Collections.unmodifiableMap((HashMap<String, List<String>>) conf.get("vAllowed"));
+        vSelfClosingTags = (String[]) conf.get("vSelfClosingTags");
+        vNeedClosingTags = (String[]) conf.get("vNeedClosingTags");
+        vDisallowed = (String[]) conf.get("vDisallowed");
+        vAllowedProtocols = (String[]) conf.get("vAllowedProtocols");
+        vProtocolAtts = (String[]) conf.get("vProtocolAtts");
+        vRemoveBlanks = (String[]) conf.get("vRemoveBlanks");
+        vAllowedEntities = (String[]) conf.get("vAllowedEntities");
+        stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true;
+        encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true;
+        alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true;
+    }
+
+    private void reset()
+    {
+        vTagCounts.clear();
+    }
+
+    // ---------------------------------------------------------------
+    // my versions of some PHP library functions
+    public static String chr(final int decimal)
+    {
+        return String.valueOf((char) decimal);
+    }
+
+    public static String htmlSpecialChars(final String s)
+    {
+        String result = s;
+        result = regexReplace(P_AMP, "&amp;", result);
+        result = regexReplace(P_QUOTE, "&quot;", result);
+        result = regexReplace(P_LEFT_ARROW, "&lt;", result);
+        result = regexReplace(P_RIGHT_ARROW, "&gt;", result);
+        return result;
+    }
+
+    // ---------------------------------------------------------------
+
+    /**
+     * given a user submitted input String, filter out any invalid or restricted html.
+     *
+     * @param input text (i.e. submitted by a user) than may contain html
+     * @return "clean" version of input, with only valid, whitelisted html elements allowed
+     */
+    public String filter(final String input)
+    {
+        reset();
+        String s = input;
+
+        s = escapeComments(s);
+
+        s = balanceHTML(s);
+
+        s = checkTags(s);
+
+        s = processRemoveBlanks(s);
+
+        // s = validateEntities(s);
+
+        return s;
+    }
+
+    public boolean isAlwaysMakeTags()
+    {
+        return alwaysMakeTags;
+    }
+
+    public boolean isStripComments()
+    {
+        return stripComment;
+    }
+
+    private String escapeComments(final String s)
+    {
+        final Matcher m = P_COMMENTS.matcher(s);
+        final StringBuffer buf = new StringBuffer();
+        if (m.find())
+        {
+            final String match = m.group(1); // (.*?)
+            m.appendReplacement(buf, Matcher.quoteReplacement("<!--" + htmlSpecialChars(match) + "-->"));
+        }
+        m.appendTail(buf);
+
+        return buf.toString();
+    }
+
+    private String balanceHTML(String s)
+    {
+        if (alwaysMakeTags)
+        {
+            //
+            // try and form html
+            //
+            s = regexReplace(P_END_ARROW, "", s);
+            // 不追加结束标签
+            s = regexReplace(P_BODY_TO_END, "<$1>", s);
+            s = regexReplace(P_XML_CONTENT, "$1<$2", s);
+
+        }
+        else
+        {
+            //
+            // escape stray brackets
+            //
+            s = regexReplace(P_STRAY_LEFT_ARROW, "&lt;$1", s);
+            s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2&gt;<", s);
+
+            //
+            // the last regexp causes '<>' entities to appear
+            // (we need to do a lookahead assertion so that the last bracket can
+            // be used in the next pass of the regexp)
+            //
+            s = regexReplace(P_BOTH_ARROWS, "", s);
+        }
+
+        return s;
+    }
+
+    private String checkTags(String s)
+    {
+        Matcher m = P_TAGS.matcher(s);
+
+        final StringBuffer buf = new StringBuffer();
+        while (m.find())
+        {
+            String replaceStr = m.group(1);
+            replaceStr = processTag(replaceStr);
+            m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr));
+        }
+        m.appendTail(buf);
+
+        // these get tallied in processTag
+        // (remember to reset before subsequent calls to filter method)
+        final StringBuilder sBuilder = new StringBuilder(buf.toString());
+        for (String key : vTagCounts.keySet())
+        {
+            for (int ii = 0; ii < vTagCounts.get(key); ii++)
+            {
+                sBuilder.append("</").append(key).append(">");
+            }
+        }
+        s = sBuilder.toString();
+
+        return s;
+    }
+
+    private String processRemoveBlanks(final String s)
+    {
+        String result = s;
+        for (String tag : vRemoveBlanks)
+        {
+            if (!P_REMOVE_PAIR_BLANKS.containsKey(tag))
+            {
+                P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?></" + tag + ">"));
+            }
+            result = regexReplace(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(P_REMOVE_SELF_BLANKS.get(tag), "", result);
+        }
+
+        return result;
+    }
+
+    private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s)
+    {
+        Matcher m = regex_pattern.matcher(s);
+        return m.replaceAll(replacement);
+    }
+
+    private String processTag(final String s)
+    {
+        // ending tags
+        Matcher m = P_END_TAG.matcher(s);
+        if (m.find())
+        {
+            final String name = m.group(1).toLowerCase();
+            if (allowed(name))
+            {
+                if (!inArray(name, vSelfClosingTags))
+                {
+                    if (vTagCounts.containsKey(name))
+                    {
+                        vTagCounts.put(name, vTagCounts.get(name) - 1);
+                        return "</" + name + ">";
+                    }
+                }
+            }
+        }
+
+        // starting tags
+        m = P_START_TAG.matcher(s);
+        if (m.find())
+        {
+            final String name = m.group(1).toLowerCase();
+            final String body = m.group(2);
+            String ending = m.group(3);
+
+            // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" );
+            if (allowed(name))
+            {
+                final StringBuilder params = new StringBuilder();
+
+                final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body);
+                final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body);
+                final List<String> paramNames = new ArrayList<>();
+                final List<String> paramValues = new ArrayList<>();
+                while (m2.find())
+                {
+                    paramNames.add(m2.group(1)); // ([a-z0-9]+)
+                    paramValues.add(m2.group(3)); // (.*?)
+                }
+                while (m3.find())
+                {
+                    paramNames.add(m3.group(1)); // ([a-z0-9]+)
+                    paramValues.add(m3.group(3)); // ([^\"\\s']+)
+                }
+
+                String paramName, paramValue;
+                for (int ii = 0; ii < paramNames.size(); ii++)
+                {
+                    paramName = paramNames.get(ii).toLowerCase();
+                    paramValue = paramValues.get(ii);
+
+                    // debug( "paramName='" + paramName + "'" );
+                    // debug( "paramValue='" + paramValue + "'" );
+                    // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) );
+
+                    if (allowedAttribute(name, paramName))
+                    {
+                        if (inArray(paramName, vProtocolAtts))
+                        {
+                            paramValue = processParamProtocol(paramValue);
+                        }
+                        params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\"");
+                    }
+                }
+
+                if (inArray(name, vSelfClosingTags))
+                {
+                    ending = " /";
+                }
+
+                if (inArray(name, vNeedClosingTags))
+                {
+                    ending = "";
+                }
+
+                if (ending == null || ending.length() < 1)
+                {
+                    if (vTagCounts.containsKey(name))
+                    {
+                        vTagCounts.put(name, vTagCounts.get(name) + 1);
+                    }
+                    else
+                    {
+                        vTagCounts.put(name, 1);
+                    }
+                }
+                else
+                {
+                    ending = " /";
+                }
+                return "<" + name + params + ending + ">";
+            }
+            else
+            {
+                return "";
+            }
+        }
+
+        // comments
+        m = P_COMMENT.matcher(s);
+        if (!stripComment && m.find())
+        {
+            return "<" + m.group() + ">";
+        }
+
+        return "";
+    }
+
+    private String processParamProtocol(String s)
+    {
+        s = decodeEntities(s);
+        final Matcher m = P_PROTOCOL.matcher(s);
+        if (m.find())
+        {
+            final String protocol = m.group(1);
+            if (!inArray(protocol, vAllowedProtocols))
+            {
+                // bad protocol, turn into local anchor link instead
+                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);
+        while (m.find())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.decode(match).intValue();
+            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())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        buf = new StringBuffer();
+        m = P_ENCODE.matcher(s);
+        while (m.find())
+        {
+            final String match = m.group(1);
+            final int decimal = Integer.valueOf(match, 16).intValue();
+            m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal)));
+        }
+        m.appendTail(buf);
+        s = buf.toString();
+
+        s = validateEntities(s);
+        return s;
+    }
+
+    private String validateEntities(final String s)
+    {
+        StringBuffer buf = new StringBuffer();
+
+        // validate entities throughout the string
+        Matcher m = P_VALID_ENTITIES.matcher(s);
+        while (m.find())
+        {
+            final String one = m.group(1); // ([^&;]*)
+            final String two = m.group(2); // (?=(;|&|$))
+            m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two)));
+        }
+        m.appendTail(buf);
+
+        return encodeQuotes(buf.toString());
+    }
+
+    private String encodeQuotes(final String s)
+    {
+        if (encodeQuotes)
+        {
+            StringBuffer buf = new StringBuffer();
+            Matcher m = P_VALID_QUOTES.matcher(s);
+            while (m.find())
+            {
+                final String one = m.group(1); // (>|^)
+                final String two = m.group(2); // ([^<]+?)
+                final String three = m.group(3); // (<|$)
+                // 不替换双引号为&quot;,防止json格式无效 regexReplace(P_QUOTE, "&quot;", two)
+                m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three));
+            }
+            m.appendTail(buf);
+            return buf.toString();
+        }
+        else
+        {
+            return s;
+        }
+    }
+
+    private String checkEntity(final String preamble, final String term)
+    {
+
+        return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&amp;" + preamble;
+    }
+
+    private boolean isValidEntity(final String entity)
+    {
+        return inArray(entity, vAllowedEntities);
+    }
+
+    private static boolean inArray(final String s, final String[] array)
+    {
+        for (String item : array)
+        {
+            if (item != null && item.equals(s))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean allowed(final String name)
+    {
+        return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed);
+    }
+
+    private boolean allowedAttribute(final String name, final String paramName)
+    {
+        return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName));
+    }
+}
\ No newline at end of file
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpHelper.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpHelper.java
new file mode 100644
index 0000000..ea7edb9
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpHelper.java
@@ -0,0 +1,55 @@
+package com.gkhy.assess.common.utils.http;
+
+import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.servlet.ServletRequest;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 通用http工具封装
+ *
+ */
+public class HttpHelper
+{
+    private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class);
+
+    public static String getBodyString(ServletRequest request)
+    {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try (InputStream inputStream = request.getInputStream())
+        {
+            reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
+            String line = "";
+            while ((line = reader.readLine()) != null)
+            {
+                sb.append(line);
+            }
+        }
+        catch (IOException e)
+        {
+            LOGGER.warn("getBodyString出现问题!");
+        }
+        finally
+        {
+            if (reader != null)
+            {
+                try
+                {
+                    reader.close();
+                }
+                catch (IOException e)
+                {
+                    LOGGER.error(ExceptionUtils.getMessage(e));
+                }
+            }
+        }
+        return sb.toString();
+    }
+}
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpUtils.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpUtils.java
new file mode 100644
index 0000000..b697f1e
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/http/HttpUtils.java
@@ -0,0 +1,265 @@
+package com.gkhy.assess.common.utils.http;
+
+import com.gkhy.assess.common.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.X509Certificate;
+
+/**
+ * 通用http发送方法
+ * 
+ * @author ruoyi
+ */
+public class HttpUtils
+{
+    private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url)
+    {
+        return sendGet(url, StringUtils.EMPTY);
+    }
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param)
+    {
+        return sendGet(url, param, "UTF-8");
+    }
+
+    /**
+     * 向指定 URL 发送GET方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @param contentType 编码类型
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendGet(String url, String param, String contentType)
+    {
+        StringBuilder result = new StringBuilder();
+        BufferedReader in = null;
+        try
+        {
+            String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
+            log.info("sendGet - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection connection = realUrl.openConnection();
+            connection.setRequestProperty("accept", "*/*");
+            connection.setRequestProperty("connection", "Keep-Alive");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            connection.connect();
+            in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (Exception ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    /**
+     * 向指定 URL 发送POST方法的请求
+     *
+     * @param url 发送请求的 URL
+     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @return 所代表远程资源的响应结果
+     */
+    public static String sendPost(String url, String param)
+    {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try
+        {
+            log.info("sendPost - {}", url);
+            URL realUrl = new URL(url);
+            URLConnection conn = realUrl.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            String line;
+            while ((line = in.readLine()) != null)
+            {
+                result.append(line);
+            }
+            log.info("recv - {}", result);
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        }
+        finally
+        {
+            try
+            {
+                if (out != null)
+                {
+                    out.close();
+                }
+                if (in != null)
+                {
+                    in.close();
+                }
+            }
+            catch (IOException ex)
+            {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendSSLPost(String url, String param)
+    {
+        StringBuilder result = new StringBuilder();
+        String urlNameString = url + "?" + param;
+        try
+        {
+            log.info("sendSSLPost - {}", urlNameString);
+            SSLContext sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            URL console = new URL(urlNameString);
+            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            conn.setRequestProperty("contentType", "utf-8");
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            BufferedReader br = new BufferedReader(new InputStreamReader(is));
+            String ret = "";
+            while ((ret = br.readLine()) != null)
+            {
+                if (ret != null && !"".equals(ret.trim()))
+                {
+                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
+                }
+            }
+            log.info("recv - {}", result);
+            conn.disconnect();
+            br.close();
+        }
+        catch (ConnectException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+        }
+        catch (SocketTimeoutException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        }
+        catch (IOException e)
+        {
+            log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+        }
+        catch (Exception e)
+        {
+            log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+        }
+        return result.toString();
+    }
+
+    private static class TrustAnyTrustManager implements X509TrustManager
+    {
+        @Override
+        public void checkClientTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public void checkServerTrusted(X509Certificate[] chain, String authType)
+        {
+        }
+
+        @Override
+        public X509Certificate[] getAcceptedIssuers()
+        {
+            return new X509Certificate[] {};
+        }
+    }
+
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier
+    {
+        @Override
+        public boolean verify(String hostname, SSLSession session)
+        {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/validate/AgencyGroup.java b/assess-common/src/main/java/com/gkhy/assess/common/validate/AgencyGroup.java
index 7ea4634..3be4707 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/validate/AgencyGroup.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/validate/AgencyGroup.java
@@ -1,7 +1,9 @@
 package com.gkhy.assess.common.validate;
 
+import javax.validation.groups.Default;
+
 /**
  * 机构校验分组
  */
-public interface AgencyGroup {
+public interface AgencyGroup extends Default {
 }
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/validate/ExpertGroup.java b/assess-common/src/main/java/com/gkhy/assess/common/validate/ExpertGroup.java
index fe24b92..3ee9c05 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/validate/ExpertGroup.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/validate/ExpertGroup.java
@@ -1,7 +1,9 @@
 package com.gkhy.assess.common.validate;
 
+import javax.validation.groups.Default;
+
 /**
  * 专家校验分组
  */
-public interface ExpertGroup {
+public interface ExpertGroup extends Default {
 }
diff --git a/assess-common/src/main/java/com/gkhy/assess/common/validate/MonitorGroup.java b/assess-common/src/main/java/com/gkhy/assess/common/validate/MonitorGroup.java
new file mode 100644
index 0000000..3fde1bf
--- /dev/null
+++ b/assess-common/src/main/java/com/gkhy/assess/common/validate/MonitorGroup.java
@@ -0,0 +1,9 @@
+package com.gkhy.assess.common.validate;
+
+import javax.validation.groups.Default;
+
+/**
+ * 监管用户校验分组
+ */
+public interface MonitorGroup extends Default {
+}
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/aop/LogAspect.java b/assess-framework/src/main/java/com/gkhy/assess/framework/aop/LogAspect.java
index 41fed63..f810eb2 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/aop/LogAspect.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/aop/LogAspect.java
@@ -1,9 +1,9 @@
 package com.gkhy.assess.framework.aop;
 
-import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.URLUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.json.JSONObject;
+import com.gkhy.assess.common.utils.StringUtils;
 import com.gkhy.assess.system.utils.ShiroUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
@@ -54,7 +54,7 @@
         StringBuffer requestURL = request.getRequestURL();
         JSONObject webLog = new JSONObject();
         String urlStr = request.getRequestURL().toString();
-        webLog.put("basePath",StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
+        webLog.put("basePath", StringUtils.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
         webLog.put("ip", ServletUtil.getClientIP(request,null));
         webLog.put("method",request.getMethod());
         Object params=getParameter(method, joinPoint.getArgs());
@@ -111,7 +111,7 @@
             if (requestParam != null) {
                 Map<String, Object> map = new HashMap<>();
                 String key = parameters[i].getName();
-                if (StrUtil.isNotEmpty(requestParam.value())) {
+                if (StringUtils.isNotEmpty(requestParam.value())) {
                     key = requestParam.value();
                 }
                 map.put(key, args[i]);
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/config/ApplicationConfig.java b/assess-framework/src/main/java/com/gkhy/assess/framework/config/ApplicationConfig.java
index 88c51df..579768a 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/config/ApplicationConfig.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/config/ApplicationConfig.java
@@ -1,6 +1,9 @@
 package com.gkhy.assess.framework.config;
 
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Conditional;
@@ -10,6 +13,8 @@
 import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
 import org.springframework.web.filter.CorsFilter;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.TimeZone;
 
 /**
@@ -24,15 +29,33 @@
 @MapperScan("com.gkhy.**.mapper")
 public class ApplicationConfig
 {
+
+    @Value("${spring.jackson.date-format:yyyy-MM-dd HH:mm:ss}")
+    private String pattern;
+
     /**
      * 时区配置
      */
+//    @Bean
+//    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
+//    {
+//        return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
+//    }
+
     @Bean
-    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
-    {
-        return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
+    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
+        return builder -> {
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
+
+            //返回时间数据序列化
+            builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(formatter));
+            //接收时间数据反序列化
+            builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(formatter));
+            builder.timeZone(TimeZone.getDefault());
+        };
     }
 
+
     @Bean
     public CorsFilter corsFilter() {
         final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/config/FilterConfig.java b/assess-framework/src/main/java/com/gkhy/assess/framework/config/FilterConfig.java
new file mode 100644
index 0000000..94d83f8
--- /dev/null
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/config/FilterConfig.java
@@ -0,0 +1,58 @@
+package com.gkhy.assess.framework.config;
+
+import com.gkhy.assess.common.filter.RepeatableFilter;
+import com.gkhy.assess.common.filter.XssFilter;
+import com.gkhy.assess.common.utils.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.DispatcherType;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Filter配置
+ *
+ */
+@Configuration
+public class FilterConfig
+{
+    @Value("${xss.excludes}")
+    private String excludes;
+
+    @Value("${xss.urlPatterns}")
+    private String urlPatterns;
+//
+//    @SuppressWarnings({ "rawtypes", "unchecked" })
+//    @Bean
+//    @ConditionalOnProperty(value = "xss.enabled", havingValue = "true")
+//    public FilterRegistrationBean xssFilterRegistration()
+//    {
+//        FilterRegistrationBean registration = new FilterRegistrationBean();
+//        registration.setDispatcherTypes(DispatcherType.REQUEST);
+//        registration.setFilter(new XssFilter());
+//        registration.addUrlPatterns(String.valueOf(StringUtils.split(urlPatterns, ",")));
+//        registration.setName("xssFilter");
+//        registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE);
+//        Map<String, String> initParameters = new HashMap<String, String>();
+//        initParameters.put("excludes", excludes);
+//        registration.setInitParameters(initParameters);
+//        return registration;
+//    }
+
+    @SuppressWarnings({ "rawtypes", "unchecked" })
+    @Bean
+    public FilterRegistrationBean someFilterRegistration()
+    {
+        FilterRegistrationBean registration = new FilterRegistrationBean();
+        registration.setFilter(new RepeatableFilter());
+        registration.addUrlPatterns("/*");
+        registration.setName("repeatableFilter");
+        registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE);
+        return registration;
+    }
+
+}
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/config/MyWebMvcConfig.java b/assess-framework/src/main/java/com/gkhy/assess/framework/config/MyWebMvcConfig.java
index 9ce2f10..b03009d 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/config/MyWebMvcConfig.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/config/MyWebMvcConfig.java
@@ -1,6 +1,7 @@
 package com.gkhy.assess.framework.config;
 
 import com.gkhy.assess.framework.interceptor.LogInterceptor;
+import com.gkhy.assess.framework.interceptor.RepeatSubmitInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;
@@ -13,11 +14,14 @@
 
 @Configuration
 public class MyWebMvcConfig implements WebMvcConfigurer {
-    @Value("${image.root_path}")
-    private String uploadRootPath;
+    @Value("${image.upload_path}")
+    private String uploadPath;
 
     @Autowired
     private LogInterceptor logInterceptor;
+
+    @Autowired
+    private RepeatSubmitInterceptor repeatSubmitInterceptor;
 
     /**
      * 配置图片访问路径
@@ -26,13 +30,14 @@
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         String systemDir=System.getProperty("user.dir");
-        registry.addResourceHandler("/api/assess_file/**").addResourceLocations("file:"+systemDir+ File.separator+uploadRootPath+File.separator);
+        registry.addResourceHandler("/upload/**").addResourceLocations("file:"+systemDir+ File.separator+uploadPath+File.separator);
       }
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(logInterceptor)
                 .addPathPatterns("/**");
+        registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**");
 
     }
 }
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/exception/GlobalExceptionHandler.java b/assess-framework/src/main/java/com/gkhy/assess/framework/exception/GlobalExceptionHandler.java
index d4b5872..633d963 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/exception/GlobalExceptionHandler.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/exception/GlobalExceptionHandler.java
@@ -30,7 +30,7 @@
 
     @ExceptionHandler(value = ApiException.class)
     public CommonResult handle(ApiException e){
-        writeExceptionLogFile(e);
+      //  writeExceptionLogFile(e);
         if(e.getErrorCode()!=null){
             return CommonResult.failed(e.getErrorCode());
         }
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/LogInterceptor.java b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/LogInterceptor.java
index 03740b0..33eef52 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/LogInterceptor.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/LogInterceptor.java
@@ -13,7 +13,6 @@
 /**
  * @ClassName LogInterceptor
  * @Description TODO
- * @Date 2021/7/5 14:56
  **/
 @Component
 public class LogInterceptor implements HandlerInterceptor {
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/RepeatSubmitInterceptor.java b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/RepeatSubmitInterceptor.java
new file mode 100644
index 0000000..5ff614b
--- /dev/null
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/RepeatSubmitInterceptor.java
@@ -0,0 +1,51 @@
+package com.gkhy.assess.framework.interceptor;
+
+import com.gkhy.assess.common.annotation.RepeatSubmit;
+import com.gkhy.assess.common.exception.ApiException;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.lang.reflect.Method;
+
+/**
+ * 防止器重复提交拦截
+ *
+ */
+@Component
+public abstract class RepeatSubmitInterceptor implements HandlerInterceptor
+{
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
+    {
+        if (handler instanceof HandlerMethod)
+        {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            Method method = handlerMethod.getMethod();
+            RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
+            if (annotation != null)
+            {
+                if (this.isRepeatSubmit(request, annotation))
+                {
+                    throw new ApiException(annotation.message());
+                }
+            }
+            return true;
+        }
+        else
+        {
+            return true;
+        }
+    }
+
+    /**
+     * 验证是否重复提交由子类实现具体的防重复提交的规则
+     *
+     * @param request 请求对象
+     * @param annotation 防复注解
+     * @return 结果
+     */
+    public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) throws Exception;
+}
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/SameUrlDataInterceptor.java b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/SameUrlDataInterceptor.java
new file mode 100644
index 0000000..4da74f7
--- /dev/null
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/interceptor/SameUrlDataInterceptor.java
@@ -0,0 +1,106 @@
+package com.gkhy.assess.framework.interceptor;
+
+import com.alibaba.fastjson.JSONObject;
+import com.gkhy.assess.common.annotation.RepeatSubmit;
+import com.gkhy.assess.common.constant.CacheConstant;
+import com.gkhy.assess.common.filter.RepeatedlyRequestWrapper;
+import com.gkhy.assess.common.utils.JwtTokenUtil;
+import com.gkhy.assess.common.utils.RedisUtils;
+import com.gkhy.assess.common.utils.StringUtils;
+import com.gkhy.assess.common.utils.http.HttpHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 判断请求url和数据是否和上一次相同,
+ * 如果和上次相同,则是重复提交表单。 有效时间为10秒内。
+ * 
+ * @author ruoyi
+ */
+@Component
+public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
+{
+    public final String REPEAT_PARAMS = "repeatParams";
+
+    public final String REPEAT_TIME = "repeatTime";
+
+
+    @Autowired
+    private RedisUtils redisUtils;
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) throws Exception {
+        String nowParams = "";
+        if (request instanceof RepeatedlyRequestWrapper)
+        {
+            RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request;
+            nowParams = HttpHelper.getBodyString(repeatedlyRequest);
+        }
+
+        // body参数为空,获取Parameter的数据
+        if (StringUtils.isBlank(nowParams))
+        {
+            nowParams = JSONObject.toJSONString(request.getParameterMap());
+        }
+        Map<String, Object> nowDataMap = new HashMap<String, Object>();
+        nowDataMap.put(REPEAT_PARAMS, nowParams);
+        nowDataMap.put(REPEAT_TIME, System.currentTimeMillis());
+
+        // 请求地址(作为存放cache的key值)
+        String url = request.getRequestURI();
+
+        // 唯一值(没有消息头则使用请求地址)
+        String submitKey = StringUtils.trimToEmpty(request.getHeader(JwtTokenUtil.USER_LOGIN_TOKEN));
+
+        // 唯一标识(指定key + url + 消息头)
+        String cacheRepeatKey = CacheConstant.REPEAT_SUBMIT_KEY + url + submitKey;
+
+        Object sessionObj = redisUtils.get(cacheRepeatKey);
+        if (sessionObj != null)
+        {
+            Map<String, Object> sessionMap = (Map<String, Object>) sessionObj;
+            if (sessionMap.containsKey(url))
+            {
+                Map<String, Object> preDataMap = (Map<String, Object>) sessionMap.get(url);
+                if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap, annotation.interval()))
+                {
+                    return true;
+                }
+            }
+        }
+        Map<String, Object> cacheMap = new HashMap<String, Object>();
+        cacheMap.put(url, nowDataMap);
+        redisUtils.set(cacheRepeatKey, cacheMap, annotation.interval(), TimeUnit.MILLISECONDS);
+        return false;
+    }
+
+    /**
+     * 判断参数是否相同
+     */
+    private boolean compareParams(Map<String, Object> nowMap, Map<String, Object> preMap)
+    {
+        String nowParams = (String) nowMap.get(REPEAT_PARAMS);
+        String preParams = (String) preMap.get(REPEAT_PARAMS);
+        return nowParams.equals(preParams);
+    }
+
+    /**
+     * 判断两次间隔时间
+     */
+    private boolean compareTime(Map<String, Object> nowMap, Map<String, Object> preMap, int interval)
+    {
+        long time1 = (Long) nowMap.get(REPEAT_TIME);
+        long time2 = (Long) preMap.get(REPEAT_TIME);
+        if ((time1 - time2) < interval)
+        {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/ShiroConfig.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/ShiroConfig.java
index eccc136..98bb8c4 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/ShiroConfig.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/ShiroConfig.java
@@ -62,25 +62,44 @@
         chain.addPathDefinition("/swagger-resources/**","anon");
         chain.addPathDefinition("/doc.html", "anon");
         chain.addPathDefinition("/v2/api-docs", "anon");
+        chain.addPathDefinition("/favicon.ico","anon");
         chain.addPathDefinition("/static/**", "anon");
+        // 配置shiro错误从定向问题 /error 路径的错误处理
         chain.addPathDefinition("/error", "anon");
+        chain.addPathDefinition("/upload/**", "anon");
 
         chain.addPathDefinition("/account/login","anon");
-      //  chain.addPathDefinition("/api/account/login","anon");
         chain.addPathDefinition("/logout", "logout");
 
-        chain.addPathDefinition("/system/notice/noticeList","anon");
-        chain.addPathDefinition("/system/notice/getNoticeById","anon");
+        chain.addPathDefinition("/notice/noticeList","anon");
+        chain.addPathDefinition("/notice/getNoticeById","anon");
+        chain.addPathDefinition("/law/lawList","anon");
+        chain.addPathDefinition("/law/getLawById","anon");
+        chain.addPathDefinition("/agency/agencyList","anon");
+        chain.addPathDefinition("/agency/getAgencyById","anon");
 
-        chain.addPathDefinition("/system/law/lawList","anon");
-        chain.addPathDefinition("/system/law/getLawById","anon");
+        chain.addPathDefinition("/system/dictType/getDictDataByType","anon");
 
-        chain.addPathDefinition("/system/agency/agencyList","anon");
-        chain.addPathDefinition("/system/agency/getAgencyById","anon");
 
-        chain.addPathDefinition("/system/user/agencyRegister","anon");
+
+        chain.addPathDefinition("/system/agency/checkAgencyNameUnique","anon");
+        chain.addPathDefinition("/system/user/addAgency","anon");
+        chain.addPathDefinition("/system/user/checkUserNameUnique","anon");
+        chain.addPathDefinition("/system/user/checkPhoneUnique","anon");
         chain.addPathDefinition("/system/captcha/captchaImage","anon");
 
+        chain.addPathDefinition("/system/region/regionTree","anon");
+
+        chain.addPathDefinition("/system/common/uploadFile","anon");
+        chain.addPathDefinition("/system/common/removeFile","anon");
+
+
+
+
+
+
+
+
         //除了以上的请求外,其它请求都需要登录
         chain.addPathDefinition("/**", "jwtFilter,authc"); // 需登录才能访问
 
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java
index 84bdc4d..a56af8e 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java
@@ -1,6 +1,7 @@
 package com.gkhy.assess.framework.shiro.realm;
 
 import com.gkhy.assess.common.enums.UserIdentityEnum;
+import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.RequestUtil;
 import com.gkhy.assess.common.utils.SpringContextUtils;
 import com.gkhy.assess.framework.shiro.JwtToken;
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
index a6676c0..31cf00c 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysLoginService.java
@@ -1,6 +1,8 @@
 package com.gkhy.assess.framework.shiro.service;
 
 import com.gkhy.assess.common.constant.CacheConstant;
+import com.gkhy.assess.common.enums.ApproveStatusEnum;
+import com.gkhy.assess.common.enums.UserIdentityEnum;
 import com.gkhy.assess.common.enums.UserStatusEnum;
 import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.JwtTokenUtil;
@@ -34,13 +36,18 @@
 
     public void validUser(SysUser sysUser){
         if(sysUser==null) {
-            throw new ApiException("用户不存在");
+            throw new AuthenticationException("用户不存在");
         }
         if(UserStatusEnum.DELETED.getCode().equals(sysUser.getDelFlag())){
-            throw new ApiException("用户已被删除");
+            throw new AuthenticationException("用户已被删除");
         }
         if(UserStatusEnum.DISABLE.getCode().equals(sysUser.getStatus())){
-            throw new ApiException("用户已被停用");
+            throw new AuthenticationException("用户已被停用");
+        }
+        if(UserIdentityEnum.AGENCY.getCode().equals(sysUser.getIdentity())){
+            if(!ApproveStatusEnum.APPROVED.getCode().equals(sysUser.getState())){
+                throw new AuthenticationException("机构账户审批还未通过");
+            }
         }
     }
 
@@ -72,15 +79,17 @@
      * @return
      */
     public boolean jwtTokenRefresh(String jwtToken,String username,String passWord){
-        String key=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken));
-        String cacheToken= (String) redisUtils.get(key);
+        String tokenKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(jwtToken));
+        String userKey=redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+username);
+        String cacheToken= (String) redisUtils.get(tokenKey);
         if(StringUtils.isNotEmpty(cacheToken)){
             // 校验token有效性
             if(!JwtTokenUtil.verify(cacheToken,username,passWord)){
                 String newToken=JwtTokenUtil.sign(username,passWord);
                 // 设置超时时间
-                redisUtils.set(key,newToken);
-                redisUtils.expire(key,JwtTokenUtil.EXPIRATION*2/1000);
+                redisUtils.set(tokenKey,newToken);
+                redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000);
+                redisUtils.expire(userKey,(JwtTokenUtil.EXPIRATION*2/1000)+2);
             }
             return true;
         }
diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysPasswordService.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysPasswordService.java
index c8e60a8..70cdb3a 100644
--- a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysPasswordService.java
+++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/service/SysPasswordService.java
@@ -1,10 +1,10 @@
 package com.gkhy.assess.framework.shiro.service;
 
 import com.gkhy.assess.common.constant.CacheConstant;
-import com.gkhy.assess.common.exception.ApiException;
+import com.gkhy.assess.common.utils.JwtTokenUtil;
 import com.gkhy.assess.common.utils.RedisUtils;
 import com.gkhy.assess.system.domain.SysUser;
-import org.apache.shiro.crypto.hash.Md5Hash;
+import org.apache.shiro.authc.AuthenticationException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -21,20 +21,20 @@
     @Value(value = "${user.password.maxRetryCount:5}")
     private Integer maxRetryCount;
 
-    public void validate(SysUser user, String password){
+    public void validate(SysUser user, String password) throws AuthenticationException {
         String username=user.getUsername();
         String key= redisUtils.generateKey(CacheConstant.SYS_LOGIN_RECORD_CACHE+":"+username);
-        AtomicInteger retryCount= (AtomicInteger) redisUtils.get(key);
+        Integer retryCount= (Integer) redisUtils.get(key);
         if(retryCount==null){
-            retryCount=new AtomicInteger(0);
-            redisUtils.set(key,retryCount);
+            retryCount=0;
         }
-        if(retryCount.incrementAndGet()>maxRetryCount){
-            throw new ApiException("登录次数已达上限");
+        ++retryCount;
+        if(retryCount>maxRetryCount){
+            throw new AuthenticationException("登录次数已达上限,5分钟之后再试");
         }
         if(!matches(user,password)){
-            redisUtils.set(key,retryCount);
-            throw new ApiException("登录密码错误");
+            redisUtils.set(key,retryCount,60*5);//5分钟后释放
+            throw new AuthenticationException("登录密码错误");
         }else{
             redisUtils.del(key);
         }
@@ -42,11 +42,9 @@
     }
 
     public boolean matches(SysUser sysUser,String newPassword){
-        return sysUser.getPassword().equals(encryptPassword(sysUser.getUsername(),newPassword,sysUser.getSalt()));
+        return sysUser.getPassword().equals(JwtTokenUtil.encryptPassword(sysUser.getUsername(),newPassword,sysUser.getSalt()));
     }
 
-    public String encryptPassword(String username,String password,String salt){
-        return new Md5Hash(username+password+salt).toHex();
-    }
+
 
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAgency.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAgency.java
index 72be32f..51943af 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAgency.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAgency.java
@@ -6,14 +6,21 @@
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.gkhy.assess.common.domain.BaseEntity;
+import com.gkhy.assess.common.validate.AgencyGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
+import org.hibernate.validator.constraints.Length;
+import org.springframework.format.annotation.DateTimeFormat;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 
@@ -31,6 +38,7 @@
 @Setter
 @TableName("sys_agency")
 @ApiModel(value = "SysAgency对象", description = "机构表")
+@Accessors(chain = true)
 @JsonInclude(NON_NULL)
 public class SysAgency extends BaseEntity {
 
@@ -39,34 +47,40 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+
     @NotBlank(message = "机构名称不能为空")
     @ApiModelProperty("机构名称")
     @TableField("name")
     private String name;
+
 
     @NotBlank(message = "社会信用代码不能为空")
     @ApiModelProperty(value = "社会信用代码",required = true)
     @TableField("credit_code")
     private String creditCode;
 
+
     @NotNull(message = "机构属性不能为空")
     @ApiModelProperty(value = "机构属性(0疆内,1疆外,默认0)",required = true)
     @TableField("attribute")
     private Integer attribute;
 
+
     @ApiModelProperty("省")
     @TableField("province")
     private String province;
+
 
     @NotBlank(message = "市不能为空")
     @ApiModelProperty(value = "市",required = true)
     @TableField("city")
     private String city;
 
-    @NotBlank(message = "区不能为空")
+  //  @NotBlank(message = "区不能为空")
     @ApiModelProperty(value = "区",required = true)
     @TableField("district")
     private String district;
+
 
     @NotBlank(message = "经营地址不能为空")
     @ApiModelProperty(value = "经营地址",required = true)
@@ -77,65 +91,84 @@
     @TableField("web")
     private String web;
 
+
     @NotBlank(message = "法定代表人不能为空")
     @ApiModelProperty(value = "法定代表人",required = true)
     @TableField("legal_person")
     private String legalPerson;
 
+
     @NotBlank(message = "法人电话不能为空")
+    @Length(min = 11, max = 11, message = "手机号只能为11位")
     @ApiModelProperty(value = "法人电话",required = true)
     @TableField("legal_phone")
     private String legalPhone;
+
 
     @NotBlank(message = "机构负责人不能为空")
     @ApiModelProperty(value = "机构负责人",required = true)
     @TableField("manager")
     private String manager;
 
+
     @NotBlank(message = "负责人电话不能为空")
+    @Length(min = 11, max = 11, message = "手机号只能为11位")
     @ApiModelProperty(value = "负责人电话",required = true)
     @TableField("manager_phone")
     private String managerPhone;
+
 
     @NotBlank(message = "资质证书编号不能为空")
     @ApiModelProperty(value = "资质证书编号",required = true)
     @TableField("cert_number")
     private String certNumber;
 
-    @NotBlank(message = "发证日期不能为空")
+
+    @NotNull(message = "发证日期不能为空")
     @ApiModelProperty(value = "发证日期",required = true)
     @TableField("issue_date")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime issueDate;
 
-    @NotBlank(message = "有效日期不能为空")
+
+    @NotNull(message = "有效日期不能为空")
     @ApiModelProperty(value = "有效日期",required = true)
     @TableField("valid_date")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private LocalDateTime validDate;
+
 
     @NotBlank(message = "固定资产总值不能为空")
     @ApiModelProperty(value = "固定资产总值",required = true)
     @TableField("asset_value")
     private String assetValue;
 
+
     @NotBlank(message = "工作场所建筑面积不能为空")
     @ApiModelProperty(value = "工作场所建筑面积",required = true)
     @TableField("work_area")
     private String workArea;
+
 
     @NotBlank(message = "档案室面积不能为空")
     @ApiModelProperty(value = "档案室面积",required = true)
     @TableField("archive_area")
     private String archiveArea;
 
+
     @NotBlank(message = "注册地址不能为空")
     @ApiModelProperty(value = "注册地址",required = true)
     @TableField("reg_address")
     private String regAddress;
 
+
     @NotBlank(message = "业务范围不能为空")
-    @ApiModelProperty(value = "业务范围",required = true)
+    @ApiModelProperty(value = "业务范围,字典id,多个逗号隔开",required = true)
     @TableField("business")
     private String business;
+
 
     @NotBlank(message = "机构信息上报表存放路径不能为空")
     @ApiModelProperty(value = "机构信息上报表存放路径",required = true)
@@ -146,5 +179,16 @@
     @TableField("del_flag")
     private Integer delFlag;
 
+    @ApiModelProperty("是否公示(0代表公示,1代表不公示,默认0)")
+    @TableField("publication")
+    private Integer publication;
+
+    @ApiModelProperty(value = "业务范围,字典对应的名称")
+    @TableField(exist = false)
+    private List<String> businessNames;
+
+    @ApiModelProperty(value = "注册用户")
+    @TableField(exist = false)
+    private SysUser user;
 
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAttach.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAttach.java
index 2283d1a..33ec092 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAttach.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysAttach.java
@@ -28,7 +28,7 @@
 @Getter
 @Setter
 @TableName("sys_attach")
-@ApiModel(value = "SysAttach对象", description = "系统配置表")
+@ApiModel(value = "SysAttach对象", description = "系统上传文件表,用户信息相关的")
 @JsonInclude(NON_NULL)
 public class SysAttach implements Serializable {
 
@@ -52,8 +52,8 @@
     @TableField("type")
     private Integer type;
 
-    @NotBlank(message = "类型不能为空")
-    @ApiModelProperty(value = "用户id",required = true)
+
+    @ApiModelProperty(value = "用户id")
     @TableField("user_id")
     private Long userId;
 
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictData.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictData.java
index fe72085..b4be289 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictData.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictData.java
@@ -7,6 +7,7 @@
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.gkhy.assess.common.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -14,6 +15,8 @@
 import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
 
 /**
  * <p>
@@ -27,6 +30,7 @@
 @Setter
 @TableName("sys_dict_data")
 @ApiModel(value = "SysDictData对象", description = "字典数据表")
+@JsonInclude(NON_NULL)
 public class SysDictData extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictType.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictType.java
index 1f02521..0c57758 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictType.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysDictType.java
@@ -7,13 +7,17 @@
 import java.io.Serializable;
 import java.time.LocalDateTime;
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.gkhy.assess.common.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
 
 /**
  * <p>
@@ -27,6 +31,8 @@
 @Setter
 @TableName("sys_dict_type")
 @ApiModel(value = "SysDictType对象", description = "字典类型表")
+@Accessors(chain = true)
+@JsonInclude(NON_NULL)
 public class SysDictType extends BaseEntity {
 
     private static final long serialVersionUID = 1L;
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertClassify.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertClassify.java
new file mode 100644
index 0000000..a5a603e
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertClassify.java
@@ -0,0 +1,60 @@
+package com.gkhy.assess.system.domain;
+
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.gkhy.assess.common.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
+
+/**
+ * <p>
+ * 系统专家分类表
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Getter
+@Setter
+@TableName("sys_expert_classify")
+@ApiModel(value = "SysExpertClassify对象", description = "系统专家分类表")
+@JsonInclude(NON_NULL)
+public class SysExpertClassify extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    @TableId(value = "classify_id", type = IdType.AUTO)
+    private Long classifyId;
+
+    @NotBlank(message = "分类名称不能为空")
+    @ApiModelProperty(value = "分类名称",required = true)
+    @TableField("classify_name")
+    private String classifyName;
+
+    @ApiModelProperty("父id")
+    @TableField("parent_id")
+    private Long parentId;
+
+    @ApiModelProperty("删除标志(0代表存在,1代表删除,默认0)")
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @ApiModelProperty("子分类")
+    @TableField(exist = false)
+    private List<SysExpertClassify> children;
+
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertInfo.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertInfo.java
new file mode 100644
index 0000000..969c2aa
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysExpertInfo.java
@@ -0,0 +1,180 @@
+package com.gkhy.assess.system.domain;
+
+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 java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.experimental.Accessors;
+
+import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
+
+/**
+ * <p>
+ * 系统专家信息表
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Getter
+@Setter
+@TableName("sys_expert_info")
+@Accessors(chain = true)
+@ApiModel(value = "SysExpertInfo对象", description = "系统专家信息表")
+@JsonInclude(NON_NULL)
+public class SysExpertInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("主键")
+    @TableId(value = "expert_id", type = IdType.AUTO)
+    private Long expertId;
+
+    @ApiModelProperty("专家名称")
+    @TableField("name")
+    private String name;
+
+    @ApiModelProperty("性别(0男,1女,2未知,默认2)")
+    @TableField("sex")
+    private Integer sex;
+
+    @ApiModelProperty("类别id")
+    @TableField("big_classify")
+    private Long bigClassify;
+
+    @ApiModelProperty("类别id")
+    @TableField("small_classify")
+    private Long smallClassify;
+
+    @ApiModelProperty("出生日期")
+    @TableField("birthday")
+    private LocalDateTime birthday;
+
+    @ApiModelProperty("手机号")
+    @TableField("phone")
+    private String phone;
+
+    @ApiModelProperty("职称")
+    @TableField("title")
+    private String title;
+
+    @ApiModelProperty("电子照片")
+    @TableField("electronic_photo")
+    private String electronicPhoto;
+
+    @ApiModelProperty("身份证号码")
+    @TableField("id_card")
+    private String idCard;
+
+    @ApiModelProperty("在职状态")
+    @TableField("duty_status")
+    private Integer dutyStatus;
+
+    @ApiModelProperty("公司名称")
+    @TableField("company_name")
+    private String companyName;
+
+    @ApiModelProperty("公司地址")
+    @TableField("company_address")
+    private String companyAddress;
+
+    @ApiModelProperty("部门名称")
+    @TableField("dept_name")
+    private String deptName;
+
+    @ApiModelProperty("职务")
+    @TableField("job")
+    private String job;
+
+    @ApiModelProperty("公司电话")
+    @TableField("company_telephone")
+    private String companyTelephone;
+
+    @ApiModelProperty("传真")
+    @TableField("fax_num")
+    private String faxNum;
+
+    @ApiModelProperty("邮箱")
+    @TableField("email")
+    private String email;
+
+    @ApiModelProperty("毕业学校")
+    @TableField("graduation_school")
+    private String graduationSchool;
+
+    @ApiModelProperty("学历")
+    @TableField("degree")
+    private String degree;
+
+    @ApiModelProperty("专业")
+    @TableField("speciality")
+    private String speciality;
+
+    @ApiModelProperty("当前专业")
+    @TableField("current_profession")
+    private String currentProfession;
+
+    @ApiModelProperty("支撑安全")
+    @TableField("support_direction_safety")
+    private String supportDirectionSafety;
+
+    @ApiModelProperty("支撑预防")
+    @TableField("support_direction_prevention")
+    private String supportDirectionPrevention;
+
+    @ApiModelProperty("支持应急")
+    @TableField("support_direction_emergency")
+    private String supportDirectionEmergency;
+
+    @ApiModelProperty("简述")
+    @TableField("resume_key")
+    private String resumeKey;
+
+    @TableField("paper_situation_key")
+    private String paperSituationKey;
+
+    @TableField("reward_key")
+    private String rewardKey;
+
+    @TableField("achievement_key")
+    private String achievementKey;
+
+    @TableField("personal_opinion_key")
+    private String personalOpinionKey;
+
+    @TableField("recommend_unit_opinion_key")
+    private String recommendUnitOpinionKey;
+
+    @ApiModelProperty("删除标志(0代表存在,1代表删除,默认0)")
+    @TableField("del_flag")
+    private Integer delFlag;
+
+    @ApiModelProperty("创建人")
+    @TableField("create_by")
+    private String createBy;
+
+    @ApiModelProperty("创建时间")
+    @TableField("create_time")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("修改人")
+    @TableField("update_by")
+    private String updateBy;
+
+    @ApiModelProperty("修改时间")
+    @TableField("update_time")
+    private LocalDateTime updateTime;
+
+    @TableField("remark")
+    private String remark;
+
+
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysLaw.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysLaw.java
index fb7727a..80c99df 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysLaw.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysLaw.java
@@ -12,6 +12,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL;
 
@@ -27,6 +28,7 @@
 @Setter
 @TableName("sys_law")
 @ApiModel(value = "SysLaw对象", description = "法律法规表")
+@Accessors(chain = true)
 @JsonInclude(NON_NULL)
 public class SysLaw implements Serializable {
 
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysNotice.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysNotice.java
index 9c11855..2baba16 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysNotice.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysNotice.java
@@ -12,6 +12,7 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
 
@@ -29,6 +30,7 @@
 @Setter
 @TableName("sys_notice")
 @ApiModel(value = "SysNotice对象", description = "通知表")
+@Accessors(chain = true)
 @JsonInclude(NON_NULL)
 public class SysNotice implements Serializable {
 
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysRegion.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysRegion.java
index 5bab183..221bc87 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysRegion.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysRegion.java
@@ -45,6 +45,9 @@
     @TableField("sort")
     private Integer sort;
 
+    @ApiModelProperty("地区类型(0是疆内,1是疆外,默认0)")
+    @TableField("region_type")
+    private Integer regionType;
 
     @TableField(exist = false)
     private List<SysRegion> children;
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysUser.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysUser.java
index 5368b5b..cefea2c 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/SysUser.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/SysUser.java
@@ -8,6 +8,7 @@
 import com.gkhy.assess.common.domain.BaseEntity;
 import com.gkhy.assess.common.validate.AgencyGroup;
 import com.gkhy.assess.common.validate.ExpertGroup;
+import com.gkhy.assess.common.validate.MonitorGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -15,6 +16,7 @@
 import lombok.experimental.Accessors;
 import org.hibernate.validator.constraints.Length;
 
+import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
@@ -44,8 +46,10 @@
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @NotBlank(message = "登录账号不能为空")
-    @ApiModelProperty(value = "登录账号",required = true)
+    @NotBlank(message = "用户名不能为空")
+    @ApiModelProperty(value = "用户名",required = true)
+    @Length(min=5,max=16,message = "用户名长度需要在{min}和{max}之间")
+    @Pattern(regexp = "^[A-Za-z0-9]+$",message = "用户名只能由英文字母或者数字组成!")
     @TableField("username")
     private String username;
 
@@ -57,7 +61,8 @@
     @TableField("identity")
     private Integer identity;
 
-    @ApiModelProperty("用户类型(0代表工作人员,1代表领导,默认0)")
+    @NotNull(message = "用户类型不能为空",groups ={MonitorGroup.class} )
+    @ApiModelProperty("用户类型(0代表工作人员,1代表领导,默认0)监管用户")
     @TableField("user_type")
     private Integer userType;
 
@@ -67,7 +72,7 @@
 
     @NotBlank(message = "手机号码不能为空")
     @Length(min = 11, max = 11, message = "手机号只能为11位")
-    @Pattern(regexp = "^1[345678]\\\\d{9}$",message = "手机号码有误!")
+    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$",message = "手机号码有误!")
     @ApiModelProperty(value = "手机号码",required = true)
     @TableField("phone")
     private String phone;
@@ -81,7 +86,7 @@
     private String avatar;
 
     @NotBlank(message = "密码不能为空")
-    @ApiModelProperty(value = "密码",required = true)
+    @ApiModelProperty(value = "密码(base64)",required = true)
     @TableField("password")
     private String password;
 
@@ -97,6 +102,7 @@
     @TableField("del_flag")
     private Integer delFlag;
 
+    @NotBlank(message = "管辖区域不能为空",groups ={MonitorGroup.class} )
     @ApiModelProperty("管辖区域")
     @TableField("manage_region")
     private String manageRegion;
@@ -106,7 +112,7 @@
     private Long agencyId;
 
     @NotNull(message = "专家类型不能为空",groups ={ExpertGroup.class} )
-    @ApiModelProperty("专家类型")
+    @ApiModelProperty("专家类型(专家用户)(1安全评价,2检验检测)")
     @TableField("expert_type")
     private Integer expertType;
 
@@ -130,9 +136,9 @@
     @TableField("major")
     private String major;
 
-    @ApiModelProperty("审批状态(0审批通过,1待审批,2未通过 默认1)")
-    @TableField("approve")
-    private Integer approve;
+    @ApiModelProperty("审批状态(0暂存,1审核中,2审批通过,3审批驳回,4已作废 默认1)")
+    @TableField("state")
+    private Integer state;
 
     @ApiModelProperty("最后登录ip")
     @TableField("login_ip")
@@ -146,23 +152,24 @@
     @TableField("pwd_update_date")
     private LocalDateTime pwdUpdateDate;
 
+    @Valid
     @NotNull(message = "机构不能为空",groups ={AgencyGroup.class} )
-    @ApiModelProperty("机构对象")
+    @ApiModelProperty("机构对象,只限创建机构用户传")
     @TableField(exist = false)
     private SysAgency agency;
 
     @NotNull(message = "社保照片不能为空",groups ={ExpertGroup.class} )
-    @ApiModelProperty("社保照片路径列表")
+    @ApiModelProperty("社保照片路径列表,创建专家传")
     @TableField(exist = false)
     private List<SysAttach> socialAttach;
 
     @NotNull(message = "医保照片不能为空",groups ={ExpertGroup.class} )
-    @ApiModelProperty("医保照片路径列表")
+    @ApiModelProperty("医保照片路径列表,创建专家传")
     @TableField(exist = false)
     private List<SysAttach> medicalAttach;
 
     @NotNull(message = "工资照片不能为空",groups ={ExpertGroup.class} )
-    @ApiModelProperty("工资照片路径列表")
+    @ApiModelProperty("工资照片路径列表,创建专家传")
     @TableField(exist = false)
     private List<SysAttach> salaryAttach;
 
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/domain/vo/UploadObjectVO.java b/assess-system/src/main/java/com/gkhy/assess/system/domain/vo/UploadObjectVO.java
index 89739a1..0932e0b 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/domain/vo/UploadObjectVO.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/domain/vo/UploadObjectVO.java
@@ -11,7 +11,7 @@
 @Accessors(chain = true)  //链式写法
 @ApiModel(value = "上传文件返回对象", description = "上传文件返回对象")
 public class UploadObjectVO {
-    @ApiModelProperty("文件名称,前端访问图片链接格式:http://ip:port/api/images/文件保存相对路径")
+    @ApiModelProperty("文件名称,前端访问图片链接格式:http://ip:port/api/文件保存相对路径")
     private String filename;
 
     @ApiModelProperty("文件保存相对路径")
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertClassifyMapper.java b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertClassifyMapper.java
new file mode 100644
index 0000000..5990ff6
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertClassifyMapper.java
@@ -0,0 +1,18 @@
+package com.gkhy.assess.system.mapper;
+
+import com.gkhy.assess.system.domain.SysExpertClassify;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 系统专家分类表 Mapper 接口
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Mapper
+public interface SysExpertClassifyMapper extends BaseMapper<SysExpertClassify> {
+
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertInfoMapper.java b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertInfoMapper.java
new file mode 100644
index 0000000..abab04d
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysExpertInfoMapper.java
@@ -0,0 +1,39 @@
+package com.gkhy.assess.system.mapper;
+
+import com.gkhy.assess.system.domain.SysExpertInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统专家信息表 Mapper 接口
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Mapper
+public interface SysExpertInfoMapper extends BaseMapper<SysExpertInfo> {
+    /**
+     * 根据条件获取专家信息列表
+     * @param expertInfo
+     * @return
+     */
+    List<SysExpertInfo> expertInfoList(SysExpertInfo expertInfo);
+
+    /**
+     * 根据id card获取专家信息
+     * @param idCard
+     * @return
+     */
+    SysExpertInfo checkIdcardUnique(String idCard);
+
+    /**
+     * 批量删除专家信息
+     * @param expertIds
+     * @return
+     */
+    int deleteBatchByIds(Long[] expertIds);
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysRegionMapper.java b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysRegionMapper.java
index 2e08555..ebec532 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysRegionMapper.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysRegionMapper.java
@@ -20,5 +20,5 @@
      * @param name
      * @return
      */
-    SysRegion checkRegionUnique(@Param("name") String name, @Param("parentId")Long parentId);
+    SysRegion checkRegionUnique(@Param("name") String name,@Param("regionType")Integer regionType, @Param("parentId")Long parentId);
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysUserMapper.java b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysUserMapper.java
index c1c4083..f4b8f2f 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysUserMapper.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/mapper/SysUserMapper.java
@@ -108,4 +108,10 @@
      */
     SysUser checkEmailUnique(String email);
 
+    /**
+     * 根据id获取用户详情
+     * @param userId
+     * @return
+     */
+    SysUser getUserInfoById(Long userId);
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysAgencyService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysAgencyService.java
index 47b471d..1385517 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/SysAgencyService.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysAgencyService.java
@@ -27,7 +27,7 @@
      * @param agency
      * @return
      */
-    Boolean checkAgencyNameUnique(SysAgency agency);
+    boolean checkAgencyNameUnique(SysAgency agency);
 
     /**
      * 根据id获取机构详情
@@ -35,4 +35,11 @@
      * @return
      */
     SysAgency getAgencyById(Long agencyId);
+
+    /**
+     * 修改公示状态
+     * @param agency
+     * @return
+     */
+    boolean changePublic(SysAgency agency);
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertClassifyService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertClassifyService.java
new file mode 100644
index 0000000..b7be109
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertClassifyService.java
@@ -0,0 +1,44 @@
+package com.gkhy.assess.system.service;
+
+import com.gkhy.assess.system.domain.SysExpertClassify;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统专家分类表 服务类
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+public interface SysExpertClassifyService extends IService<SysExpertClassify> {
+    /**
+     * 专家分类列表
+     * @param expertClassify
+     * @return
+     */
+    List<SysExpertClassify> classifyTree(SysExpertClassify expertClassify);
+
+    /**
+     * 修改分类
+     * @param expertClassify
+     * @return
+     */
+    int modClassify(SysExpertClassify expertClassify);
+
+    /**
+     * 删除分类
+     * @param classifyId
+     * @return
+     */
+    int delClassify(Long classifyId);
+
+    /**
+     * 新增分类
+     * @param expertClassify
+     * @return
+     */
+    int addClassify(SysExpertClassify expertClassify);
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertInfoService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertInfoService.java
new file mode 100644
index 0000000..bd60fa5
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysExpertInfoService.java
@@ -0,0 +1,50 @@
+package com.gkhy.assess.system.service;
+
+import com.gkhy.assess.common.api.CommonPage;
+import com.gkhy.assess.system.domain.SysExpertInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 系统专家信息表 服务类
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+public interface SysExpertInfoService extends IService<SysExpertInfo> {
+    /**
+     * 分页获取专家信息
+     * @param expertInfo
+     * @return
+     */
+    CommonPage exportInfoList(SysExpertInfo expertInfo);
+
+    /**
+     * 新增专家信息
+     * @param expertInfo
+     * @return
+     */
+    int addExpertInfo(SysExpertInfo expertInfo);
+
+    /**
+     * 修改专家信息
+     * @param expertInfo
+     * @return
+     */
+    int modExpertInfo(SysExpertInfo expertInfo);
+
+    /**
+     * 删除专家信息
+     * @param expertId
+     * @return
+     */
+    int delExpertInfo(Long expertId);
+
+    /**
+     * 批量删除专家信息
+     * @param expertIds
+     * @return
+     */
+    int delExpertInfoBatch(Long[] expertIds);
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysLawService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysLawService.java
index 28859e2..b411ce1 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/SysLawService.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysLawService.java
@@ -56,4 +56,11 @@
      * @return
      */
     int changeLawStatus(SysLaw law);
+
+    /**
+     * 校验法律法规数据
+     * @param lawId
+     * @return
+     */
+    SysLaw checkLawDataScope(Long lawId);
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysNoticeService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysNoticeService.java
index 1a2745f..4dba354 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/SysNoticeService.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysNoticeService.java
@@ -55,4 +55,11 @@
      */
     int changeNoticeStatus(SysNotice notice);
 
+    /**
+     * 校验数据
+     * @param noticeId
+     * @return
+     */
+    SysNotice checkNoticeDataScope(Long noticeId);
+
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/SysUserService.java b/assess-system/src/main/java/com/gkhy/assess/system/service/SysUserService.java
index db7c500..611359d 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/SysUserService.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/SysUserService.java
@@ -65,11 +65,18 @@
     SysUser getUserByUsernamePhone(String username);
 
     /**
+     * 新增监管用户
+     * @param user
+     * @return
+     */
+    int addMonitor(SysUser user);
+
+    /**
      * 机构用户注册
      * @param user
      * @return
      */
-    int agencyRegister(SysUser user);
+    int addAgency(SysUser user);
 
     /**
      * 创建专家
@@ -99,6 +106,12 @@
      */
     int deleteUserById(Long userId);
 
+    /**
+     * 编辑监管用户
+     * @param user
+     * @return
+     */
+    int editMonitor(SysUser user);
 
     /**
      * 编辑机构用户
@@ -152,7 +165,7 @@
      * 校验用户是否有数据权限
      * @param userId
      */
-    void checkUserDataScope(Long userId);
+    SysUser checkUserDataScope(Long userId);
 
     /**
      * 导入用户数据
@@ -176,4 +189,11 @@
      */
     boolean changeApprove(SysUser user);
 
+    /**
+     * 根据id获取用户详情信息
+     * @param userId
+     * @return
+     */
+    SysUser getUserInfoById(Long userId);
+
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysAgencyServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysAgencyServiceImpl.java
index 40b4be6..65803ab 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysAgencyServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysAgencyServiceImpl.java
@@ -1,12 +1,17 @@
 package com.gkhy.assess.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.assess.common.api.CommonPage;
+import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.PageUtil;
 import com.gkhy.assess.system.domain.SysAgency;
+import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.mapper.SysAgencyMapper;
 import com.gkhy.assess.system.service.SysAgencyService;
+import com.gkhy.assess.system.utils.ShiroUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -30,7 +35,7 @@
     }
 
     @Override
-    public Boolean checkAgencyNameUnique(SysAgency agency) {
+    public boolean checkAgencyNameUnique(SysAgency agency) {
         Long agencyId = agency.getId()==null? -1L : agency.getId();
         SysAgency info = baseMapper.checkAgencyNameUnique(agency.getName());
         if (info!=null && info.getId().longValue() != agencyId.longValue())
@@ -44,4 +49,24 @@
     public SysAgency getAgencyById(Long agencyId) {
         return baseMapper.getAgencyById(agencyId);
     }
+
+    @Override
+    public boolean changePublic(SysAgency agency) {
+        checkAgencyDataScope(agency.getId());
+        SysAgency ay=new SysAgency().setId(agency.getId()).setPublication(agency.getPublication());
+        ay.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        return updateById(ay);
+    }
+
+    public SysAgency checkAgencyDataScope(Long agencyId) {
+        if(agencyId==null){
+            throw new ApiException("机构id为空!");
+        }
+        SysAgency agency = baseMapper.getAgencyById(agencyId);
+        if (ObjectUtil.isNull(agency))
+        {
+            throw new ApiException("机构数据不存在!");
+        }
+        return agency;
+    }
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysCommonServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysCommonServiceImpl.java
index e126d7e..25f68bd 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysCommonServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysCommonServiceImpl.java
@@ -1,5 +1,6 @@
 package com.gkhy.assess.system.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.system.domain.vo.UploadObjectVO;
 import com.gkhy.assess.system.service.SysCommonService;
@@ -10,16 +11,14 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.Date;
 import java.util.UUID;
 
 @Service
 public class SysCommonServiceImpl implements SysCommonService {
 
-    @Value("${image.upload_file}")
-    private String uploadFilePath;
-
-    @Value("${image.upload_image}")
-    private String uploadImagePath;
+    @Value("${image.upload_path}")
+    private String uploadPath;
 
     @Override
     public UploadObjectVO uploadFile(MultipartFile file) {
@@ -32,11 +31,11 @@
         String systemDir=System.getProperty("user.dir");
         String filePath=systemDir+File.separator+path;
         File dirFile=new File(filePath);
-        if(!dirFile.isFile()){
-            throw new ApiException("非文件,不能删除");
-        }
         if(!dirFile.exists()){
             throw new ApiException("文件不存在");
+        }
+        if(!dirFile.isFile()){
+            throw new ApiException("非文件,不能删除");
         }
         dirFile.delete();
         return true;
@@ -47,12 +46,8 @@
         String subfix=filename.substring(filename.lastIndexOf("."));
         filename= UUID.randomUUID().toString().replace("-","")+subfix;
         String systemDir=System.getProperty("user.dir");
-        String filePath="";
-        if(checkImageType(subfix)){
-            filePath=uploadImagePath;
-        }else{
-            filePath=uploadFilePath;
-        }
+        String dateStr= DateUtil.format(new Date(),"yyyyMMdd");
+        String filePath=uploadPath+File.separator+dateStr;
         File dirFile=new File(filePath);
         if(!dirFile.exists()){
             dirFile.mkdirs();
@@ -65,6 +60,7 @@
         } catch (IOException e) {
             throw new ApiException("发生错误,请联系管理员");
         }
+        filePath=filePath.replace("\\","/");
         UploadObjectVO uploadObjectVO=new UploadObjectVO().setFilename(filename)
                 .setPath(filePath);
         return uploadObjectVO;
@@ -76,7 +72,10 @@
                 ".jpeg".equalsIgnoreCase(subfix)||
                 ".png".equalsIgnoreCase(subfix)||
                 ".bmp".equalsIgnoreCase(subfix)||
-                ".tif".equalsIgnoreCase(subfix)
+                ".tif".equalsIgnoreCase(subfix)||
+                ".jfif".equalsIgnoreCase(subfix)||
+                ".webp".equalsIgnoreCase(subfix)||
+                ".gif".equalsIgnoreCase(subfix)
         ){
             return true;
         }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysConfigServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysConfigServiceImpl.java
index a886f29..9d842fb 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysConfigServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysConfigServiceImpl.java
@@ -1,10 +1,10 @@
 package com.gkhy.assess.system.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.assess.common.constant.CacheConstant;
 import com.gkhy.assess.common.utils.RedisUtils;
+import com.gkhy.assess.common.utils.StringUtils;
 import com.gkhy.assess.system.domain.SysConfig;
 import com.gkhy.assess.system.mapper.SysConfigMapper;
 import com.gkhy.assess.system.service.SysConfigService;
@@ -28,7 +28,7 @@
     public String getConfigByKey(String configKey) {
         String redisKey=getCacheKey(configKey);
         String configValue= (String) redisUtils.get(redisKey);
-        if(StrUtil.isNotEmpty(configValue)){
+        if(StringUtils.isNotEmpty(configValue)){
             return configValue;
         }
         SysConfig retConfig=baseMapper.getConfig(new SysConfig().setConfigKey(configKey));
@@ -36,7 +36,7 @@
             redisUtils.set(redisKey,retConfig.getConfigValue());
             return retConfig.getConfigValue();
         }
-        return StrUtil.EMPTY;
+        return StringUtils.EMPTY;
     }
 
     private String getCacheName(){
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysDictTypeServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysDictTypeServiceImpl.java
index ab0e065..f26be53 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysDictTypeServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysDictTypeServiceImpl.java
@@ -11,6 +11,7 @@
 import com.gkhy.assess.system.mapper.SysDictTypeMapper;
 import com.gkhy.assess.system.service.SysDictTypeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.assess.system.utils.ShiroUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -52,10 +53,10 @@
     }
 
     @Override
-    @Transactional(rollbackFor = RuntimeException.class)
+   // @Transactional(rollbackFor = RuntimeException.class)
     public int editDictType(SysDictType dict) {
         SysDictType oldDict= baseMapper.getDictTypeById(dict.getId());
-        dictDataMapper.updateDictDataDictType(oldDict.getDictType(), dict.getDictType());
+        dict.setDictType(oldDict.getDictType());//字典类型不能修改
         boolean b=updateById(dict);
         if(!b){
             throw new ApiException("修改数据字典类型失败");
@@ -78,11 +79,9 @@
 
     @Override
     public int changeDictTypeStatus(SysDictType dictType) {
-        boolean b=updateById(dictType);
-        if(!b){
-            throw new ApiException("修改数据字典类型失败");
-        }
-        return 1;
+        SysDictType dt=new SysDictType().setId(dictType.getId()).setDictType(dictType.getDictType());
+        dt.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        return baseMapper.updateById(dt);
     }
 
     @Override
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertClassifyServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertClassifyServiceImpl.java
new file mode 100644
index 0000000..c3f44fd
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertClassifyServiceImpl.java
@@ -0,0 +1,84 @@
+package com.gkhy.assess.system.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.assess.common.enums.DeleteFlagEnum;
+import com.gkhy.assess.common.exception.ApiException;
+import com.gkhy.assess.common.utils.StringUtils;
+import com.gkhy.assess.system.domain.SysExpertClassify;
+import com.gkhy.assess.system.mapper.SysExpertClassifyMapper;
+import com.gkhy.assess.system.service.SysExpertClassifyService;
+import com.gkhy.assess.system.utils.ShiroUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 系统专家分类表 服务实现类
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Service
+public class SysExpertClassifyServiceImpl extends ServiceImpl<SysExpertClassifyMapper, SysExpertClassify> implements SysExpertClassifyService {
+
+    @Override
+    public List<SysExpertClassify> classifyTree(SysExpertClassify expertClassify) {
+        LambdaQueryWrapper<SysExpertClassify> lambdaQueryWrapper = Wrappers.<SysExpertClassify>lambdaQuery();
+        if(StringUtils.isNotBlank(expertClassify.getClassifyName())){
+            lambdaQueryWrapper.like(SysExpertClassify::getClassifyName,expertClassify.getClassifyName());
+        }
+        List<SysExpertClassify> classifies= list(lambdaQueryWrapper);
+        //筛选出所有一级标签
+        return classifies.stream()
+                .filter(classifyEntity -> classifyEntity.getParentId()==0L)
+                .peek(classifyEntity -> classifyEntity.setChildren(this.listClassifyChildren(classifyEntity,classifies)))
+                .collect(Collectors.toList());
+    }
+
+    public List<SysExpertClassify> listClassifyChildren(SysExpertClassify classify,List<SysExpertClassify> classifies){
+        //递归查找子类
+        return classifies.stream()
+                .filter(classifyEntity -> Objects.equals(classifyEntity.getParentId(), classify.getClassifyId()))
+                .peek(classifyEntity -> classifyEntity.setChildren(this.listClassifyChildren(classifyEntity,classifies)))
+                .collect(Collectors.toList());
+    }
+
+
+    @Override
+    public int modClassify(SysExpertClassify expertClassify) {
+        expertClassify.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        boolean b=updateById(expertClassify);
+        if(!b){
+            throw new ApiException("修改专家分类失败");
+        }
+        return 1;
+    }
+
+    @Override
+    public int delClassify(Long classifyId) {
+        SysExpertClassify classify = new SysExpertClassify();
+        classify.setClassifyId(classifyId);
+        classify.setDelFlag(DeleteFlagEnum.DELETED.getCode());
+        boolean b=updateById(classify);
+        if(!b){
+            throw new ApiException("删除专家分类失败");
+        }
+        return 1;
+    }
+
+    @Override
+    public int addClassify(SysExpertClassify expertClassify) {
+        expertClassify.setCreateBy(ShiroUtils.getSysUser().getUsername());
+        boolean b=save(expertClassify);
+        if(!b){
+            throw new ApiException("新增专家分类失败");
+        }
+        return 1;
+    }
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertInfoServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertInfoServiceImpl.java
new file mode 100644
index 0000000..ce0272d
--- /dev/null
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysExpertInfoServiceImpl.java
@@ -0,0 +1,86 @@
+package com.gkhy.assess.system.service.impl;
+
+import com.gkhy.assess.common.api.CommonPage;
+import com.gkhy.assess.common.exception.ApiException;
+import com.gkhy.assess.common.utils.PageUtil;
+import com.gkhy.assess.system.domain.SysAgency;
+import com.gkhy.assess.system.domain.SysExpertInfo;
+import com.gkhy.assess.system.domain.SysUser;
+import com.gkhy.assess.system.mapper.SysExpertInfoMapper;
+import com.gkhy.assess.system.service.SysExpertInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.assess.system.utils.ShiroUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 系统专家信息表 服务实现类
+ * </p>
+ *
+ * @author kzy
+ * @since 2023-11-27 16:33:33
+ */
+@Service
+public class SysExpertInfoServiceImpl extends ServiceImpl<SysExpertInfoMapper, SysExpertInfo> implements SysExpertInfoService {
+
+    @Override
+    public CommonPage exportInfoList(SysExpertInfo expertInfo) {
+        PageUtil.startPage();
+        List<SysExpertInfo> agencyList=baseMapper.expertInfoList(expertInfo);
+        return CommonPage.restPage(agencyList);
+    }
+
+    @Override
+    public int addExpertInfo(SysExpertInfo expertInfo) {
+        if(!checkIdCardUnique(new SysExpertInfo().setIdCard(expertInfo.getIdCard()))){
+            throw new ApiException(expertInfo.getIdCard()+"身份证号码已经存在");
+        }
+        expertInfo.setCreateBy(ShiroUtils.getSysUser().getUsername());
+        boolean b=save(expertInfo);
+        if(!b){
+            throw new ApiException("新增专家信息失败");
+        }
+        return 1;
+    }
+
+    @Override
+    public int modExpertInfo(SysExpertInfo expertInfo) {
+        if(!checkIdCardUnique(expertInfo)){
+            throw new ApiException(expertInfo.getIdCard()+"身份证号码已经存在");
+        }
+        boolean b=updateById(expertInfo);
+        if(!b){
+            throw new ApiException("修改专家信息失败");
+        }
+        return 1;
+    }
+
+    @Override
+    public int delExpertInfo(Long expertId) {
+        SysExpertInfo expertInfo = new SysExpertInfo();
+        expertInfo.setExpertId(expertId);
+        expertInfo.setDelFlag(1);
+        boolean b= updateById(expertInfo);
+        if(!b){
+            throw new ApiException("删除专家信息失败");
+        }
+        return 1;
+    }
+
+    @Override
+    public int delExpertInfoBatch(Long[] expertIds) {
+        return baseMapper.deleteBatchByIds(expertIds);
+    }
+
+    public boolean checkIdCardUnique(SysExpertInfo expertInfo){
+        Long expertId = expertInfo.getExpertId()==null? -1L : expertInfo.getExpertId();
+        SysExpertInfo info = baseMapper.checkIdcardUnique(expertInfo.getIdCard());
+        if (info!=null && info.getExpertId().longValue() != expertId.longValue())
+        {
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysLawServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysLawServiceImpl.java
index 3981dcc..22b85e0 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysLawServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysLawServiceImpl.java
@@ -1,5 +1,6 @@
 package com.gkhy.assess.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.gkhy.assess.common.api.CommonPage;
 import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.PageUtil;
@@ -8,6 +9,7 @@
 import com.gkhy.assess.system.mapper.SysLawMapper;
 import com.gkhy.assess.system.service.SysLawService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.assess.system.utils.ShiroUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -64,6 +66,22 @@
 
     @Override
     public int changeLawStatus(SysLaw law) {
-        return editLaw(law);
+        checkLawDataScope(law.getId());
+        SysLaw lw=new SysLaw().setId(law.getId()).setStatus(law.getStatus());
+        lw.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        return baseMapper.updateById(lw);
+    }
+
+    @Override
+    public SysLaw checkLawDataScope(Long lawId) {
+        if(lawId==null){
+            throw new ApiException("法律法规id为空!");
+        }
+        SysLaw law = baseMapper.getLawById(lawId);
+        if (ObjectUtil.isNull(law))
+        {
+            throw new ApiException("law数据不存在!");
+        }
+        return law;
     }
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysNoticeServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysNoticeServiceImpl.java
index 2a88184..51c50e9 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysNoticeServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysNoticeServiceImpl.java
@@ -1,12 +1,15 @@
 package com.gkhy.assess.system.service.impl;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.assess.common.api.CommonPage;
 import com.gkhy.assess.common.exception.ApiException;
 import com.gkhy.assess.common.utils.PageUtil;
 import com.gkhy.assess.system.domain.SysNotice;
+import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.mapper.SysNoticeMapper;
 import com.gkhy.assess.system.service.SysNoticeService;
+import com.gkhy.assess.system.utils.ShiroUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -63,6 +66,23 @@
 
     @Override
     public int changeNoticeStatus(SysNotice notice) {
-        return editNotice(notice);
+        checkNoticeDataScope(notice.getId());
+        SysNotice nc=new SysNotice().setId(notice.getId()).setStatus(notice.getStatus());
+        nc.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        return baseMapper.updateById(nc);
+    }
+
+
+    @Override
+    public SysNotice checkNoticeDataScope(Long noticeId) {
+        if(noticeId==null){
+            throw new ApiException("通知id为空!");
+        }
+        SysNotice notice = baseMapper.getNoticeById(noticeId);
+        if (ObjectUtil.isNull(notice))
+        {
+            throw new ApiException("通知数据不存在!");
+        }
+        return notice;
     }
 }
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysRegionServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysRegionServiceImpl.java
index 42e6343..6baaa09 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysRegionServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysRegionServiceImpl.java
@@ -1,21 +1,23 @@
 package com.gkhy.assess.system.service.impl;
 
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.assess.common.constant.CacheConstant;
+import com.gkhy.assess.common.enums.RegionTypeEnum;
 import com.gkhy.assess.common.exception.ApiException;
+import com.gkhy.assess.common.utils.RedisUtils;
+import com.gkhy.assess.common.utils.StringUtils;
 import com.gkhy.assess.system.domain.SysRegion;
-import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.mapper.SysRegionMapper;
 import com.gkhy.assess.system.service.SysRegionService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.data.domain.Sort;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -29,20 +31,34 @@
 @Service
 public class SysRegionServiceImpl extends ServiceImpl<SysRegionMapper, SysRegion> implements SysRegionService {
 
+    @Autowired
+    private RedisUtils redisUtils;
     @Override
     public List<SysRegion> regionTree(SysRegion region) {
         LambdaQueryWrapper<SysRegion> lambdaQueryWrapper = Wrappers.<SysRegion>lambdaQuery();
-        if(StrUtil.isNotBlank(region.getName())){
+        if(StringUtils.isNotBlank(region.getName())){
             lambdaQueryWrapper.like(SysRegion::getName,region.getName());
         }
+        Integer regionType=region.getRegionType();
+        if(regionType==null){
+            regionType= RegionTypeEnum.INSIDE.getCode();
+        }
+        String key=redisUtils.generateKey(CacheConstant.SYS_REGION_KEY+regionType);
+        List<SysRegion> regionList= (List<SysRegion>) redisUtils.get(key);
+        if(regionList!=null&&regionList.size()>0){
+            return regionList;
+        }
+        lambdaQueryWrapper.eq(SysRegion::getRegionType,regionType);
         lambdaQueryWrapper.orderBy(true, true,SysRegion::getSort);
         List<SysRegion> regions= list(lambdaQueryWrapper);
         //筛选出所有一级标签
-        return regions.stream()
-                .filter(tagEntity -> tagEntity.getParentId()==0L)
-                .peek(tagEntity -> tagEntity.setChildren(this.listRegionChildren(tagEntity,regions)))
+        regionList= regions.stream()
+                .filter(regionEntity -> regionEntity.getParentId()==0L)
+                .peek(regionEntity -> regionEntity.setChildren(this.listRegionChildren(regionEntity,regions)))
                 .sorted(Comparator.comparing(SysRegion::getSort))
                 .collect(Collectors.toList());
+        redisUtils.set(key,regionList,60, TimeUnit.MINUTES);
+        return regionList;
     }
 
     public List<SysRegion> listRegionChildren(SysRegion region,List<SysRegion> regions){
@@ -56,19 +72,26 @@
 
     @Override
     public int addRegion(SysRegion region) {
-        if(!checkRegionUnique(new SysRegion().setName(region.getName()))){
+        if(!checkRegionUnique(new SysRegion().setName(region.getName()).setRegionType(RegionTypeEnum.INSIDE.getCode()))){
             throw new ApiException("已存在相同地区名称");
         }
+        region.setRegionType(RegionTypeEnum.INSIDE.getCode());
         boolean b=save(region);
         if(!b){
             throw new ApiException("新增地区失败");
         }
+        deleteRedisCache(RegionTypeEnum.INSIDE.getCode());
         return 0;
+    }
+
+    private void deleteRedisCache(Integer regionType){
+        String key=redisUtils.generateKey(CacheConstant.SYS_REGION_KEY+regionType);
+        redisUtils.del(key);
     }
 
     public boolean checkRegionUnique(SysRegion region){
         Long userId = region.getId()==null? -1L : region.getId();
-        SysRegion info = baseMapper.checkRegionUnique(region.getName(),region.getParentId()==null?0L:region.getParentId());
+        SysRegion info = baseMapper.checkRegionUnique(region.getName(),region.getRegionType(),region.getParentId()==null?0L:region.getParentId());
         if (info!=null && info.getId().longValue() != userId.longValue())
         {
             return false;
@@ -78,13 +101,17 @@
 
     @Override
     public int editRegion(SysRegion region) {
-        if(!checkRegionUnique(new SysRegion().setName(region.getName()))){
+        if(!region.getRegionType().equals(RegionTypeEnum.INSIDE.getCode())){
+            throw new ApiException("疆外数据不能修改");
+        }
+        if(!checkRegionUnique(region)){
             throw new ApiException("已存在相同地区名称");
         }
         boolean b=updateById(region);
         if(!b){
             throw new ApiException("修改地区失败");
         }
+        deleteRedisCache(RegionTypeEnum.INSIDE.getCode());
         return 0;
     }
 
@@ -93,12 +120,17 @@
         Long count=count(Wrappers.<SysRegion>lambdaQuery()
                 .eq(true,SysRegion::getParentId,reginId));
         if(count>0){
-            throw new ApiException("下级存在区县数据");
+            throw new ApiException("下级存在地区数据,不能删除");
+        }
+        SysRegion region=getById(reginId);
+        if(region.getRegionType().equals(RegionTypeEnum.OUTSIDE.getCode())){
+            throw new ApiException("疆外地区数据,不能删除");
         }
         boolean b=removeById(reginId);
         if(!b){
             throw new ApiException("删除地区失败");
         }
+        deleteRedisCache(RegionTypeEnum.INSIDE.getCode());
         return 0;
     }
 
diff --git a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
index a1ca5d8..a552f44 100644
--- a/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
+++ b/assess-system/src/main/java/com/gkhy/assess/system/service/impl/SysUserServiceImpl.java
@@ -1,7 +1,7 @@
 package com.gkhy.assess.system.service.impl;
 
+import cn.hutool.core.codec.Base64;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.assess.common.api.CommonPage;
 import com.gkhy.assess.common.constant.CacheConstant;
@@ -9,19 +9,18 @@
 import com.gkhy.assess.common.domain.vo.LoginBody;
 import com.gkhy.assess.common.enums.AttachTypeEnum;
 import com.gkhy.assess.common.enums.UserIdentityEnum;
-import com.gkhy.assess.common.enums.UserTypeEnum;
 import com.gkhy.assess.common.exception.ApiException;
-import com.gkhy.assess.common.utils.BeanValidators;
-import com.gkhy.assess.common.utils.JwtTokenUtil;
-import com.gkhy.assess.common.utils.PageUtil;
-import com.gkhy.assess.common.utils.RedisUtils;
-import com.gkhy.assess.system.domain.*;
+import com.gkhy.assess.common.utils.*;
+import com.gkhy.assess.system.domain.SysAgency;
+import com.gkhy.assess.system.domain.SysAttach;
+import com.gkhy.assess.system.domain.SysUser;
 import com.gkhy.assess.system.mapper.SysAgencyMapper;
 import com.gkhy.assess.system.mapper.SysUserMapper;
+import com.gkhy.assess.system.service.SysAgencyService;
 import com.gkhy.assess.system.service.SysAttachService;
 import com.gkhy.assess.system.service.SysConfigService;
-import com.gkhy.assess.system.utils.ShiroUtils;
 import com.gkhy.assess.system.service.SysUserService;
+import com.gkhy.assess.system.utils.ShiroUtils;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authc.*;
 import org.apache.shiro.subject.Subject;
@@ -34,6 +33,7 @@
 import javax.validation.Validator;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 
 /**
@@ -57,7 +57,8 @@
     private HttpServletRequest request;
     @Autowired
     private SysAgencyMapper agencyMapper;
-
+    @Autowired
+    private SysAgencyService agencyService;
     @Autowired
     private SysAttachService attachService;
 
@@ -65,8 +66,8 @@
     @Override
     public AccountVO login(LoginBody loginBody) {
         // 验证码校验
-       // validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
-        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), loginBody.getPassword(), false);
+      //  validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
+        UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(loginBody.getUsername(), Base64.decodeStr(loginBody.getPassword()), false);
         Subject subject= SecurityUtils.getSubject();
         String msg ;
         try {
@@ -77,20 +78,39 @@
 
             String token = JwtTokenUtil.sign(sysUser.getUsername(),sysUser.getPassword());
             accountVO.setToken(token);
-            String key= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(token));
-            // 设置超时时间
-            redisUtils.set(key,token);
-            redisUtils.expire(key,JwtTokenUtil.EXPIRATION*2/1000);
+            cacheUserToken(sysUser.getUsername(),token);
             return accountVO;
         }catch (UnknownAccountException | IncorrectCredentialsException uae){
             throw new ApiException("用户名/密码错误,请重新输入");
         } catch (LockedAccountException lae) { // 账号已被锁定
             msg = "账号已被锁定";
             throw new ApiException(msg);
-        } catch (AuthenticationException ae) { // 其他身份验证异常
-            msg = "用户认证失败";
+        }catch (AuthenticationException ae) { // 其他身份验证异常
+            msg = "用户认证失败:"+ae.getMessage();
             throw new ApiException(msg);
         }
+    }
+
+    /**
+     * 清空旧的登录信息,保证同时只有一个用户再登录,后登录用户会挤掉前一个用户
+     * @param username
+     */
+    public void cacheUserToken(String username,String newToken){
+
+//        String userKey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + username);
+//        String oldToken = (String) redisUtils.get(userKey);
+//        if (StrUtil.isNotBlank(oldToken)) {
+//            String oldTokenkey = redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN + ":" + JwtTokenUtil.md5Encode(oldToken));
+//            redisUtils.del(oldTokenkey);
+//            redisUtils.del(userKey);
+//        }
+//        redisUtils.set(userKey, newToken,(JwtTokenUtil.EXPIRATION*2/1000)+2);
+
+
+        String tokenKey= redisUtils.generateKey(CacheConstant.SYS_USER_TOKEN+":"+JwtTokenUtil.md5Encode(newToken));
+        // 设置超时时间
+        redisUtils.set(tokenKey,newToken);
+        redisUtils.expire(tokenKey,JwtTokenUtil.EXPIRATION*2/1000);
     }
 
     /**
@@ -103,13 +123,13 @@
      */
     public void validateCaptcha(String username, String code, String uuid)
     {
-            if(StrUtil.isBlank(code)||StrUtil.isBlank(uuid)){
+            if(StringUtils.isBlank(code)||StringUtils.isBlank(uuid)){
                 throw new ApiException("验证码或验证码标识为空");
             }
             String verifyKey = CacheConstant.CAPTCHA_CODE_KEY +uuid;
             String captcha = (String) redisUtils.get(verifyKey);
             redisUtils.del(verifyKey);
-            if (StrUtil.isBlank(captcha))
+            if (StringUtils.isBlank(captcha))
             {
                 throw new ApiException("验证码已失效");
             }
@@ -161,6 +181,11 @@
         return sysUser;
     }
 
+    public void delCacheByUsername(String username){
+        String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username);
+        redisUtils.del(key);
+    }
+
     @Override
     public SysUser getUserByUsernamePhone(String username) {
         String key=redisUtils.generateKey(CacheConstant.SYS_USER_NAME+":"+username);
@@ -174,9 +199,14 @@
         return sysUser;
     }
 
+    public void validatorPassword(String password){
+        if(password.length()<5||password.length()>30){
+            throw new ApiException("密码长度须在5-30之间");
+        }
+    }
+
     @Override
-    @Transactional(rollbackFor = RuntimeException.class)
-    public int agencyRegister(SysUser user) {
+    public int addMonitor(SysUser user) {
         //校验用户信息
         if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){
             throw new ApiException("用户名已存在");
@@ -184,22 +214,46 @@
         if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
             throw new ApiException("手机号已存在");
         }
+        String originPsword=Base64.decodeStr(user.getPassword());
+        validatorPassword(originPsword);
+        user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt()));
+        user.setIdentity(UserIdentityEnum.MONITOR.getCode());
+        boolean b=save(user);
+        if(!b){
+            throw new ApiException("创建监管用户信息失败");
+        }
+        return 1;
+    }
+
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public int addAgency(SysUser user) {
+        //校验用户信息
+        if(!checkUsernameUnique(new SysUser().setUsername(user.getUsername()))){
+            throw new ApiException("用户名已存在");
+        }
+        if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
+            throw new ApiException("手机号已存在");
+        }
+        String originPsword=Base64.decodeStr(user.getPassword());
+        validatorPassword(originPsword);
         SysAgency agency=user.getAgency();
         if(ObjectUtil.isNull(agency)){
             throw new ApiException("机构信息不能为空");
         }
+
         //查询机构信息是否存在
-        if(ObjectUtil.isNotNull(agencyMapper.checkAgencyNameUnique(agency.getName()))){
+        if(!agencyService.checkAgencyNameUnique(new SysAgency().setName(agency.getName()))){
             throw new ApiException("机构名称已存在");
         }
-
         int i=agencyMapper.insert(agency);
         if(i<1){
             throw new ApiException("保存机构信息失败");
         }
-
+        user.setIdentity(UserIdentityEnum.AGENCY.getCode());
         user.setAgencyId(agency.getId());
-        user.setUserType(UserIdentityEnum.AGENCY.getCode());
+        user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt()));
+
         boolean b=save(user);
         if(!b){
             throw new ApiException("创建机构用户信息失败");
@@ -217,8 +271,11 @@
         if(!checkPhoneUnique(new SysUser().setUsername(user.getPhone()))){
             throw new ApiException("手机号已存在");
         }
-        user.setUserType(UserIdentityEnum.EXPERT.getCode());
+        String originPsword=Base64.decodeStr(user.getPassword());
+        validatorPassword(originPsword);
+        user.setIdentity(UserIdentityEnum.EXPERT.getCode());
         user.setCreateBy(ShiroUtils.getSysUser().getUsername());
+        user.setPassword(JwtTokenUtil.encryptPassword(user.getUsername(),originPsword,user.getSalt()));
         boolean b=save(user);
         if(!b){
             throw new ApiException("创建专家信息失败");
@@ -258,14 +315,47 @@
     }
 
     @Override
+    public SysUser getUserInfoById(Long userId) {
+        return baseMapper.getUserInfoById(userId);
+    }
+
+    @Override
     @Transactional(rollbackFor = RuntimeException.class)
     public int deleteUserById(Long userId) {
         SysUser user=getUserById(userId);
+        if(user==null){
+            throw new ApiException("用户不存在");
+        }
+        if(Objects.equals(ShiroUtils.getUserId(), userId)){
+            throw new ApiException("不能删除自己账号");
+        }
         //机构用户,将机构信息设置成删除状态
-        if(user.getUserType().equals(UserIdentityEnum.AGENCY.getCode())){
+        if(user.getIdentity().equals(UserIdentityEnum.AGENCY.getCode())){
+            if(user.getAgencyId()==null){
+                throw new ApiException("获取机构id为空");
+            }
             agencyMapper.deleteAgencyById(user.getAgencyId());
         }
+        delCacheByUsername(user.getUsername());
         return baseMapper.deleteUserById(userId);
+    }
+
+    @Override
+    public int editMonitor(SysUser user) {
+        //校验用户信息
+        if(!checkUsernameUnique(user)){
+            throw new ApiException("用户名已存在");
+        }
+        if(!checkPhoneUnique(user)){
+            throw new ApiException("手机号已存在");
+        }
+        delCacheByUsername(user.getUsername());
+        user.setPassword(null);
+        boolean b=updateById(user);
+        if(!b){
+            throw new ApiException("更新监管用户信息失败");
+        }
+        return 1;
     }
 
 
@@ -280,14 +370,18 @@
             throw new ApiException("手机号已存在");
         }
         SysAgency agency=user.getAgency();
-        if(ObjectUtil.isNull(agency)){
-            throw new ApiException("机构信息不能为空");
+        if(ObjectUtil.isNull(agency)||agency.getId()==null){
+            throw new ApiException("机构信息或者id不能为空");
         }
+
         //查询机构信息是否存在
-        if(ObjectUtil.isNotNull(agency)){
+        if(!agencyService.checkAgencyNameUnique(agency)){
             throw new ApiException("机构名称已存在");
         }
-        agencyMapper.updateById(agency);
+
+        delCacheByUsername(user.getUsername());
+        agencyService.updateById(agency);
+        user.setPassword(null);
         boolean b=updateById(user);
         if(!b){
             throw new ApiException("更新用户失败");
@@ -304,6 +398,7 @@
         if(!checkPhoneUnique(user)){
             throw new ApiException("手机号已存在");
         }
+        user.setPassword(null);
         boolean b=updateById(user);
         if(!b){
             throw new ApiException("更新专家信息失败");
@@ -331,14 +426,21 @@
             attaches.add(attach);
         }
         attachService.saveBatch(attaches);
-
+        delCacheByUsername(user.getUsername());
         return 1;
     }
 
 
     @Override
     public boolean resetUserPwd(SysUser user) {
-        return updateById(user);
+        String originPsword=Base64.decodeStr(user.getPassword());
+        validatorPassword(originPsword);
+        checkUserAllowed(user);
+        SysUser oldUser=checkUserDataScope(user.getId());
+        SysUser newUser=new SysUser().setId(user.getId()).setPassword(JwtTokenUtil.encryptPassword(oldUser.getUsername(),originPsword,oldUser.getSalt()));
+        newUser.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        delCacheByUsername(oldUser.getUsername());
+        return updateById(newUser);
     }
 
     @Override
@@ -380,12 +482,16 @@
     }
 
     @Override
-    public void checkUserDataScope(Long userId) {
+    public SysUser checkUserDataScope(Long userId) {
+        if(userId==null){
+            throw new ApiException("用户id为空!");
+        }
         SysUser user = baseMapper.getUserById(userId);
         if (ObjectUtil.isNull(user))
         {
             throw new ApiException("用户数据不存在!");
         }
+        return user;
     }
 
     @Override
@@ -441,14 +547,20 @@
     @Override
     public boolean changeUserStatus(SysUser user) {
         checkUserAllowed(user);
-        checkUserDataScope(user.getId());
-        return updateById(user);
+        SysUser existUser=checkUserDataScope(user.getId());
+        SysUser su=new SysUser().setId(user.getId()).setStatus(user.getStatus());
+        su.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        delCacheByUsername(existUser.getUsername());
+        return updateById(su);
     }
 
     @Override
     public boolean changeApprove(SysUser user) {
         checkUserAllowed(user);
-        checkUserDataScope(user.getId());
-        return updateById(user);
+        SysUser existUser=checkUserDataScope(user.getId());
+        SysUser su=new SysUser().setId(user.getId()).setState(user.getState());
+        su.setUpdateBy(ShiroUtils.getSysUser().getUsername());
+        delCacheByUsername(existUser.getUsername());
+        return updateById(su);
     }
 }
diff --git a/assess-system/src/main/resources/mapper/system/SysAgencyMapper.xml b/assess-system/src/main/resources/mapper/system/SysAgencyMapper.xml
index 0cc159e..cab000a 100644
--- a/assess-system/src/main/resources/mapper/system/SysAgencyMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysAgencyMapper.xml
@@ -1,17 +1,59 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.gkhy.assess.system.mapper.SysAgencyMapper">
+    <resultMap type="com.gkhy.assess.system.domain.SysAgency" id="SysAgencyResult">
+        <id     property="id"        column="id"         />
+        <result property="name"     column="name"      />
+        <result property="creditCode"     column="credit_code"      />
+        <result property="attribute"     column="attribute"      />
+        <result property="province"     column="province"      />
+        <result property="city"     column="city"      />
+        <result property="district"     column="district"      />
+        <result property="address"     column="address"      />
+        <result property="web"     column="web"      />
+        <result property="legalPerson"     column="legal_person"      />
+        <result property="legalPhone"     column="legal_phone"      />
+        <result property="manager"     column="manager"      />
+        <result property="managerPhone"     column="manager_phone"      />
+        <result property="certNumber"     column="cert_number"      />
+        <result property="issueDate"     column="issue_date"      />
+        <result property="validDate"     column="valid_date"      />
+        <result property="assetValue"     column="asset_value"      />
+        <result property="workArea"     column="work_area"      />
+        <result property="archiveArea"     column="archive_area"      />
+        <result property="regAddress"     column="reg_address"      />
+        <result property="business"     column="business"      />
+        <result property="reportPath"     column="report_path"      />
+        <result property="delFlag"     column="del_flag"      />
+        <result property="publication"     column="publication"      />
+        <result property="createTime"     column="create_time"      />
+        <result property="remark"     column="remark"      />
+        <association property="user" javaType="com.gkhy.assess.system.domain.SysUser" resultMap="userResult" />
+        <collection property="businessNames" ofType="java.lang.String" select="getBusinessById" column="{business=business}"/>
+    </resultMap>
+
+    <resultMap id="userResult" type="com.gkhy.assess.system.domain.SysUser">
+        <id     property="id"       column="user_id"        />
+        <result property="username"     column="username"      />
+        <result property="phone"      column="phone"       />
+    </resultMap>
+
+
     <sql id="selectAgencyVo">
-        select a.id,a.name,a.credit_code,a.attribute,a.city,a.district,a.address,a.web,a.legal_person,a.legal_phone,a.manager,a.manager_phone,a.cert_number,a.issue_date,a.valid_date,a.asset_value,a.work_area,a.archive_area,a.reg_address,a.business,a.report_path,a.del_flag,a.create_time,a.remark
+        select a.id,a.name,a.credit_code,a.attribute,a.province,a.city,a.district,a.address,a.web,a.legal_person,
+               a.legal_phone,a.manager,a.manager_phone,a.cert_number,a.issue_date,a.valid_date,a.asset_value,a.work_area,a.archive_area,
+               a.reg_address,a.business,a.report_path,a.del_flag,a.publication,a.create_time,a.remark,
+               b.id as user_id,b.username,b.phone
         from sys_agency a
+        left join sys_user b on b.agency_id=a.id and b.identity=1 and b.del_flag=0
     </sql>
 
     <select id="checkAgencyNameUnique" resultType="com.gkhy.assess.system.domain.SysAgency">
         select id,name from sys_agency where name=#{name} and del_flag=0 limit 1
     </select>
 
-    <select id="agencyList" resultType="com.gkhy.assess.system.domain.SysAgency">
-        select a.id,a.name,a.create_time,a.business,a.city from sys_agency a
+    <select id="agencyList" resultMap="SysAgencyResult">
+        select a.id,a.name,a.credit_code,a.attribute,a.cert_number,a.issue_date,a.valid_date,a.create_time,a.business,a.province,a.city,a.district,a.publication from sys_agency a
         <where>
             and a.del_flag = 0
             <if test="name != null and name != ''">
@@ -21,13 +63,13 @@
                 AND a.city=#{city}
             </if>
             <if test="business != null and business != ''">
-                AND a.business=#{business}
+                AND a.business like concat("%",#{business},"%")
             </if>
         </where>
         order by a.create_time desc
     </select>
 
-    <select id="getAgencyById" resultType="com.gkhy.assess.system.domain.SysAgency">
+    <select id="getAgencyById" resultMap="SysAgencyResult">
         <include refid="selectAgencyVo"/>
         where a.del_flag = 0 and a.id=#{agencyId}
     </select>
@@ -35,4 +77,12 @@
     <delete id="deleteAgencyById" parameterType="java.lang.Long">
         update sys_agency set del_flag=1 where id=#{agencyId}
     </delete>
+
+
+    <select id="getBusinessById" resultType="java.lang.String">
+        select label from sys_dict_data where id in
+        <foreach item="item" index="index" collection="business.split(',')"  open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
 </mapper>
diff --git a/assess-system/src/main/resources/mapper/system/SysAttachMapper.xml b/assess-system/src/main/resources/mapper/system/SysAttachMapper.xml
index 91733c0..abdd9ff 100644
--- a/assess-system/src/main/resources/mapper/system/SysAttachMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysAttachMapper.xml
@@ -4,7 +4,7 @@
     <delete id="deleteAttachsByUserId">
         delete from sys_attach
         <where>
-            and user_id=#{user_id}
+            and user_id=#{userId}
             <if test="type!=null and type!=''">
                 and type=#{type}
             </if>
diff --git a/assess-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml b/assess-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml
new file mode 100644
index 0000000..b97128d
--- /dev/null
+++ b/assess-system/src/main/resources/mapper/system/SysExpertClassifyMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gkhy.assess.system.mapper.SysExpertClassifyMapper">
+
+</mapper>
diff --git a/assess-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml b/assess-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
new file mode 100644
index 0000000..1bd95ed
--- /dev/null
+++ b/assess-system/src/main/resources/mapper/system/SysExpertInfoMapper.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.gkhy.assess.system.mapper.SysExpertInfoMapper">
+
+    <sql id="selectExpertInfoVo">
+        select expert_id,name,sex,birthday,phone,title,electronic_photo,id_card,duty_status,
+               company_name,company_address,dept_name,job,company_telephone,fax_num,email,
+               graduation_school,degree,speciality,current_profession,support_direction_safety,
+               support_direction_prevention,support_direction_emergency,resume_key,paper_situation_key,
+               reward_key,achievement_key,personal_opinion_key,recommend_unit_opinion_key,remark,create_by,
+               create_time,big_classify,small_classify,del_flag
+        from sys_agency
+    </sql>
+
+    <delete id="deleteBatchByIds">
+        update expert_info set del_flag = 1  where expert_id in
+        <foreach collection="expertIds" item="expertId" separator="," open="(" close=")">
+            #{expertId}
+        </foreach>
+    </delete>
+
+    <select id="expertInfoList" resultType="com.gkhy.assess.system.domain.SysExpertInfo">
+        <include refid="selectExpertInfoVo"/>
+        <where>
+            and del_flag = 0
+            <if test="name != null and name != ''">
+                and name like concat('%', #{name}, '%')
+            </if>
+            <if test="bigClassify != null">
+                and big_classify = #{bigClassify}
+            </if>
+            <if test="smallClassify != null">
+                and small_classify = #{smallClassify}
+            </if>
+            <if test="dutyStatus != null">
+                and duty_status = #{dutyStatus}
+            </if>
+            <if test="params.startTime != null "><!-- 开始时间检索 -->
+                and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.startTime},'%y%m%d')
+            </if>
+            <if test="params.endTime != null "><!-- 结束时间检索 -->
+                and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+    <select id="checkIdcardUnique" resultType="com.gkhy.assess.system.domain.SysExpertInfo">
+        select expert_id,name from sys_expert_info where del_flag=0 limit 1
+    </select>
+</mapper>
diff --git a/assess-system/src/main/resources/mapper/system/SysLawMapper.xml b/assess-system/src/main/resources/mapper/system/SysLawMapper.xml
index de6e34e..679233f 100644
--- a/assess-system/src/main/resources/mapper/system/SysLawMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysLawMapper.xml
@@ -7,7 +7,7 @@
     </sql>
 
     <select id="lawList" resultType="com.gkhy.assess.system.domain.SysLaw">
-        select l.id,l.title,l.create_time from sys_law l
+        select l.id,l.title,l.sub_title,l.law_type,l.pub_agency,l.pub_date,l.create_time from sys_law l
         <where>
             <if test="title != null and title != ''">
                 AND l.title like concat('%', #{title}, '%')
diff --git a/assess-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/assess-system/src/main/resources/mapper/system/SysNoticeMapper.xml
index 9179ea2..290bbcf 100644
--- a/assess-system/src/main/resources/mapper/system/SysNoticeMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysNoticeMapper.xml
@@ -3,12 +3,12 @@
 <mapper namespace="com.gkhy.assess.system.mapper.SysNoticeMapper">
 
     <sql id="selectNoticeVo">
-        select n.id,n.title,n.content,n.status,n.create_time,n.remark
+        select n.id,n.title,n.content,n.status,n.create_time,n.update_time,n.remark
         from sys_notice n
     </sql>
 
     <select id="noticeList" resultType="com.gkhy.assess.system.domain.SysNotice">
-        select n.id,n.title,n.create_time from sys_notice n
+        select n.id,n.title,n.create_time,n.update_time from sys_notice n
         <where>
             <if test="title != null and title != ''">
                 AND n.title like concat('%', #{title}, '%')
diff --git a/assess-system/src/main/resources/mapper/system/SysRegionMapper.xml b/assess-system/src/main/resources/mapper/system/SysRegionMapper.xml
index 846a848..0887f26 100644
--- a/assess-system/src/main/resources/mapper/system/SysRegionMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysRegionMapper.xml
@@ -3,6 +3,6 @@
 <mapper namespace="com.gkhy.assess.system.mapper.SysRegionMapper">
 
     <select id="checkRegionUnique" resultType="com.gkhy.assess.system.domain.SysRegion">
-        select * from sys_region where name=#{name} and parent_id=#{parentId}
+        select * from sys_region where name=#{name} and parent_id=#{parentId} and region_type=#{regionType}
     </select>
 </mapper>
diff --git a/assess-system/src/main/resources/mapper/system/SysUserMapper.xml b/assess-system/src/main/resources/mapper/system/SysUserMapper.xml
index 7b7b107..f42a7e2 100644
--- a/assess-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/assess-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -22,7 +22,7 @@
         <result property="expertType"        column="expert_type"         />
         <result property="jobTitle"        column="job_title"         />
         <result property="major"        column="major"         />
-        <result property="approve"        column="approve"         />
+        <result property="state"        column="state"         />
         <result property="loginIp"       column="login_ip"        />
         <result property="loginDate"     column="login_date"      />
         <result property="pwdUpdateDate" column="pwd_update_date" />
@@ -32,9 +32,9 @@
         <result property="updateTime"    column="update_time"     />
         <result property="remark"        column="remark"          />
         <association property="agency" javaType="com.gkhy.assess.system.domain.SysAgency" resultMap="agencyResult" />
-        <collection property="socialAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getAttachByUserId" column="{userId=id}"/>
-        <collection property="medicalAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getAttachByUserId" column="{userId=id}"/>
-        <collection property="salaryAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getAttachByUserId" column="{userId=id}"/>
+        <collection property="socialAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getSocialAttachByUserId" column="{userId=id}"/>
+        <collection property="medicalAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getMedicalAttachByUserId" column="{userId=id}"/>
+        <collection property="salaryAttach" ofType="com.gkhy.assess.system.domain.SysAttach" select="getSalaryAttachByUserId" column="{userId=id}"/>
     </resultMap>
 
 
@@ -45,7 +45,7 @@
     </resultMap>
 
     <sql id="selectUserVo">
-        select u.id,u.username, u.name,u.identity,u.user_type,u.phone,u.sex,u.status,u.del_flag,u.manage_region,u.expert_type,u.agency_id,u.post,u.job_title,u.major,u.approve,u.create_time,u.remark,a.id as agency_id,a.name as agency_name,a.credit_code
+        select u.id,u.username, u.name,u.identity,u.user_type,u.phone,u.sex,u.status,u.del_flag,u.manage_region,u.expert_type,u.agency_id,u.post,u.job_title,u.major,u.state,u.create_time,u.remark,a.id as agency_id,a.name as agency_name,a.credit_code
         from sys_user u
         left join sys_agency a on u.agency_id=a.id
     </sql>
@@ -61,14 +61,14 @@
     </delete>
 
     <select id="getUserByUsername" resultMap="SysUserResult">
-        select id,username,name,password,salt,identity,status,del_flag from sys_user
+        select id,username,name,password,salt,identity,state,status,del_flag from sys_user
         where username=#{username} and del_flag=0
     </select>
 
     <select id="monitorList"  resultType="com.gkhy.assess.system.domain.SysUser">
         <include refid="selectUserVo"/>
         <where>
-            and u.del_flag = 0 and u.user_type=0
+            and u.del_flag = 0 and u.identity=0
             <if test="username != null and username != ''">
                 AND u.username like concat('%', #{username}, '%')
             </if>
@@ -85,7 +85,7 @@
     <select id="agencyList"  resultMap="SysUserResult">
         <include refid="selectUserVo"/>
         <where>
-            and u.del_flag = 0 and u.user_type=1
+            and u.del_flag = 0 and u.identity=1
             <if test="username != null and username != ''">
                 AND u.username like concat('%', #{username}, '%')
             </if>
@@ -102,7 +102,7 @@
     <select id="expertList"  resultMap="SysUserResult">
         <include refid="selectUserVo"/>
         <where>
-            and u.del_flag = 0 and u.user_type=2
+            and u.del_flag = 0 and u.identity=2
             <if test="username != null and username != ''">
                 AND u.username like concat('%', #{username}, '%')
             </if>
@@ -112,6 +112,9 @@
             <if test="phone != null and phone != ''">
                 AND u.phone like concat('%', #{phone}, '%')
             </if>
+            <if test="expertType != null and expertType != ''">
+                AND u.expert_type =#{expertType}
+            </if>
         </where>
         order by u.create_time desc
     </select>
@@ -119,17 +122,17 @@
 
 
     <select id="getUserByPhone" resultMap="SysUserResult">
-        select id,username,name,password,salt,identity,status,del_flag from sys_user
+        select id,username,name,password,salt,identity,state,status,del_flag from sys_user
         where phone=#{phone} and del_flag=0
     </select>
 
     <select id="getUserByEmail" resultMap="SysUserResult">
-        select id,username,name,password,salt,identity,status,del_flag from sys_user
+        select id,username,name,password,salt,identity,state,status,del_flag from sys_user
         where email=#{email} and del_flag=0
     </select>
 
     <select id="getUserById" resultMap="SysUserResult">
-        select id,username,name,password,salt,identity,status,del_flag from sys_user
+        select id,username,name,password,salt,identity,status,del_flag,agency_id from sys_user
         where id=#{userId}
     </select>
 
@@ -146,12 +149,25 @@
     </select>
 
     <select id="getUserByUsernamePhone" resultType="com.gkhy.assess.system.domain.SysUser">
-        select id,username,name,password,salt,identity,status,del_flag from sys_user
+        select id,username,name,password,salt,identity,state,status,del_flag from sys_user
         where (username=#{username} or phone=#{username}) and del_flag=0
     </select>
 
 
-    <select id="getAttachByUserId" resultType="com.gkhy.assess.system.domain.SysAttach">
-        select id,name,path,type,user_id,create_time from sys_attach where user_id=#{userId} order by create_time desc limit 1
+    <select id="getSocialAttachByUserId" resultType="com.gkhy.assess.system.domain.SysAttach">
+        select id,name,path,type,user_id,create_time from sys_attach where user_id=#{userId} and type=1 order by create_time desc
+    </select>
+
+    <select id="getMedicalAttachByUserId" resultType="com.gkhy.assess.system.domain.SysAttach">
+        select id,name,path,type,user_id,create_time from sys_attach where user_id=#{userId} and type=2 order by create_time desc
+    </select>
+
+    <select id="getSalaryAttachByUserId" resultType="com.gkhy.assess.system.domain.SysAttach">
+        select id,name,path,type,user_id,create_time from sys_attach where user_id=#{userId} and type=3 order by create_time desc
+    </select>
+
+    <select id="getUserInfoById" resultMap="SysUserResult">
+        <include refid="selectUserVo"/>
+        where u.id=#{userId}
     </select>
 </mapper>
diff --git a/pom.xml b/pom.xml
index ea92af6..5fbb586 100644
--- a/pom.xml
+++ b/pom.xml
@@ -40,6 +40,7 @@
         <fastjson.version>1.2.76</fastjson.version>
         <caffeine.version>2.9.3</caffeine.version>
         <kaptcha.version>2.3.2</kaptcha.version>
+        <commons.io.version>2.13.0</commons.io.version>
     </properties>
     <dependencyManagement>
         <dependencies>
@@ -151,6 +152,13 @@
                 <version>${kaptcha.version}</version>
             </dependency>
 
+            <!-- io常用工具类 -->
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons.io.version}</version>
+            </dependency>
+
         </dependencies>
     </dependencyManagement>
 

--
Gitblit v1.9.2